尝试使用延续哈希 - NoSQL分页返回页面结果与Riak

时间:2014-04-09 20:27:30

标签: node.js pagination riak nosql

编辑: 我为NoSQL情况添加了一个更通用的方法答案。

我正在使用Riak(使用LevelDB)开展项目。

使用Riak提供的REST API,我能够根据索引和范围获取数据,该范围返回按索引排序的alpha-num结果和延续哈希值。

示例电话: http://server/buckets/bucketname/index/someindex_int/333333333/555555555?max_results=10&return_terms=true&continuation=somehashhere

示例结果:

{
results: [
{
about_river: "12312"
},
{
balloon_tall: "45345"
},
{
basket_written: "23434523"
}
],
continuation: "g2987392479789879087987asdfasdf="
}

我也在进行单独的调用而没有指定max_results和return_terms来获取集合中文档的计数。我会知道每套文档的数量和文档的总数,这很容易让我们知道"页面的数量"。

虽然我能够根据哈希调用每组文档,然后接收结果集的下一个哈希,我正在寻找预测哈希的方法,因此预先填充客户端的分页链接。

这可能吗?散列是基于索引/范围信息动态还是由您返回数据的节点生成的随机值?

同事已经提到哈希基于您在群集中遇到的节点,但我无法找到有关此文档的文档。

其次,这个想法被提出来在背景中循环整个集合来获得哈希。这将有效,但似乎相当昂贵。

我是Riak的新手,这里的任何建议都会很棒。我无法找到任何与Riak分页的好例子。据我所知,确实存在的那个已经从互联网上消失了。

3 个答案:

答案 0 :(得分:1)

不,延续不是可预测的"你的同事说的也不正确。

不幸的是,除了查询没有max_results参数的范围外,没有办法知道指定范围内的对象总数(在索引键和对象键之间的1:1关系之外) ,显然)。

答案 1 :(得分:0)

另一个答案是我需要的答案,但在CodingHorror的帮助下,我想出了我想要的答案

没有分页。没有分页,只有获取下一个结果集的哈希是没有问题的,事实上,它对我的​​用例来说是理想的。只需将下一组合并到现有的集合中即可。但是不要让它永远持续下去。

我的灵感:http://blog.codinghorror.com/the-end-of-pagination/

谢谢,杰夫阿特伍德!

答案 2 :(得分:0)

响应中的结果数量是否相同?

类似

string.gsub(/^([^=]*)=/,'\1***')