如果我在Cassandra中有一个List字段,并且有两个人同时写入它,那么它是简单的最后写入胜还是将它合并写入?Cassandra列表类型冲突
例如:[A,B,C,d]
用户1 - >并[b,A,C,d](b移动到索引0)
用户2 - > [A,B,d,C ](将c移动到索引3)
卡桑德拉将合并结果并以[b,a,d,c]结尾,还是使用最后一次写入赢得微秒?
如果我在Cassandra中有一个List字段,并且有两个人同时写入它,那么它是简单的最后写入胜还是将它合并写入?Cassandra列表类型冲突
例如:[A,B,C,d]
用户1 - >并[b,A,C,d](b移动到索引0)
用户2 - > [A,B,d,C ](将c移动到索引3)
卡桑德拉将合并结果并以[b,a,d,c]结尾,还是使用最后一次写入赢得微秒?
您将获得合并结果
每次写入数据卡桑德拉,每列相关联的时间戳也被插入。当您执行读取查询时,时间戳用于在单个列或集合元素中选择“获胜”更新。
如果我使用相同的时间戳进行真正的并发写入,该怎么办?在不太可能的情况下,您最终会得到两个时间戳匹配的微秒,您可能会得到一个糟糕的版本,但Cassandra通过比较字节值确保连接一直中断。
卡桑德拉商店列表(集合)与普通列不同。
实施例:
CREATE TABLE friendlists (
user text PRIMARY KEY,
friends list <text>
);
如果我们插入一些伪数据:
user | friends
----------+-------------------------
john | [doug, patricia, scott]
patricia | [john, lucifer]
内部表示:
RowKey: john
=> (column=, value=, timestamp=1374687324950000)
=> (column=friends:26017c10f48711e2801fdf9895e5d0f8, value='doug', timestamp=1374687206993000)
=> (column=friends:26017c11f48711e2801fdf9895e5d0f8, value='patricia', timestamp=1374687206993000)
=> (column=friends:26017c12f48711e2801fdf9895e5d0f8, value='scott', timestamp=1374687206993000)
=> (column=friends:6c504b60f48711e2801fdf9895e5d0f8, value='matt', timestamp=1374687324950000)
=> (column=friends:6c504b61f48711e2801fdf9895e5d0f8, value='eric', timestamp=1374687324950000)
-------------------
RowKey: patricia
=> (column=, value=, timestamp=1374687352290000)
=> (column=friends:3b817b80f48711e2801fdf9895e5d0f8, value='john', timestamp=1374687243064000)
在这里,因为一个UUID被附加到内部列名是更复杂CQL字段名称为“朋友”。这用于跟踪列表中项目的顺序。
每次插入数据卡珊德拉下面的查询:
INSERT INTO friendlists (user , friends) VALUES ('patricia', ['john', 'lucifer']);
//or
UPDATE friendlists SET friends = ['john', 'lucifer'] where user = 'patricia';
将创建一个墓碑比目前少时间戳,它告诉,以前的数据已被删除。因此,如果并发插入发生在相同的确切时间戳上,那么两个数据都在逻辑删除之前,因此两个数据都将生效。
来源:
http://mighty-titan.blogspot.com/2012/06/understanding-cassandras-consistency.html http://opensourceconnections.com/blog/2013/07/24/understanding-how-cql3-maps-to-cassandras-internal-data-structure-sets-lists-and-maps/
是您使用的查询来写? –
还没有。我只是在研究这项技术。你知道一个合并写入的文件吗? – joels