0

我们有带有经纬度记录的对象。每个对象也有创建日期。

用户可以从任何地方登录并查看对象。我们需要通过一些特殊的索引来显示对象的排序,该索引是根据对象的新鲜度以及它与当前用户的距离来计算的。

假设我们在纽约和泽西有对象。如果您从 New-York 登录,您应该会在顶部看到 New-Yorks 对象,然后是 Jersey 对象。但尽管如此,非常旧的纽约对象应该低于新球衣对象的结果。

我们可以近似函数 F = < 物体新鲜度(天)> + < 当前用户点到物体位置的距离(km)>

我们使用 PostgreSql 来存储数据,我们真的可以通过这样的函数排序并得到我们需要的东西。问题是我们担心它会很慢,因为我们计划达到 1k-10k 个对象和 100-300 个位置,并且应用程序必须非常快速地返回结果(因为它就像应用程序中最重要的东西)

用户将添加来自不同地方的对象。

您对如何提高此类查询的性能有任何想法吗?

4

2 回答 2

1

相反,您可以根据:距离 - object_creation_time 进行排序。您不需要在每次排序时重新评估此函数,因为它的值不会改变。

于 2013-08-02T17:22:36.167 回答
-1

在 Postgres 中,索引不必仅位于列或列的元组上……您可以在函数上创建索引,如Postgres 文档中所述。如果通过相同的函数查询,则应使用索引。

于 2013-08-02T19:02:07.017 回答