4

我很难找到关于 aerospike 的有限文档。使用带或不带 lua 的 aerospike 过滤器,我是否可以:

  1. 订购我的结果服务器端
  2. 使用过滤器进行大于/小于查询

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

另一种说法,与价格相反是对的……我能在 aerospike 中找到的最低价值是多少,谁的价值不低于我给出的价值。

我喜欢一种简单的方法,但我也愿意解决问题(或者如果它不合理/不实用,则完全拒绝)

4

3 回答 3

3
  1. Aerospike 本身不支持在服务器端对数据进行排序。
  2. Aerospike 支持查询过滤器。您可以根据需要指定范围过滤器。请参阅此链接中的示例。
于 2014-04-24T06:54:38.387 回答
1

大型列表 (LDT) 原生支持基本排序。

在大列表中,您的键(索引)始终默认以词法方式排序。

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

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}])

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

更多关于Aerospike 文档中的大型列表

Github上 NodeJS 客户端中的大型列表文档部分

于 2015-11-22T09:25:13.633 回答
1

在过去,您会将其表示为流 UDF,但自3.12 版以来,谓词过滤器将是正确的解决方案。

查看 Java 客户端的PredExp类及其构建复杂过滤器的示例CC#Go客户端当前也存在谓词过滤。

于 2017-07-15T03:14:40.933 回答