2015-05-06 77 views
0

我正在嘗試設計創建一個將從傳感器(與水污染有關的活動)收集數據的基於雲的系統(IaaS),並且在某些事件將決定處理數據特定的傳感器。數據特徵爲: 1.對於每個傳感器數據每隔幾天發送一次(最多每月6次) 2.每個傳感器讀數包含大約5000個事件,封裝在50-100條發送到服務器(這樣的「會話」大約需要20分鐘,每5秒發送一次消息) 3.我構建系統以處理每秒30,000條消息的速率。 4.數據的處理不應該是實時的,一旦「會話」完成處理,我就有大約10分鐘的時間。 5. 90%的會話不感興趣,一旦完成就可以扔掉。另外10%的事件或事件封裝在根據他們的消息中,我需要決定是否需要處理整個會話數據並向傳感器發送警報,表明存在污染。我不確定哪個NoSQL適合我的場景

我創建了一個每秒生成5000條消息的工具,我試圖找出哪個數據庫對我的情況最爲理想。 這是我想嘗試數據庫:

  1. 卡桑德拉 - 我會保存在鑰匙的存儲器中收集每個會話的。這些密鑰用於存儲在cassandra中的消息。一旦我檢測到包含錯誤讀數的消息,我將需要將所有其他消息放在「會話」中並處理它們(這意味着需要cassandra 50-100個請求)。我關心的是寫性能(因爲我有很多讀寫操作)+我沒有一個好的策略來刪除90%不需要的會話。

  2. Couchbase - 我將根據sensorID爲每個「會話」保存文檔,並將每條消息附加到文檔。一旦我檢測到包含錯誤讀數的消息,我只需要發送一個文檔請求。我的關注點在於閱讀表現。

  3. Redis - 像cassandra一樣使用它。我認爲表現將是最好的,但我將需要處理的數據自己的分片和複製,以不達到內存限制

我很想聽到哪個選項是最合適的

謝謝

+1

Couchbase具有很好的讀取性能(我認爲它優於Cassandra),請參閱http://blog.couchbase.com/dissecting-nosql-benchmark – user1697575

回答

-1

這是一個有趣的。如果我們轉到CAP定理的基礎知識,並嘗試根據一致性,可用性和分區容差的需要來選擇一個數據庫。

高一致性和可用性 - 選擇MySQL,PostgreSQL,Greenplum,Vertica,Neo4J。

高可用性和分區使用允差卡桑德拉,伏地魔,迪納摩,CouchDB的,了Riak

高一致性和分區使用允差HBase的,Redis的,MongoDB的, 的BerkeleyDB,BigTable的

所以我投票是爲卡桑德拉在這裏。

+1

您沒有提及Couchbase。 CouchDB不是Couchbase。 – user1697575

2

Reg。 Redis - 您可以考慮使用DAAS(數據即服務)。該服務將爲您管理所有實例,集羣,縮放,數據持久性和高可用性設置。 其中一個例子是Redis Cloud by Redis Labs