如何对cassandra表进行建模,以允许在非主键上使用where子句



我在一个实验项目中使用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映射回idtId:

create table msgid (
     msgId varchar,
     id varchar,
     tId varchar,
     primary key (msgId)
);

以下是一些关于二级索引使用的有用讨论:

  • 二级索引上的Cassandra查询非常慢-堆栈溢出
  • Cassandra二次索引的最佳选择-Richard Low的博客
  • 如何避免二级指数在卡桑德拉?-堆栈溢出

相关内容

  • 没有找到相关文章

最新更新