+1 对 Aaron 关于使用 BATCH 语句的回复,但引用的示例特定于 CQL。在您的应用中实现它时会更加细致入微。
如果您使用的是 Java 驱动程序,典型的 INSERT 语句如下所示:
SimpleStatement simpleInsertUser = SimpleStatement.newInstance(
"INSERT INTO users (...) VALUES (?), "..." );
这是一个准备好的声明:
PreparedStatement psInsertUserByMobile = session.prepare(
"INSERT INTO users_by_mobile (...) VALUES (...)" );
如果您要批处理这两个语句:
BatchStatement batch = BatchStatement.newInstance(
DefaultBatchType.LOGGED,
simpleInsertBalance,
preparedInsertExpense.bind(..., false) );
session.execute(batch);
对于您列表中的第 2 项,我不知道在生产中使用 Cassandra TRIGGER 的公司,因此我不建议这样做。它是实验性的,我没有足够的经验来推荐它们进行生产。
对于第 3 项,这是物化视图试图解决的用例。从开发人员的角度来看,它们肯定要简单得多,因为表更新是在服务器端而不是客户端完成的。
如果您没有很多表,则可以使用它们,但请注意视图的更新是异步发生的(与基表上发生突变的时间不同)。对于 MV,当视图与基表不同步时,唯一的解决方案是删除并重新创建 MV。
如果您不想使用 BATCH 语句,只需确保您完全了解使用 MV 的权衡。如果您有兴趣,我已经在https://community.datastax.com/articles/2774/ 中进行了更详细的解释。干杯!