2012-02-24 38 views
2

我開始使用Cassandra(我是新來的)開發一個項目,並且正在開發一個模式。我有一個問題,那就是I/O的含義是否有一行包含其中的數百萬列,特別是關於寫入的內容?在Cassandra中使用非常寬的行時I/O含義

爲了明確我想要做什麼,我基本上想跟蹤IP所屬的域。我認爲這樣做的一種方式是使用像「google.com」這樣的rowkeys,並且該行內的每一列都是屬於該域的IP地址。有人告訴我,如果你的列很寬,而且你改變它,那麼它會創建大量的I/O b/c,它必須在整個數據不可變的某個時間點將整個行重新寫入磁盤。它是否正確?我認爲Cassandra只會將更改後的數據以及更改後的數據寫入提交日誌和memtable。然後,當數據被刷新並進行壓縮時,它會將數據合併到列系列的新SSTable中。

回答

3

寬行通常用於時間序列數據,一般不應該是個問題。每一行必須適合單個節點(計算機)上,但 - 看到您的架構http://wiki.apache.org/cassandra/CassandraLimitations

的一個問題是,你會搜索所有的域(行)來定位的IP,這將通過IP非常低效使查找。如果你確實想通過IP查找,那麼以某種方式鍵入IP的行會更好;你可能需要兩個,所以你可以在任何方向查找。

一下你對這個commitlog/memtable->的SSTable過程是正確的,但看到那this thread提到,壓縮可能會較慢,由於in_memory_compaction_limit_in_mb - 但也出現了一些變化,以壓實,因爲這是書面和它可能是過時的信息。

+0

感謝您的信息! – 2012-02-27 13:47:41

0

您可以隨時使用playOrm,它可以爲您做很寬的行,然後您就可以執行S-SQL(可伸縮SQL)。您只需將數據正確分區以執行S-SQL。通常分區是按客戶或按時間等等(您可以在分區內進行連接和一切操作)。