跪求解决方法,各位大虾。现有需求:大概有200万客户,每个客户需要计算10个指标。我只能想到两种设计方法。一种:一个客户一个指标一条记录,这样就有200*10=2000万条数据。二种:一个客户所有的指标一条记录,这样就只有200w条记录。现在要在这些数据上进行运算,对于前一种又2000w条数据,进行算术运算肯定会很慢,而后一种只有200w条数据计算起来肯定会比第一种快得多,但是第二种方法也会有弊端,就是这个指标有可能会增加,这样的会对于第二种方法就必须增加列,感觉这样不是很好。不知道各位高手有没有啥比较好的解决办法。
具体设计思路:第一种办法,物理保存客户纪录,以及每个客户的指标值,分开保存。因为需要计算的客户应该不是全部都计算吧。这样就通过检索条件过滤出需要计算的客户以及指标值,保存到索引表中,(为了加快速度,可以用客户标识,作为索引表下标),然后通过循环索引表纪录,进行计算,这样就避免了频繁IO操作。提供速度。
2、按第二种,也可以实现,在设计代码的时候,也尽量使用动态语句,并增加获取列个数的常量参数。一旦系统需要增加指标,那么代码中只需修改列个数的指标,以及对应与增加列的相关计算也就可以了;或者干脆预留出列,以备已后增加指标也是解决的办法。第一种方法耦合算法多,维护相对困难,尽管他能满足你的要求。
这样设计不符合数据库设计标准,除非你有特殊考虑
例如:
资产id,资产,资产类型,资产性质......
否则不要这样设计,增加了冗余,而且这样的冗余没有什么意义,只会增加数据库和查询的负担
客户ID,交易ID,做复合索引。客户ID做单独索引。不具体到业务描述,是没有办法给你提供更适合的设计思想的。只能帮你这么多。哈哈。
第一种相当于所有的属性都放到一张表里,除非是用户自定义数据,才有理由这样做。这种设计属于表设计模式的EAV模式。
oracle QQ群:54775466
期待您的一起探讨
欢迎爱好者入群学习