使用哪种技术 (SQL/NoSQL) 进行实时数据聚合
Posted
技术标签:
【中文标题】使用哪种技术 (SQL/NoSQL) 进行实时数据聚合【英文标题】:Which technology ( SQL/NoSQL) to use for real-time data aggregation 【发布时间】:2012-02-04 06:59:46 【问题描述】:我需要设计一个近乎实时的系统,将文档(带有字段:id、关键字、时间戳)添加到系统中。要求是从最近 x 分钟内添加到系统的文档中获取前 k 个关键字。典型的文档添加速率约为 100 个文档/秒,未来可能会增加(因此技术应该是水平可扩展的)。
我正在考虑使用 solr-facets (with sharding) 来生成 top-k 关键字,我有点担心 solr 的高写入/秒。另一种选择是使用 Cassandra,但不确定它将如何扩展范围查询(以计算聚合),因为 OrderPreservingPartitioner 可能难以分配负载。
【问题讨论】:
【参考方案1】:这听起来像是Complex Event Processing 问题,而不是数据库或搜索问题。您并不关心保留数据,而是关心实时获取关键字趋势或类似的东西。您想要查看的一些供应商/库是(有很多遗漏):
微软/.NET:
StreamInsight - Microsoft 的 CEP 产品
Reactive Extensions for .NET - 用于流处理的 .NET 扩展
Java:
Esper - 非常流行的OSS流处理库
Storm - Hadoop 上的流处理,可能扩展到非常大的数据量
第 3 方/专有(不会评论这些,对它们了解不够):
StreamBase
Aleri
【讨论】:
只是好奇,solr-facets 可能有什么问题? 完全没有问题。它似乎不是适合这项工作的工具。 Facets,AFAIK(格兰特英格索尔可以在这里纠正我)让您可以通过搜索属性深入研究搜索结果,这对于网站上的产品搜索等非常有用。你只关心最后几分钟的事件——在那之后你丢弃旧的东西。【参考方案2】:同时使用sql和nosql。
查询使用sql,复杂数据使用nosql。
编写 x2 代码。并根据他们的需求解决每一个问题。
【讨论】:
以上是关于使用哪种技术 (SQL/NoSQL) 进行实时数据聚合的主要内容,如果未能解决你的问题,请参考以下文章