【问题标题】:Cassandra Limit 10,20 clauseCassandra 限制 10,20 条款
【发布时间】:2013-06-06 04:53:27
【问题描述】:

我使用的是 Cassandra 1.2.3,可以使用 Limit 10 执行选择查询。

如果我想要从 10 到 20 的记录,我不能执行“限制 10,20”。

下面的查询给了我一个错误。

select * from page_view_counts limit 10,20 

如何做到这一点?

谢谢 尼基尔

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    您不能在 CQL 中进行这样的跳过。您必须通过指定起始位置来进行分页,例如

    select * from page_view_counts where field >= 'x' limit 10;
    

    从 x 开始获取接下来的 10 个元素。

    我在这个答案中写了一个完整的例子:Cassandra pagination: How to use get_slice to query a Cassandra 1.2 database from Python using the cql library

    【讨论】:

    • 谢谢..看起来不错..会试试看。
    • 有什么方法可以转到结果的特定页面吗?我想使用限制子句进行分页。使用您的方法,我无法直接转到结果的第 5 页(限制 40,10)。我必须按第 1 页、第 2 页、第 3 页、第 4 页和第 5 页的顺序。
    • 可以跳转,但是要存储页面的第一列,而不是偏移量。
    • 我不知道这到底是怎么做到的。因为数据是按列顺序存储的。因此,即使我保存一列,例如第 10 条记录,该值也会在稍后更改,它可能会成为第 11 条记录。你有任何关于如何做到这一点的例子吗?谢谢。
    • 是的,如果值发生变化,则可能是错误的。就像您跳到第 10 个一样,它可能会重复或错过结果。答案中的链接中有一个示例。
    【解决方案2】:

    为此,您必须首先规划您的数据模型,以便它可以根据您的要求获取记录... 你能说出你在做什么类型的例子吗? 并且您使用的是 hector 客户端还是任何其他客户端?

    【讨论】:

    • 我有一个使用 phpcassa 的前端 php 客户端。我想以分页的形式显示日志数据。
    【解决方案3】:

    对不起,伙计,我是使用 hector 客户端和 java 完成的,但是看到您的要求,我可以建议您像这样计划您的数据模型: 使用时间跨度作为 yyyyMMddHH 格式的行键,将列名存储为由 UTF8Type 和 TimeUUID 组成的复合键(例如 C1+timeUUID )。 注意:这里的第一个复合键是计数器列族列名(例如 C1) 现在您将只在您的 CF 中存储有限的记录,例如 20,并使此 c1 计数器为 20,现在如果在相同的时间跨度内出现任何新记录,您必须使用键 C2+timeUUID 插入该记录,现在您将计数器列族 c2 增加到 20 条记录

    现在要获取记录,您只需传递值 C1 , C2 ...etc 与 rowkey 像 2013061116 它会给你 20 条记录,而不是另外 20 条,依此类推......你必须以编程方式实现它......希望你得到这个并帮助你

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2018-02-05
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      相关资源
      最近更新 更多