我正在使用Cassandra作爲數據存儲的服務。我目前正在實施停止服務,其中將包含停靠點列表(乘客可以登上車輛的交通站點,例如公交車)。保持cassandra表格投影同步更新
我需要支持以下情況:
- 獲取停止編號
- 獲得由公司ID和代碼升序排序機構ID,名稱ASC渾身解數
下面是我實施我的表來支持:
CREATE TABLE IF NOT EXISTS stops(
id uuid,
client_id uuid,
agency_id uuid,
code varchar,
name varchar,
latitude double,
longitude double,
is_wheelchair_accessible boolean, PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS stops_by_client_id(
client_id uuid,
agency_id uuid,
code varchar,
name varchar,
id uuid,
latitude double,
longitude double,
is_wheelchair_accessible boolean,
PRIMARY KEY ((client_id, agency_id), code, name, id)
);
問題:
這個效果很好,當我插入數據並閱讀它時。當我需要更新一站式出現該問題:
- 更新停止,並設置新的代碼,名稱,經緯度等
- 更新上
stops
表是沒有問題的,但我沒能採用同樣的更改stops_by_client_id
投影。
我試過到目前爲止:
- 我試圖更新由CLIENT_ID,agency_id和id行,但它需要通過所有的主鍵值(CLIENT_ID,agency_id,代碼,姓名,身份證),但在我的
StopUpdated
事件(我觸發更新)中,我沒有以前的代碼和名稱值,我可以使用它來構造這樣的查詢。 - 我想先刪除行,然後插入新的(模擬更新),但它失敗出於同樣的原因爲1
- 我試圖構建主鍵如下
PRIMARY KEY ((client_id, agency_id, id), code, name)
但這把每行它是自己的分區,這將使選擇查詢非常低效。 - 我不能使用物化視圖,因爲我需要一些字段的二級索引(例如代碼,is_wheelchair_accessible),所以我可以過濾它們。
關於如何解決這種情況的任何想法?
一個表可以同時具有物化視圖和二級索引,所以4)仍然是一個選項。 –