2017-06-23 24 views
0

假設我有1000個具有完全相同結構的實體。例如,所有實體都有三個字段:卡桑德拉在許多相同結構的表中或者有許多行的表中有什麼更好

String id; 
String name; 
int amount; 

另外我還希望在系統中會有大量的每種類型的實體。

所以,我有兩個變種現在:

  1. 對於每個實體創建單獨的表看起來像:

    CREATE TABLE <SOME_ENTITY_NAME> (
        id text PRIMARY KEY, 
        name text, 
        amount int 
    ) 
    
  2. 我只能創建一個表,但複合priamry鍵:

    CREATE TABLE ALL_ENTITIES_TABLE (
        entity_name text, 
        id text, 
        name text, 
        amount int, 
        PRIMARY KEY ((entity_name, id)) 
    ); 
    

當然,只支持一張表更簡單一些,但性能如何?

因此,考慮到每種類型的實體都有數百萬(可能是數十億)的記錄,問題是哪種變體在性能方面更好?

+1

什麼是你的訪問模式......反正第二種方法更好.... WHERE entity_name =''和id ='''將被第二個表格有效地處理...如果你有不同的用例...分享你的使用案例 –

回答

0

在我看來,第一種方法在可維護性方面不正確。過多的動態創建的表格應該很難維護。另外,如果正確使用分區/集羣順序(根據數據檢索的需要),查詢應該更容易和高效。另外,如果您使用Cassandra的3.x版本,輔助索引可以派上用場。

注:二級索引不允許排序。

0

Cassandra是圍繞這樣的事實設計的,即磁盤空間是所有中最便宜的資源。您必須圍繞最常用的查詢構建數據模型,而不管該模型是否會佔用更多的磁盤空間 - 只要它能以最有效的方式滿足查詢的目的。如果不查看您將要使用的查詢,我將無法回答您的問題。一般來說,只要符合查詢的目的,您就可以隨意創建所需的表格。我會建議看看here