【发布时间】:2014-03-27 07:06:51
【问题描述】:
我正在设计(和编码)一个报告引擎,它为报告生成聚合的数据 - 这不是关于表示层的。
示例: 我有一个充满人员记录的数据库。数据库中的每个人都有大约 15 个属性。
我的报告需要
- 根据大约 15 条业务规则选择特定的一组人员。这些比单纯的 WHERE 子句更类似于逻辑流动算法,例如: 以所有 18-25 岁的个体经营者为例。如果少于 100 人,还包括 25-28 岁的年龄组...如果仍然少于 100 人,还包括学生...这样继续...
- 在获得我正在处理的特定组之后,我需要创建多个数据集,这些数据集按不同的分组并包含不同的指标。例如,平均身高 - 按体重分组,平均收入 - 按年龄分组......这些也有复杂的业务规则,比如 - 如果一个年龄段的人少于 5 人,则将其与相邻的有里面的人少,但不管怎样总是独立展示20-30岁年龄段的....
我主要担心的是我有很多的业务规则,它们在形式上非常相似,但有各种不同的小细节。我想确保我以一种可维护且易于理解的方式编写它,因为根据我的经验,这通常会成为一个非常长的文件,其中包含许多难以维护的嵌套 if-else。
我有大量的报告,我想预先计算尽可能多的报告。我确实知道实际上可能有无穷无尽的报告标准,所以我还需要即时生成报告。我想将预计算和临时报告的逻辑保留在一个地方。
这里的报告数据是产品,所以这些数据需要非常快地分发给最终用户。
当前的设计包括存储在 CouchDB 中的数据和在 nodeJS 上完成的处理。如果有一些东西可以更容易/更快地使用,这些可以更改。我有几十万条记录,我不会说这是“大数据”(但当然 - 这可能会增长)。
谢谢!!
【问题讨论】:
标签: database algorithm design-patterns database-design