PostgreSQL vs MongoDB vs in-RAM kdTree for KNN queries?



我知道PostgreSQL(PostGIS)和MongoDB在kNN查询(k个最近邻居)方面都做得很好。

我很难决定哪一个更适合我的应用程序,以便它可以轻松有效地扩展。我想在没有边界框的情况下,在GPS坐标上查询k个最近的邻居。

我可能会有更多的读取请求而不是写入请求(更新树)。

到目前为止,我有一个Kd树的RAM内解决方案,但我担心我会在规模上遇到一致性问题。。如果你能想出任何解决方案,我也很乐意听到。

非常感谢。

一个好的内存索引解决方案将在很大程度上击败数据库系统。

你有很多更新吗?kd树不太善于更新;通常人们会频繁地重建树以适应添加的点。一个使用"节点"对象的kd树很容易需要两倍于不使用节点对象的树的内存;所以这可以很快得到回报。

交易安全是一个痛苦的实现自己;一个好的DBMS在这方面可能会有所帮助。然而,您可能仍然决定只使用DBMS进行恢复备份,并使用大容量加载从中构建内存树(kd或R树,通常要快得多)。

MongoDB:远离这种炒作。PostgresSQL很好,但我不相信它们的GIS功能。尽管如此,Postgres可能是开源中最好的,甚至可能是外部的。

最后:基准,基准,基准。每个数据和查询工作负载都不同。一种适用于一种场景的方法(如地理哈希)可能在另一种场景中被证明是无用的。

最新更新