2017-06-19 59 views
1

我是新來的NoSQL;所以,我試圖理解一些Cassandra的概念,我從我研究過的幾十個來源中無法得到這些概念。卡桑德拉寬行/動態列

  1. 我應該考慮寬行和動態列作爲同義詞;或者他們是兩個不同的概念?
  2. 我是正確的集合類型的列思想爲寬行?
  3. 這在我看來,寬行是從早期版本的卡桑德拉的概念,只能通過節儉API來創建;而集合類型是寬行的現代版本。
  4. 集合類型仍然限於64k元素?或者,在CQL 3之後,該限制已被刪除?

回答

1

一個常見的誤解是,CQL不支持動態列或寬行。相反,CQL旨在支持您可以使用Thrift模型執行的所有操作,但使其更容易,更易於訪問。

讓我們來看看下面的CQL表。

CREATE TABLE data (
    sensor_id int, 
    collected_at timestamp, 
    volts float, 
    PRIMARY KEY (sensor_id, collected_at) 
); 

,並插入一些數據

sensor_id | collected_at    | volts 
----------+--------------------------+------- 
    1  | 2013-06-05 15:11:00-0500 | 3.1 
    1  | 2013-06-05 15:11:10-0500 | 4.3 
    1  | 2013-06-05 15:11:20-0500 | 5.7 
    2  | 2013-06-05 15:11:00-0500 | 3.2 
    3  | 2013-06-05 15:11:00-0500 | 3.3 
    3  | 2013-06-05 15:11:10-0500 | 4.3 

這裏匯聚列collected_at類似於節儉動態列。(問題1)

如果我們看一下這個表的內部結構

RowKey: 1 
=> (cell=2013-06-05 15:11:00-0500, value=3.1, timestamp=1370463146717000) 
=> (cell=2013-06-05 15:11:10-0500, value=4.3, timestamp=1370463282090000) 
=> (cell=2013-06-05 15:11:20-0500, value=5.7, timestamp=1370463282093000) 
------------------- 
RowKey: 2 
=> (cell=2013-06-05 15:11:00-0500, value=3.2, timestamp=1370463332361000) 
------------------- 
RowKey: 3 
=> (cell=2013-06-05 15:11:00-0500, value=3.3, timestamp=1370463332365000) 
=> (cell=2013-06-05 15:11:10-0500, value=4.3, timestamp=1370463332368000) 

可以看出,聚類列collected_at使得這個表的表寬行(問題1)

因此,我們可以說,如果一個表有一個或多個聚集鍵,我們可以稱爲該表寬行。

讓我們再舉一個例子:

CREATE TABLE example (
    key1 text PRIMARY KEY, 
    map1 map<text,text>, 
    list1 list<text>, 
    set1 set<text> 
); 

插入數據:

key1 | list1    | map1           | set1 
------+-------------------+----------------------------------------------+----------------------- 
john | ['doug', 'scott'] | {'doug': '555-1579', 'patricia': '555-4326'} | {'patricia', 'scott'} 

現在來看看內部結構:

RowKey: john 
=> (column=, value=, timestamp=1374683971220000) 
=> (column=map1:doug, value='555-1579', timestamp=1374683971220000) 
=> (column=map1:patricia, value='555-4326', timestamp=1374683971220000) 
=> (column=list1:26017c10f48711e2801fdf9895e5d0f8, value='doug', timestamp=1374683971220000) 
=> (column=list1:26017c12f48711e2801fdf9895e5d0f8, value='scott', timestamp=1374683971220000) 
=> (column=set1:'patricia', value=, timestamp=1374683971220000) 
=> (column=set1:'scott', value=, timestamp=1374683971220000) 

你可以看到地圖鍵和設置值存儲爲動態列和映射值a nd列表值存儲爲該列的值。它類似於寬行(Q.2)

而最後一個:收集類型映射關鍵和設置大小限制爲64k。

  • 收藏(列表):收藏限制:〜20億(2^31);值大小:65535(216-1)
  • 收藏(套):收藏限額:20億(2^31);值大小:65535(216-1)
  • 收藏(地圖):收藏限制:約20億(2^31);按鍵數:65535(216-1);值大小:65535(216-1)

來源:
https://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows https://teddyma.gitbooks.io/learncassandra/content/model/cql_and_data_structure.html http://docs.datastax.com/en/cql/3.3/cql/cql_reference/refLimits.html