问题如下。我们实时收集一些数据,比如说每秒 100 个条目。我们希望有实时报告。报告应按小时显示数据。我们要做的就是创建一些传入数据的总和并进行一些智能索引,以便我们可以轻松地提供查询,例如“给我 value2 for featureA = x, and featureB = y, for 2012-01-01 09:00 - 10:00"
为了避免过多的 I/O 操作,我们在内存中聚合数据(这意味着我们将它们相加),然后将它们刷新到数据库中。假设它每 10 秒左右发生一次,这对于我们的实时报告来说是可以接受的延迟。
所以基本上,用 SQL 术语来说,我们最终会得到 20 个(或更多)这样的表(好吧,我们可以通过组合 sum 来减少它们,但这并没有太大区别):
- 时间、特征A、特征B、特征C、值1、值2、值3
- 时间、特征A、特征D、值4、值5
- 时间、特征C、特征E、值6、值7
- 等等
(我并不是说解决方案必须是 SQL,我只是为了解释手头的问题。) Time 列是时间戳(具有小时精度),Feature 列是系统实体的一些 id,值是整数值(算)。
所以现在问题来了。由于数据的本质,即使我们聚合它们,这些聚合表仍然有(太多)插入。这是因为一些数据是稀疏的,这意味着对于每 100 个条目,我们在某些聚合表中有 50 个条目。我知道我们可以通过升级硬件来继续前进,但我觉得我们可以通过更智能的存储机制做得更好。例如,我们可以使用 SQL 数据库,但我们不需要它的大部分功能(事务、连接等)。
因此,鉴于这种情况,我的问题如下。你们如何处理大流量的实时报告?谷歌以某种方式为网络分析做到了这一点,所以这毕竟是可能的。这里有什么秘密武器吗?我们对任何解决方案持开放态度——无论是 Hadoop & Co、NoSQL、集群还是其他任何解决方案。