Aerospike可以通过字典顺序获取记录。例如,如果U想要所有以“a”开头的记录,那么U喜欢搜索bin> =“a”AND bin< =“az”
答案 0 :(得分:1)
aerospike支持UDF模块(使用LUA和C语言)https://www.aerospike.com/docs/udf/developing_lua_modules.html 这可以满足你的目的。
答案 1 :(得分:1)
User-Defined Functions扩展了Aerospike的核心功能。您可以创建stream UDF并将其附加到query。
Aerospike中流UDF的一个最佳实践是在将结果传递到UDF之前消除尽可能多的记录,因此在这种情况下,我将创建另一个bin来保存前缀(第一个字母或子字符串,具体取决于你的用例)并在其上构建一个二级索引。我们的想法是,查询部分应尽可能小地返回子集。对于您的示例,前缀可以是单个字符,您可以添加新的bin' firstchar'到集合中的记录,然后build上的二级索引。
流UDF模块看起来像:
local function range_filter(bin_name, substr_from, substr_to)
return function(record)
local val = record[bin_name]
if type(val) ~= 'string' then
return false
end
if val >= substr_from and val <= substr_to then
return true
else
return false
end
end
end
local function rec_to_map(record)
local xrec = map()
for i, bin_name in ipairs(record.bin_names(record)) do
xrec[bin_name] = xrec[bin_name]
end
return xrec
end
function str_between(stream, bin_name, substr_from, substr_to)
return stream : filter(range_filter(bin_name, substr_from, substr_to)) : map(rec_to_map)
end
在Python客户端中,您可以按如下方式调用它:
import aerospike
from aerospike import predicates as p
# instantiate the client and connect to the cluster, then:
query = client.query('test', 'this')
query.where(p.equals('firstchar', 'a'))
query.apply('strrangemod', 'str_between', ['a','az'])