gpt4 book ai didi

database - Cassandra DB 向多个表中插入数据

转载 作者:行者123 更新时间:2023-12-05 09:32:11 25 4
gpt4 key购买 nike

我一直在阅读 Cassandra Db 关于 datastax 的文档以及 Apache 文档。到目前为止,我了解到我们不能在一张表上创建多个索引(一个主索引,一个二级索引)。每个查询都应该有一个单独的表。将其与一个 SQL 表进行比较,例如我们要在其上查询 4 ​​个字段的表,对于 Cassandra 的这个表,我们应该将这个表拆分为 4 个表,对吧? (如果我错了,请纠正我)。在这 4 个表上,我可以拥有索引并进行查询,我的问题是我们如何向这 4 个表中插入数据,我是否应该连续发出 4 个插入请求?

我的首要任务是避免二级索引

最佳答案

要在非规范化表中保持数据同步,您需要使用 CQL BATCH 语句。

例如,如果您要维护这些表:

  • 电影
  • movies_by_actor
  • movies_by_genre

然后您可以像这样在 CQL BATCH 中对更新进行分组:

BEGIN BATCH
INSERT INTO movies (...) VALUES (...);
INSERT INTO movies_by_actor (...) VALUES (...);
INSERT INTO movies_by_genre (...) VALUES (...);
APPLY BATCH;

请注意,也可以批量执行 UPDATEDELETE 语句以及条件写入。

上面的例子在cqlsh中只是为了说明,并没有在实际中使用。下面是一个使用 Java 驱动程序的 BatchStatement 示例:

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();

有关详细信息,请参阅 Java driver Batch statements .干杯!

关于database - Cassandra DB 向多个表中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68374767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com