假设使用了OrderPreservingPartitioner并且rowkeys严格按升序排列,是否有一种简单的方法可以使用Cassandra客户端获取最近添加的行的行键?我知道我可以执行get_range_slices查询来获取所有行并迭代直到结束以查找最后一行键。但我觉得这将是一个耗时的操作。
答案 0 :(得分:3)
我不认为有可能获得最后插入的rowkey,即使它们按升序排列&使用OPP。
comparator
与您的key_validation_class
OCF相同解决方案2会将OCF的最后插入的row_key保留为TCF中行的最后一列。您可以在列上使用反向范围切片来获取最后一个;)
SELECT FIRST 1 REVERSED * from TCF where KEY='yourkey'
您可以使用列的expiry属性控制Temporary_CF中行的大小,并以这种方式对数据建模可以为您提供在最后插入n row_keys的选项。
SELECT FIRST N REVERSED * from TCF where KEY='yourkey'
答案 1 :(得分:1)
使用模式:我们经常需要加载最后添加的行
实现:序列化之前“反向”RowKey;使用OrderPreservingPartitioner;使用“timestamp”作为RowKey。
例如,您的RowKey是一个长数字(表示时间戳)。然后,使用reverted(Long.MAX_VALUE - timestamp)来序列化时间戳。第一行将是插入的最后一行。
答案 2 :(得分:0)
如果你绝对需要知道节点网络中时间戳细节下面的最后一行......我什么都想不到。
但cassandra通过最近时间戳获胜来解决竞争单元格(行+列)更新,因此对于所有插入,还会更新与该表对应的单个行中的单个列,并使用ALL查询该单元格。我建议每个columnfamily / table使用一个不同的行,以防止这一行的更新过多地造成瓶颈。
如果有两个相同的同时时间戳更新......好吧,那时我们可能会遇到哲学问题。除非你想要网络序列生成器的一些减速点,这很糟糕。
从快速行插入中删除从ALL到QUORUM或ONE的一致性可能会加快速度,具体取决于您需要的结果。