从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;