【发布时间】:2017-05-02 22:12:31
【问题描述】:
我有一个 Postgres 数据库和一个用户标签表,其中包含 UserId 和 TagId 列。每个用户可以有多个标签,反之亦然。
有没有办法以可扩展的方式实现多个标签的搜索?示例查询:
- 获取同时拥有tag1和tag2的所有用户
- 获取所有拥有(tag1或tag2)和tag3的用户
- 获取所有有tag1和tag2但没有tag3的用户
由于这不容易索引和扩展,我正在考虑使用某种内存缓存来加快查找速度。你知道这个问题的任何现成的解决方案吗?
谢谢
【问题讨论】:
-
你有多少个用户和标签? Postgres 应该能够轻松处理这些查询(例如,选择所有带有 tag1 的用户与所有带有 tag2 的用户相交)。如果您在内存中有适当的索引,它会非常快,postgres 确实已经有内存缓存和查询优化。但是,如果这不能很好地为您服务,您可以查看 Solr 或 Elastic。
标签: database database-design tags scalability in-memory-database