我在文档中看到可以从集合中获取记录或记录流并执行某些操作的示例。我想记录,从该记录中检索标识符,在另一组中查找该标识符,并从第二组中返回bin的内容。它实际上是一种联接,例如
function chained_get(rec)
if aerospike:exists( rec ) then
local other_id = rec.other_id
-- how to return the result of: 'SELECT some_bin FROM namespace.some_bin WHERE PK = other_id'
end
return result
end
我意识到在客户端/应用程序方面很容易做到,但是如果可能的话,我想避免网络'喋喋不休',并在Aerospike中“链接”获取请求。
这可能吗?
答案 0 :(得分:3)
简短的回答是否定的,Aerospike Server不支持服务器本身占主导地位的连接(但是?)。但是有近乎单一的往返延迟的解决方法:
分布式数据库中的连接问题是另一条记录可能位于群集中的另一个节点上。但是根据你想要做的事情,很有可能你可以使用Aerospike提供的其他工具。例如,一个强大的功能是二级索引功能。你可以,例如拥有一个用户和一组订单(记录)。为了避免必须首先查找用户,然后发出批量获取所有订单,您可以发出用户获取和查询,该查询将获取所有记录,其中包含并行索引的bin中的用户id = xyz并在客户端上合并 - 侧。缺点是所有节点都会收到一个查询,因为它不知道订单的位置,每个二级索引条目需要45-70字节的RAM。但是,你应该测试这是否比你的2次往返替代方案更好,因为它取决于查询的优先级,二级索引大小等。
如果这种方法可以解决您的问题或您有什么要求,请告诉我们,我们可以帮助您实现这一目标。如果你尝试两者都可以添加基准测试结果,这可能会很有趣。
答案 1 :(得分:3)
记录UDF无法访问其他记录,并且流UDF只能处理从扫描流式传输的记录或作为与辅助索引查询匹配的结果。 JOIN可以在应用程序端实现。