【发布时间】:2015-12-22 17:56:28
【问题描述】:
我正在尝试为数据聚合和存储的 NxN 问题提出一个理论解决方案。例如,我有大量通过流传入的数据。流以点为单位发送数据。每个点有 5 个维度:
- 位置
- 日期
- 时间
- 姓名
- 统计数据
然后需要汇总和存储这些数据,以允许其他用户出现并查询数据的位置和时间。用户应该能够查询如下(伪代码):
显示位置 1,2,3,4,....N 在日期 01/01/2011 和 01/03/2011 之间的上午 11 点和下午 4 点之间的汇总统计信息
不幸的是,由于数据的规模,不可能从动态点聚合所有这些数据,因此需要在此之前进行聚合。如您所见,虽然数据可以聚合在多个维度上。
他们可以查询任意天数或位置,因此查找所有组合需要大量的预聚合:
- 今天记录位置 1
- 今天记录位置 1,2
- 今天记录位置 1,3
- 今天记录位置 1,2,3
- 等等...最多N
在查询之前预处理所有这些组合可能会导致大量不可行的处理。如果我们有 200 个不同的位置,那么我们就有 2^200 个组合,这几乎不可能在任何合理的时间内预先计算。
我确实考虑过在 1 维上创建记录,然后可以在请求时即时进行合并,但这也需要大规模的时间。
问题:
- 鉴于用户很可能查询所有维度,我应该如何选择正确的维度和/或维度组合?
- 是否有任何我可以参考的案例研究、我可以阅读的书籍或您能想到的任何其他有用的东西?
感谢您的宝贵时间。
编辑 1
当我说将数据聚合在一起时,我的意思是结合其他维度的统计信息和名称(维度 4 和 5)。因此,例如,如果我请求位置 1、2、3、4..N 的数据,那么我必须将这 N 个位置的统计信息和名称计数合并在一起,然后再将其提供给用户。
同样,如果我请求日期为 01/01/2015 - 01/12/2015 的数据,那么我必须汇总这些时期之间的所有数据(通过添加汇总名称/统计信息)。
最后,如果我要求 01/01/2015 - 01/12/2015 日期之间的位置 1、2、3、4..N 之间的数据,那么我必须汇总这些日期之间所有这些位置的所有数据。
为了这个例子,假设通过统计数据需要某种嵌套循环并且不能很好地扩展,尤其是在运行中。
【问题讨论】:
标签: database database-design architecture scale aggregation