【发布时间】:2018-09-27 06:11:53
【问题描述】:
我想用这些字段在 redis 中存储数千条记录:
User_id: int64;
latitude: float;
longitude: float;
age: int32;
height: int32
稍后我想检索所有与 (lat:x,lng:y) 年龄在 30 到 40 之间的人接近的user_id p>
redis 可以做到这一点吗?否则有哪些memory database 列表可以允许这样做?
【问题讨论】:
-
如果您想要一个真正高效的系统,也许可以使用专用的空间索引,例如 RTree。一个有用的实现可能类似于toblerity.org/rtree。有趣的是,您可以将年龄和身高映射为数据中的维度,并运行多维度查询。
-
感谢 barryhunter,但为什么(还)不存在这样的内存数据库引擎?如果不是完全定向的全文索引,sphinx 可以很好地完成这项工作:(
-
我不同意 sphinx“完全”面向全文索引,它可能“特别适合”,但它可以做其他查询的类型太好了。 (正如在对您其他线程的回复中所展示的!) - 我将 sphinx 用于许多实际上并非基于“全文”的查询,(包括“在附近查找东西',就像你的例子!!!?)
-
@barryhunter:对不起,我同意你对 sphinx 的看法是正确的,我们在内部使用了很多年,但更新有点复杂(需要合并 xml),我知道它们也是 RT 索引我从不尝试,但无论如何。我不喜欢 sphinx 的另一个想法是我们需要 mysql 客户端 dll,这个 dll 太可怕了 :( 是的,引入了 http json 接口,但看起来从未真正完成(必须是 bson 而不是 json 才能完全优化)。
-
@barryhunter:最后想想,如果我没记错的话,sphinx 不会创建任何索引(文本除外),它会全面扫描内存中的所有行以过滤它们。我想要一个数据库,至少使用一个索引来过滤行+对这个集合的属性的完整扫描
标签: database indexing redis sphinx in-memory-database