【问题标题】:pagination in cassandra based web application基于 cassandra 的 Web 应用程序中的分页
【发布时间】:2013-04-07 11:17:21
【问题描述】:

如何在基于 cassandra 的 Web 应用程序中进行分页。我在服务器端使用spring MVC,在客户端使用jquery。我试过this,但不满意。

我的行键是 UUIDType,每次我从客户端浏览器将开始键作为字符串发送,所以不知道如何将其转换回 UUID。将应用一个简单的示例。

【问题讨论】:

  • 这很好,但我在给定的链接中发现它在内存列表中。如果你有大量数据怎么办。我想在用户每次点击时获取给定起点和终点的 cassandra 行。

标签: spring-mvc cassandra hector


【解决方案1】:
【解决方案2】:

如果您将 PlayOrm 用于 cassandra,它会在您查询时返回一个光标,并且当您的第一页读取前 20 个结果并显示它时,下一页可以在您的会话中使用相同的光标,它会在它所在的位置拾取不重新扫描前 20 行就结束了。

院长

【讨论】:

    【解决方案3】:

    我会建议适用于任何语言的通用解决方案。我使用 python pycassa 来解决这个问题:

    第一种方法:

    -Say if column_count = 10 (How many results to display on front end) 
    -collect first 11 rows, sort first 10, send it to user (front end) as JSON object and also parameter last=11th_column
    -User then calls for page 2, with prev = 1st_column_id, column_start=11th_column and column_count = 10. Based on this, I query cassandra like cf.get('cf', key, column_start=11th_column, column_count=10)
    -This way, I can traverse, next page and previous page.
    -Only issue with this approach is, I don't have all columns in super column sorted. So this did not work.
    

    第二种方法(我在生产中使用):

    -fetch all super columns and columns for a row key. e.g in python pycassa, cf.get('cf',key)
    -Sort this in python using sorted and lambda function based on column values.
    -Once sorted, prepare buckets and each bucked size is of page size/column count. Also filter out any rogue data if needed before bucketing.
    -Store page by page results in Redis with keys such as 'row_key|page_1|super_column' and keep refreshing redis periodically.
    

    我的第二种方法在处理中小数据量时效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      相关资源
      最近更新 更多