当前位置:  开发笔记 > 运维 > 正文

如何确保Cassandra在不同表上的数据一致性?

如何解决《如何确保Cassandra在不同表上的数据一致性?》经验,为你挑选了1个好方法。

我是Cassandra的新手,我读过Cassandra鼓励非规范化和重复数据.这让我有点困惑.让我们想象以下场景:

我有一个包含四个表的键空间:A,B,C和D.

CREATE TABLE A (
  tableID int,
  column1 int,
  column2 varchar,
  column3 varchar,
  column4 varchar,
  column5 varchar,
  PRIMARY KEY (column1, tableID)
);

让我们假设其他表(B,C,D)具有与表A相同的结构和相同的数据,只有不同的主键,以便响应其他查询.

如果我升级表A中的一行,我如何确保具有相同数据的其他表中的数据的一致性?



1> Jeff Jirsa..:

卡桑德拉提供BATCH了这个目的.从文档:

BATCH语句将多个数据修改语言(DML)语句(INSERT,UPDATE,DELETE)组合到单个逻辑操作中,并为批处理中的语句写入的所有列设置客户端提供的时间戳.批处理多个语句可以节省客户端/服务器和服务器协调器/副本之间的网络交换.但是,由于Cassandra的分布式特性,尽可能地在附近节点上传播请求以优化性能.使用批次来优化性能通常不会成功,如使用和滥用批次部分中所述.有关加载数据的最快方法的信息,请参阅"Cassandra:没有Batch关键字的批量加载".

批量默认为原子.在Cassandra批处理操作的上下文中,atomic表示如果任何批处理成功,则所有批处理都将成功.为了实现原子性,Cassandra首先将序列化批处理写入批处理系统表,该表使用序列化批处理作为blob数据.成功编写并保留(或提示)批处理中的行后,将删除批处理日志数据.原子性会降低性能.如果您不想承担此罚款,请阻止Cassandra使用UNLOGGED选项写入批处理日志系统:BEGIN UNLOGGED BATCH

UNLOGGED BATCH几乎总是不受欢迎的,我相信在未来的版本中会被删除.正常批次提供您想要的功能.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有