繁体   English   中英

我应该考虑使用哪种数据库技术来构建可扩展的“移动平均”视图?

[英]What database technologies should I consider for building a scalable “running average” view?

我们正在开发一个应用程序,其中数百万的用户将同时输入信息。 假设该应用程序允许人们对他们想居住的地理位置进行评估。 允许每个参与者使用0-10之间的十进制值对每个区域评分。 每个人根据性别(例如,性别)以及认为自己活跃或喜欢文化的人都属于一个或多个组。

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

以下是一些可能使用的表格。 注意:为了简洁起见,我没有包括关系表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 | 
                                                            +-----+-----+-------+ 

我们当前的实现使用一组相似的表来存储评分,但是我们无法实时计算平均值。 每当我们需要结果时(例如,向我显示加利福尼亚州女性的平均得分),我们都必须将所有信息拉入内存并手动运行计算。

我想知道如何利用数据库技术(例如视图,触发器,存储过程等)向我展示一个简单的表格,该表格可以让我按人员和组的评分,因此我们不必手动运行计算。

我想要类似以下的表格,其中所有内容都由数据库处理。 RegionScoresByPersonGroups表上的任何插入,更新,删除操作都将自动反映在该表中。 如果不明显,则标记为*的行将计算出来。 在这种情况下,我使用的是简单的算术平均值,但我的设计应允许使用任何类型的函数。

EID代表实体ID(个人或团体)

除了决定如何构建这种视图之外,我不确定要为PeopleGroups使用(和索引)哪种数据类型。 我想我希望索引是整数,但是这将阻止我创建下表,因为我无法区分Person 1和Group 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  | …     |*
+-----------+-----+-------+

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

https://flume.apache.org/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM