我需要设计一个近乎实时的系统,其中文档(带有字段:id,关键字,时间戳)被添加到系统中。要求是在最后x分钟内从添加到系统的文档中获取top-k关键字。典型的文档添加率约为100个文档/秒,将来可能会增加(因此技术应该是水平可扩展的)。
我正在考虑使用solr-facets(带分片)来生成top-k关键字,其中我有点担心solr的高写/秒。另一种选择是使用Cassandra,但不确定如何扩展范围查询(计算聚合),因为OrderPreservingPartitioner可能使分配负载变得困难。
答案 0 :(得分:1)
这听起来像Complex Event Processing问题,而不是数据库或搜索问题。您并不关心如何保存数据,就像实时获取关键字趋势或类似内容一样。您想要查看的一些供应商/库(有许多遗漏):
<强>微软/ .NET:强>
StreamInsight - 微软的CEP产品
Reactive Extensions for .NET - 用于流处理的.NET扩展
<强>爪哇:强>
Esper - 非常受欢迎的OSS流处理库
Storm - 在Hadoop上进行流处理,可能扩展到极大的数据量
第三方/专有(不会评论这些,对它们不够了解):
答案 1 :(得分:0)
同时使用sql和nosql。
使用sql进行查询,并将nosql用于复杂数据。
编写x2代码。并根据他们的需求解决每一个问题。