我想使用batch语句从数据库的3个表中删除一行,以确保原子性。所有3个表中的分区键都是相同的。在我读到的所有关于批处理语句的例子中,所有的查询都是针对单个表的?在我的例子中,使用批处理语句是个好主意吗?或者说,我应该回避吗?
我使用的是 Cassandra-3.11.2,我使用 C 驱动程序执行查询。
是的,您可以使用批处理来确保原子性。单个分区批处理更快(相同的表和相同的分区键),但仅适用于有限数量的分区(在您的情况下是三个),这是可以的。但是不要将其用于性能优化(例如:减少多个请求)。如果您需要原子性,您可以使用它。
您可以查看以下链接:
具有不同分区键的表上的Cassandra批处理查询性能
Cassandra批处理查询与单插入性能
cassandra中的单个parition批处理如何用于多列更新?
已编辑
在我的情况下,表是不同的,但分区键在所有3个表中都是相同的。因此,这是单分区批处理的特例,还是完全不同的东西。
对于不同的表分区也是不同的。所以这是多分区批处理。LOGGED批处理用于保证不同分区(不同的表或不同的分区键)的原子性。UNLOGGED批处理用于保证单分区批处理的原子性和隔离性。如果对多分区批处理使用UNLOGGED批处理将无法确保原子性。默认为LOGGED批处理。对于单分区批处理默认为UNLOGGED。原因单分区批处理被认为是单行突变。对于单行更新,不需要使用LOGGED批处理。要了解LOGGED或UNLOGGED批处理,我在下面分享了一个链接。
多分区批处理应该只用于实现不同表上的一些写操作的原子性。除此之外,他们应该避免,因为他们太贵了。
单个分区批处理可用于实现原子性和隔离。它们并不比普通的写操作贵多少。
但您可以使用多分区LOGGED批处理,因为分区是有限的。
一个非常有用的批处理文档,并提供了所有详细信息。如果你读到这里,所有的困惑都会被清除。
卡桑德拉 - 到批次或不到批次
分区键标记与行分区
表分区和分区键标记不同。分区键用于决定数据所在的节点。对于同一行,分区标记相同,因此位于同一节点中。对于不同的分区键或相同的键不同的表,它们是不同的行变异。即使对于同一个键,也无法通过一个查询从不同的分区键或不同的表中获取数据。协调节点必须将其视为不同的请求或变异,并分别从复制节点请求实际数据。这是C*存储数据的内部结构。
每个表甚至都有它自己的目录结构,这表明一个表的分区永远不会与另一个表中的分区交互。
不同cassandra表中相同的分区键加起来是否达到单元理论极限?
要了解C*如何映射数据的详细信息,请查看此链接:
了解CQL3如何映射到Cassandra的内部数据结构
问题内容: 我目前正在制作一份报告,向我显示我们销售团队涵盖的所有邮政编码。 每个团队涵盖100多个邮政编码。我想做的是创建一个报告,将邮政编码内的客户带回去。目前,我的代码如下所示。 我希望的是有一种更快,更轻松的方式来做到这一点。任何建议将不胜感激。有没有一种方法可以为每个销售团队创建变量,例如 只是在钓鱼的想法。干杯 问题答案:
假设我有一个类似下面的函数checkTime,我必须同时检查多个条件。 (上述示例是假设的) 我使用的函数完全有效,但是: 有没有更好的方法、程序或公式来取代这一点?(不必如此冗长或丑陋) Thanx!
有可能做如下事情吗: 或者: 我知道用很多if-else语句也可以实现同样的目标,但如果它像上面那样工作,看起来会更干净。
我有这个代码: 它需要一个输入来填充,所以一个特定的按钮得到一个类添加。现在我想要检查多个输入,如果它们都被填充而不是空的,我想要添加类“UK-Button-Success”到一个按钮。 我试过的其他方法都不起作用。 我该怎么做?
问题内容: 我写单元测试,并希望使用和一个测试类。 不幸的是,以下操作无效: 有没有办法在一个测试类中同时使用Mockito和JUnitParams? 问题答案: 您不能执行此操作,因为根据规范,您不能将相同的注释两次放置在相同的注释元素上。 那么,解决方案是什么?解决的办法是只放一个你无法忍受的赛跑者,然后用其他东西代替。对于您的情况,我想您将删除并以编程方式执行此操作。 实际上,它唯一要做的就
问题内容: 我正在研究别人的PHP代码,并且一遍又一遍地看到这种模式: (伪代码) 如果其他表中没有相关行,则代码需要分支,但是通过在单个SELECT语句中执行LEFT JOIN不能做到更好吗?我是否缺少一些性能优势?可移植性问题?还是我只是在挑剔? 问题答案: 没有足够的信息来真正回答问题。我曾在一些应用程序上工作过,这些应用程序出于一个原因减少查询数量而出于另一个原因增加查询数量 都 提高了性