2012-01-06 80 views
0

我需要設計一個接近實時的系統,將文檔(字段:id,關鍵字,時間戳)添加到系統中。要求是在最近x分鐘內從添加到系統的文檔中獲取top-k關鍵字。典型的文檔添加率大約爲100個文檔/秒,未來可能會增加(因此技術應該可以橫向擴展)。用於實時數據聚合的哪種技術(SQL/NoSQL)

我正在考慮使用solr-facets(與分片)來生成top-k關鍵字,我在這裏關心solr的高寫入/秒。另一種選擇是使用Cassandra,但不知道它如何擴展範圍查詢(以計算聚合),因爲OrderPreservingPartitioner可能會使分配負載變得困難。

回答

1

這聽起來像一個Complex Event Processing問題,而不是數據庫或搜索問題。您並不在乎如何保持數據,因爲您可以實時獲取關鍵字趨勢或類似的內容。你會想在看一些廠商/庫(有許多遺漏):

微軟/ .NET:

StreamInsight - 微軟的CEP提供

Reactive Extensions for .NET - 擴展.NET中流處理

的Java:

Esper - 非常流行的OSS STRE正在處理庫

Storm - Hadoop的流處理,有可能擴展到非常大的數據量

第三方/專有(不會對這些評論,不知道有足夠的瞭解他們):

StreamBase

Aleri

+0

只是好奇,什麼可能是solr方面的問題? – 2012-01-06 17:41:40

+0

它根本沒有錯。它似乎不是這份工作的正確工具。 Facets,AFAIK(和Grant Ingersoll可以在這裏糾正我)讓你通過搜索的屬性深入挖掘搜索結果,這對於網站上的產品搜索等很有用。你只關心事件的最後幾分鐘 - 之後你丟棄舊的東西。 – 2012-01-06 17:46:53

0

使用SQL和NoSQL在同一時間。

對查詢使用sql,對複雜數據使用nosql。

寫入x2代碼。並根據他們的需求解決所有問題。