我正在开发一个使用Cassandra作为数据存储的服务。我目前正在实施停止服务,其中包含停靠点列表(乘客可以登上车辆的交通站点,例如公交车)。
我需要支持以下方案:
以下是我实现表格的方式来支持:
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
投标应用相同的更改。到目前为止我尝试了什么:
StopUpdated
事件(我触发的事件)更新)我没有以前的代码和名称值,我可以使用它来构造这样的查询。PRIMARY KEY ((client_id, agency_id, id), code, name)
但是这会将每一行放在它自己的分区中,这会使选择查询效率非常低。 关于如何解决这种情况的任何想法?
答案 0 :(得分:1)
最后,我更改了我的体系结构并修改了StopUpdate
事件以包含新旧状态(更新前后)。这样我就可以收集所有信息来组装查询。
答案 1 :(得分:0)
使用id获取要更新的行的client_id和agency_id以及其他复合键的现有值,并使用这些值删除stops_by_client_id
中的行。
在stops
表中更新该行后,您必须从表中获取该ID的其他列的值,并在stops_by_client_id
表中创建一个新行。
希望这就是你要找的东西。