我對Cassandra數據建模有疑問。對不起,很長的帖子。Cassandra數據模型指導
我在這裏採取假設的情況。假設我有一個主服務器,它從網絡上的機器(1個或多個)收集數據。其他機器的數據形式如機器細節,狀態,是否連接,是上或下,是臺式機還是筆記本電腦,就像這樣。我有這樣
- 由於主服務器ID獲取連接到它
- 鑑於機器ID的機器列表,獲取本機的詳細信息的查詢。
- 鑑於機器的狀態(沒有其他)獲取機器列表(一個或多個)
- 鑑於標誌is_connected獲取連接到主服務器的機器列表?
- 鑑於國旗is_up獲取機器列表?
因此,根據Cassandra,我們應該爲每個查詢(近似)創建一個列族。我擔心的是上面的查詢#3,#4,#5,這些查詢的where子句分別是status,is_connected和is_up,因此爲了滿足這些查詢,我必須創建包含這些標誌作爲分區鍵或集羣鍵的表。
CREATE TABLE server (
server_id text,
server_name text,
status text,
.
.
.
.
.
other information,
PRIMARY KEY (server_id))
CREATE TABLE machine (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (machine_id))
CREATE TABLE machine_by_status (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (status, machine_id))
CREATE TABLE machine_by_connected (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (is_connected, machine_id))
CREATE TABLE machine_by_up_down (
machine_id text,
machine_name text,
status boolean,
is_connected boolean,
is_up boolean,
.
.
.
.
.
other information,
PRIMARY KEY (is_up, machine_id))
但是這些標誌的值可能會在一段時間內發生變化。值可能是多個。如果這些是分區密鑰或集羣密鑰的一部分,那麼我無法更新或更改它。因此,一旦創建了我的專欄系列並添加了一些帶有標誌值的記錄,那麼對於新值,我該如何更新該記錄,或者如果我添加新記錄,那麼如何刪除舊記錄?我想避免在寫之前閱讀。
數據收集的頻率可能會有所不同,所以我不能使用TTL的固定值,以便Cassandra可以刪除舊值。我知道上述模式存在問題,例如它可能會產生熱點,或者可能會造成不平衡集羣,這就是我需要指導的原因。我該如何處理這種情況。我的客戶端應用程序只能在幾頁上基於這些標誌進行查詢。客戶端沒有其他數據要查詢。
那麼,如何創建列族來滿足查詢#3,#4,#5?在這種情況下,您的指導將幫助我提出良好的數據模型。
預先感謝您。
可以插入多少臺機器? –
@AshrafulIslam機器數量可能會高達200萬可能更多 – Shashi
標誌狀態,is_connected,is_up所有這些都是低基數列,假設所有機器都已啓動,所以您的所有數據都將位於一個分區中(在同一個節點上),會產生熱點,不可擴展等。這是cassandra中非常糟糕的設計。 –