我应该考虑哪些数据库技术来构建可扩展的"运行平均值"视图?

时间:2015-05-16 20:12:16

标签: sql-server

我们正在开发一个应用程序,数百万用户将同时输入信息。假设应用程序允许人们对他们想要居住的地区进行评级。允许每个参与者使用0-10的十进制值对每个区域进行评级。每个人都属于一个或多个群体,这些群体基于性别等属性,以及认为自己活跃或喜欢文化的人。

每次评分时,我们都需要有一个视图,向我们显示每个地区/组的平均评分。我知道大多数数据库都有平均值#34;函数,但为了我们的目的,我们需要能够使用我们自己的函数,因为我们可以使用几何平均值而不是算术平均值。

下面是一些可能使用的表格。 注意:我没有包含关系表 PeopleGroups ,该关系表用于映射一个人所属的群组,以简化用途。

Regions               People            Groups              RegionScoresByPerson
+-----+------------+  +-----+-------+   +-----+----------+  +-----+-----+-------+
| RID |    NAME    |  | PID | Name  |   | GID |   Name   |  | RID | PID | Score |
+-----+------------+  +-----+-------+   +-----+----------+  +-----+-----+-------+
|   1 | Flordia    |  | P1  | Alice |   | G0  | Everyone |  |   1 | P1  |     6 |
|   2 | California |  | P2  | Bob   |   | G1  | Women    |  |   1 | P2  |     8 |
+-----+------------+  | P3  | Frank |   | G2  | Men      |  |   1 | P3  |     3 |
                      | P4  | Mary  |   | G3  | Active   |  |   1 | P4  |     2 |
                      +-----+-------+   | G4  | Culture  |  |   1 | P1  |     7 |
                                        +-----+----------+  |   1 | P2  |     5 |
                                                            |   1 | P3  |     8 | 
                                                            |   1 | P4  |     2 | 
                                                            +-----+-----+-------+ 

我们当前的实施使用了一组类似的表来存储评分,但我们不能实时计算平均值。任何时候我们需要结果(例如,显示加利福尼亚女性的平均分数),我们必须将所有信息提取到内存中并手动运行计算。

我想知道如何利用数据库技术(如视图,触发器,存储过程等)向我展示一个简单的表格,这样我就可以为人们和团队获取分数,这样我们就不必手动运行计算。

我想要一些像下面这样的表,其中所有内容都由DB处理。 RegionScoresByPerson 表格上的任何插入,更新,删除操作都会自动反映在此表格中。如果不明显,则标有*计算行的行。在这种情况下,我使用简单的算术平均值,但我的设计应允许任何类型的函数。

EID 代表实体ID(个人或群组)

除了决定如何构建这样的视图外,我还不确定使用什么类型的数据类型(和索引)。我想我希望索引是整数,但是这会阻止我创建下面的表格,因为我无法区分人员1和组1 - 会有ID如P1和G1是一个性能打击?我显然担心设计是可扩展的。

ScoreView
+-----------+-----+-------+
| RID       | EID | Score |
| 1         | P1  | 6     |
| 1         | P2  | 8     |
| 1         | P3  | 3     |
| 1         | P4  | 2     |
| 1         | P1  | 7     |
| 1         | P2  | 5     |
| 1         | P3  | 8     |
| 1         | P4  | 2     |
| 1         | G0  | 4.75  |*
| 1         | G1  | 4     |*
| 1         | G2  | …     |*
| 1         | G3  | …     |*
+-----------+-----+-------+

1 个答案:

答案 0 :(得分:0)

Apache Flume是旨在解决此类问题的开源工具。另请查看Google Cloud Dataflow。

https://flume.apache.org/