小于大于过滤查询,Aerospike

对我来说很难找到有限的关于aerospike的文档。在使用aerospike过滤器时,是否有可能在服务器端对结果进行排序并使用过滤器进行大于/小于查询,是否有用lua的方法。

本质上,我想编码一个值(客户端),并从aerospike中检索第一行比编码的值大的值。

换句话说,与价格对着来……我能在aerospike中找到的最低价值是什么,它的值不低于我给出的值。

我想要一种简单的方法,但是我也愿意尝试周围的方法(如果不合理/实用则直接拒绝)。

点赞
用户762649
用户762649
  1. Aerospike 不支持在服务器端对数据进行排序。
  2. Aerospike 支持对查询进行过滤。您可以针对您的需求指定一个范围过滤器。请参考此链接中的示例。
2014-04-24 06:54:38
用户5089929
用户5089929

Basic Sorting is natively supported in large lists (LDT).

在 Large List 中,默认情况下,你的 key(索引)总是以字典方式进行排序。

请注意,aerospike.conf 中的命名空间配置区域必须包含 ldt-enabled true 指令。

使用 javascript 客户端的示例

var key = {ns: 'test', set: 'mySet', key: 'myKey'};
var callback = function (status, result) {console.log(status, result)}

var list = client.LargeList(key, 'targetBinName', null, callback));

// add first item (also determinate the list values type)
list.add(1, callback);

// add multiple items
list.add([0, 2, 4, 5], callback);

list.add(3, callback);

// get all items
list.scan(function (status, list) {
     // list = [0, 1, 2, 3, 4, 5]
})

// select by values range
list.findRange(0, 3, callback)

// filter using udf to do custom gt/lt filtering
list.filter('udfName', callback)

如果你需要存储对象,则必须添加一个 key 属性,该属性将成为排序、范围、重复等的索引(默认情况下不允许重复)

list.add({key: 1})
list.add([{key: 0},{key: 2}])

我相信其他语言的驱动程序也更或多或少具有相同的方法。

有关 Large List 的更多信息,请参见 Aerospike 文档

在 NodeJS 客户端中,有关 Large List 文档部分的详细信息,请参见 Github

2015-11-22 09:25:13
用户582436
用户582436

过去,您可能会将此表示为流UDF,但是自发布3.12以来,谓词过滤器将是正确的解决方案。

请查看Java客户端的PredExp类及其示例,用于构建复杂的过滤器。谓词过滤还当前适用于CC#Go客户端。

2017-07-15 03:14:40