我需要根据两个值的范围来查询数据库,这两个值实际上是数据库中两列float类型的值。
在做了一些研究之后,我缩小了我的选择范围,用一种算法来实现这一点:
二维正交范围搜索
k-d树结构
现在我删除了第一个选项,因为我的数据是集群的,因此它将不再有用。
所以我需要用k-d树结构。但是如何呢?我从来没有做过,也不知道从哪里开始。我的一个控制器中有一个方法被设置为存根以检索此搜索的结果,但搜索本身没有实现。
我试图得到创建此功能所涉及的系统步骤。到目前为止,这是我认为我需要做的,但不知道这是不是正确的道路。
必须从数据库中的数据在内存中构造k-d树。(但不确定何时应该在rails启动或请求进入时执行此操作?)
当数据发生更新时,编辑树并将整个树保存到数据库中
在数据库中保存k-d树数据结构而不明确地构造它有什么方法吗?
另外,我在网上搜索了一下,但想知道是否有人有任何资源,他们可以推荐这个?
最佳答案
我们在上一个项目中使用了一个宝石:
https://rubygems.org/gems/kdtree
还有一个线程安全的分叉:
https://rubygems.org/gems/tupalo-kdtree
也许在实施你自己的计划之前先看看。