我们计划在我们的网络应用程序中实现一项功能,该功能将为用户提供搜索功能,并将DB(MySQL - INNODB)中所有匹配记录的ID保存为“列表”。结果可能是数百万。我们希望用户能够节省多达100万个ID。它必须是实时的(最多5-10秒延迟是可以接受的)。然后可以将此列表作为另一个过滤器与现有过滤器结合使用。
我们不需要从客户端传递这些ID,因为可以在服务器端进行相同的搜索以检索这些ID。但是,稍后可以重复使用相同的搜索来获取这些ID,因为搜索结果可能会发生变化。
我们有几千名活跃用户,并且不会期望很多人创建如此大的名单,但随着时间的推移总数没有。保存在这些列表中的ID可以增长到数亿。
服务器的RAM比完整数据库(几百GB)多。它还使用SSD。
以下是我们需要解决的问题:
- Saving up to 1 million ids in DB (within few secs)
- Using these IDs as a search criteria with other filters (this additional criteria shouldn't slow down the searches by more than few secs)
这似乎是一些可能的解决方案:
解决方案1:
好处:此表可以在以后的JOIN条件中轻松使用,索引搜索性能应该很快。
问题:插入速度很慢 - 我知道有很多方法可以加快插入速度,但是一旦表格增长,它仍然可能需要超过几秒钟的时间。
解决方案2:
好处:插入速度非常快。
问题:使用MapReduce可以快速搜索性能,但是如果许多用户开始进行此类搜索,它可能会给服务器带来很大的负担。
有关最佳方式的建议吗?是否还有其他可能的方法来满足这种情况?
答案 0 :(得分:0)
将中间结果保存为渐进式过滤 - 我从未见过这样成功使用过。只需构建完整的查询并每次执行它。