【发布时间】:2013-12-29 10:57:54
【问题描述】:
假设我有 100.000 个 Foo 类型的实体。 Foo 有一个被索引的属性 bar。现在,对于特定的 Foo A,我希望在按条形对所有 Foo 进行排序时获得最接近 A 的 10 个 Foo。
问题是,我不想手动执行此操作,因为有 10 万多个实体,它会非常慢。
一个想法是像这样使用偏移量和限制:
ofy().load().type(Foo.class).order("-bar").offset(offset).limit(limit).list();
但这要求我知道我的 Foo A 的位置,而我不知道。
我对此有一个可行的解决方案,它是一个单独的实体,它只存储所有 Foos 的位置并每分钟更新一次该表。它变得非常慢并导致 OutOfMemoryError,所以我需要一些不同的东西。
有人想试试这个吗?
【问题讨论】:
-
你是什么意思:'我想让 10 Foos 最接近 A'?它应该最接近哪个属性?酒吧?栏是数字还是文本?
-
10 Foos 接近按 Bar desc 排序的 A。条是数字。获取按 Bar 排序的结果列表没有问题。
-
Offset 不会有帮助,因为它的 O(n),它需要通过 shole 'offset' 的索引条目数,它不能只是跳转到那个位置。
-
查看数据存储的地理位置库,它们会做类似的事情来在地图中的二维中查找最近的点。
标签: google-app-engine objectify