Hus*_*ali 2 database cassandra datastax-enterprise cassandra-2.0 cassandra-3.0
我一直在阅读有关 datastax 的 Cassandra Db 文档以及 Apache 文档。到目前为止,我了解到我们不能在一张表上创建多个索引(一个主索引,一个辅助索引)。每个查询都应该有一个单独的表。将此与 SQL 表进行比较,例如我们要查询 4 个字段的 SQL 表,对于 Cassandra 的该表,我们应该将该表拆分为 4 个表,对吧?(如果我错了,请纠正我)。在这 4 个表上我可以拥有索引并进行查询,我的问题是我们如何将数据插入到这 4 个表中,我应该发出 4 个连续的插入请求吗?
我的首要任务是避免二级索引
为了保持非规范化表之间的数据同步,您需要使用 CQLBATCH语句。
例如,如果您需要维护这些表:
moviesmovies_by_actormovies_by_genre然后您可以将更新分组到 CQL 中,BATCH如下所示:
BEGIN BATCH
INSERT INTO movies (...) VALUES (...);
INSERT INTO movies_by_actor (...) VALUES (...);
INSERT INTO movies_by_genre (...) VALUES (...);
APPLY BATCH;
Run Code Online (Sandbox Code Playgroud)
请注意,也可以批量执行 do UPDATEandDELETE语句以及条件写入。
上面的例子只是为了在cqlsh中进行说明,实际中并没有使用。BatchStatement以下是使用 Java 驱动程序的示例:
SimpleStatement insertMovies =
SimpleStatement.newInstance(
"INSERT INTO movies (...) VALUES (?, ...)", <some_values>);
SimpleStatement insertMoviesByActor =
SimpleStatement.newInstance(
"INSERT INTO movies_by_actor (...) VALUES (?, ...)", <some_values>);
SimpleStatement insertMoviesByGenre =
SimpleStatement.newInstance(
"INSERT INTO movies_by_genre (...) VALUES (?, ...)", <some_values>);
BatchStatement batch =
BatchStatement.builder(DefaultBatchType.LOGGED)
.addStatement(insertMovies)
.addStatement(insertMoviesByActor)
.addStatement(insertMoviesByGenre)
.build();
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Java 驱动程序批处理语句。干杯!
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |