我在一个实验项目中使用cassandra
。我的模型很简单,我有下表:
create table message(
id varchar,
msgId varchar,
tId varchar,
gtName varchar,
status varchar,
text text,
PRIMARY KEY (id, tId)
);
在第一次插入时,我只有id和tId要插入。会有一个即时更新,我可以从被调用方法的返回类型中获得持久化的msgId。将有另一个对我的应用程序的调用,其中包含只知道msgId的status
。在这种情况下,我将需要查找以便使用where clause on msgId
更新消息表。
我如何才能在cassandra 2.1.0
上正常工作?我也在使用spring-data-cassandra:1.1.0.RELEASE
感谢您的建议
第一个简单的步骤是在该键上创建一个辅助索引:
create index on message(msgId);
select * from message where msgId='foo';
二级索引确实存在一些性能问题,而且并不总是很适合,这取决于您的数据模型。另一种选择是创建第二个表,将msgId
映射回id
和tId
:
create table msgid (
msgId varchar,
id varchar,
tId varchar,
primary key (msgId)
);
以下是一些关于二级索引使用的有用讨论:
- 二级索引上的Cassandra查询非常慢-堆栈溢出
- Cassandra二次索引的最佳选择-Richard Low的博客
- 如何避免二级指数在卡桑德拉?-堆栈溢出