我们需要针对用户个人资料为我的社交网站实施搜索过滤器(类似于Net-log),个人资料中的过滤器包括年龄范围,性别和兴趣
我们在MySQL上运行大约1M个配置文件,MySQL似乎不是实现此类过滤器的正确选项,所以我们也在考虑Cassandra,
那么实现这种过滤器的最佳方法是什么,结果需要非常快
e.g。年龄= 18-24岁,性别=男性和兴趣=足球
年龄,性别和兴趣是varchar
EDITED:
让我重新解释一下这个问题,我怎样才能获得任何类型搜索的最快结果。
它可以基于配置文件名称,也可以是1M配置文件记录中的任何其他配置文件。
由于
答案 0 :(得分:3)
它可以很好地为您的项目提供基础SQL更改。您可能需要考虑将Interest列从自由输入字段(varchar)更改为标记(例如,在附加表上为“多对多”)。
您使用了Football
的示例,并在其上设置了like
运算符。如果您将其更改为标记,那么您将遇到决定放置位置的初始结构问题:
football
Football
American Football
Australian-rules football
但是一旦你这样做了,标签就会帮助你的选择语句更快。
如果不进行此更改,您将把数据管理问题从数据库(配备处理它)推送到Java(可能不是)。
答案 1 :(得分:0)
尝试优化查询可能有一定意义(至少可以做一些事情)。听起来你有一个大型数据库,如果你返回一个大的结果集并用java过滤结果,你可能会因为缓存中保存的所有数据而出现性能问题。
如果是这种情况,您可以尝试的一件事就是在数据库之外缓存结果并从中读取。这是Hibernate does very well的内容,但如果需要,您可以实现自己的版本。如果这是你感兴趣的东西,Memcached,是一个很好的起点。
我刚刚注意到了MySQL。我不知道它有多高效,但它们有full text searching functions的内置,这可能有助于加快速度。