2016-04-23 90 views
0

我正在研究傳感器數據(時間序列)。表中的列數是3000.
例如:nodeid,timestamp,sen1,sen2,.....sen-nnodeidtimestamp是按時間戳排序的主鍵。
的記錄數都10000關於卡桑德拉閱讀性能

當單個列SELECT查詢(SELECT timestamp,sen1 FROM <table>)熱曲通過卡桑德拉datastax Java驅動程序requsted 3.0它是在15秒的答覆;即,如果我想讀取所有標籤,則一次只需一個標籤即可獲得3000個標籤,大約需要3000 * 15秒= 12到13小時。 它是在單節點羣集與16GB RAM。
我爲JVM分配了10GB。仍然響應時間沒有改變。在創建表格時我使用了LevelCompactionStragy。

硬件:Intel Core i7和普通硬盤非SSD,8GB RAM 如何減少單節點羣集上的讀取或查詢時間?

+0

你能提供硬件規格嗎?數量衆多的CPU核心?旋轉硬盤或SSD? – doanduyhai

+1

單節點集羣是一個壞主意。有一個SQL解決方案更好。如果您想真正測試Cassandra,請嘗試向集羣添加更多節點,並考慮更多關於該體系結構的信息。 – Whitefret

回答

0

顯然,數據建模存在問題。國際海事組織,一個3000列的表是不好的。如果您的用例類似於「SELECT timestamp,sen1 FROM」,那麼您應該將其設置爲「主鍵(時間戳,傳感器ID)」。

「SELECT timestamp,sen1」在您的模型中,cassandra仍然會將所有其他列值從磁盤讀取到內存中。

我不知道什麼是 '節點ID' 你的情況。我希望這不是卡桑德拉節點ID ..

0

(SELECT時間戳,SEN1 FROM表)

這就好比立即獲取所有數據(在您的情況下爲10000條記錄)。 因此,獲得1列或3000列將使Cassandra服務器讀取所有SSTables。關鍵是它不會是12或13個小時。

仍然15秒似乎令人難以置信。這個措施中是否包含網絡延遲和客戶端寫入?

正如其中一個答案中所提到的,您的模型看起來很糟糕(如果您將時間戳記作爲分區鍵,則數據會變成兩個稀疏分區,並且需要從多個分區讀取一定範圍的數據。只有node_id作爲分區鍵,分區將承載太多的數據並且可以跨越20億的C *限制)。我的建議是

希望這有助於!