【发布时间】:2020-04-10 16:41:05
【问题描述】:
我对轻量级交易的术语感到有些困惑。我不确定为什么在大多数 cassandra 文献中都说它仅适用于单个分区。
就像我使用 IF NOT EXISTS,IF EXISTS 时一样,它应该适用于整个主键,而不仅仅是分区键,正如它在这篇文章中所说的那样How the LWT- Light Weight Transaction is working when we use IF NOT EXIST?
但是,在 Cassandra, the Definition Guide 一书中,我看到了这个例子
INSERT INTO reservation.reservations_by_confirmation
(confirm_number,
hotel_id, start_date, end_date, room_number, guest_id) VALUES (
'RS2G0Z', 'NY456', '2020-06-08', '2020-06-10', 111, 1b4d86f4-ccff-
4256-a63d-45c905df2677) IF NOT EXISTS;
此命令检查是否存在带有分区键的记录,该表由确认编号组成。那么让我们看看当你第二次执行这个命令时会发生什么:
INSERT INTO reservation.reservations_by_confirmation
(confirm_number,
hotel_id, start_date, end_date, room_number, guest_id) VALUES (
'RS2G0Z', 'NY456', '2020-06-08', '2020-06-10', 111, 1b4d86f4-ccff-
4256-a63d-45c905df2677) IF NOT EXISTS;
在这种情况下,事务失败,因为已经有一个编号为“RS2G0Z”的预留,并且 cqlsh 有助于回显包含失败指示和您尝试输入的值的行。
现在我的问题是,如果我运行,另一个查询
INSERT INTO reservation.reservations_by_confirmation
(confirm_number,
hotel_id, start_date, end_date, room_number, guest_id) VALUES (
'RS2G0Z', 'NY466', '2020-06-08', '2020-06-10', 111, 1b4d86f4-ccff-
4256-a63d-45c905df2677) IF NOT EXISTS;
主键不同但分区键相同,应该成功
所以当书上说
This command checks to see if there is a record with the partition key
这不是错误的说法吗?如果我误解了某些内容,请告诉我
【问题讨论】:
标签: cassandra