从Cassandra获取最后插入的数据
我们的表中有一个主键从Cassandra获取最后插入的数据,cassandra,cql,cassandra-2.0,datastax,datastax-enterprise,Cassandra,Cql,Cassandra 2.0,Datastax,Datastax Enterprise,我们的表中有一个主键UUID。要获取最后一条记录,我们需要按desc uuid字段进行排序。但是,由于此字段不是整数,因此我们不会始终获取最后一条记录。有办法得到最后一张唱片吗?请注意,我们不希望创建群集列 这是我的桌子 ArtistId (partition key) | SongId (primary key, uuid) | Song -------------------------------------------- 1 | 9a9
UUID
。要获取最后一条记录,我们需要按desc uuid
字段进行排序。但是,由于此字段不是整数,因此我们不会始终获取最后一条记录。有办法得到最后一张唱片吗?请注意,我们不希望创建群集列
这是我的桌子
ArtistId (partition key) | SongId (primary key, uuid) | Song
--------------------------------------------
1 | 9a9fa429-c349-4137 | abc
1 | 9a9fa429-b349-6137 | cde
1 | 9a9ga429-a349-6132 | fgh
2 | 249ga429-a909-6542 | ijk
2 | 249kg429-a239-3652 | lmn
1 | i55oa429-a909-3462 | opq
1 | e4235k59-4ik9-6542 | rst
TL&DR:cql3类型,请营救
如果您有这样的db模式:
请注意对原始架构的以下更改:
更改为uuid
timeuuid
- 聚类键按相反顺序排序
artist_id | dateOf(song_id) | song
-----------+--------------------------+------
1 | 2015-05-29 13:25:15+0300 | baz
1 | 2015-05-29 13:25:11+0300 | bar
1 | 2015-05-29 13:25:06+0300 | foo
2 | 2015-05-29 13:25:19+0300 | qux
要获取固定艺术家id的最新歌曲id,可以运行如下查询:
select artist_id,dateOf(song_id),song from music where artist_id=1 limit 1;
您能展示一下示例表模式和查询本身吗?抱歉,没有正确的方法按分区键对C*中的行进行排序(因为OrderedPartitioner一直被认为是有害的)。我编辑了这个问题以添加示例表,我想要一个查询,该查询将给出表中最后一条插入的记录。向下投票人,请注意为什么向下投票?我没有向下投票,而是“上次插入”在像Cassandra这样的分布式按设计数据存储中并没有很好的定义。在时间上是最后一次吗?排序顺序?在分区内?在整个集群内?如果节点处于脱机状态,该怎么办?等等,卡桑德拉不会以这种方式跟踪数据;它不像附加到单个文件。两次写入可以在完全相同的微秒内发生,每一次写入都会到达集群中的两个不同节点。哪一个是“最后的?”即使你选择了一种方式来回答这个问题,C*对世界的看法也不是这样的。这在分区内起作用,但OP在评论中指出,理想的行为是在整个集群(所有分区)中插入“最后一条记录”。虽然我认为在这种情况下使用TimeUUID是一个很好的建议,但要获得所需的行为,必须假设/enusre正确、一致地生成值,并且生成值的客户端之间没有时钟偏差。这并不是什么灵丹妙药。威廉,你的意思是说,如果我所有的节点都与时间正确同步,那么TimeUUID会给我独特而准确的结果,对吗?
select artist_id,dateOf(song_id),song from music where artist_id=1 limit 1;