我一直在寻找一个解决方案,用一个确切的名字或他们的名字或姓氏的前缀来搜索朋友。我的要求与此链接类似。 Sphinx vs. MySql - Search through list of friends (efficiency/speed) 但这篇文章没有解释如何做到这一点。它确实说不建议通过sphinx搜索关系。任何人都可以建议我是否应该使用以下任何一种方法或完全不同的方法。此外,我正在寻找超过一百万条记录的高速和可扩展性
DB结构类似。
InnoDB的
table1-用户:uid,fname,lname,city,country,picurl,status(picurl& status可能随时改变,sphinx不是实时的,只是说或想象甚至10分钟的滞后在我的设计中是不可接受的对于这两个领域。)
table2-朋友:uid,fid
目标是搜索:“uid 11”的所有朋友,他们的fname或lname或全名都有前缀'tony',并提取他们的详细信息。
Sphinx:搜索uid,fname,lname(属性:城市,国家/地区)
a)做一个mysql搜索来取出“uid 11”的朋友ID&存储在数组X中
b)然后通过数组X搜索“tony *”过滤的docid。
然后再次进行mysql搜索以获取每个匹配的friendid的picurl,status的实时字段。OR
Sphinx:搜索uid,fname,lname(属性:城市,国家/地区) + MVA:friendids(用于存储所有朋友ID的MVA)
a)在MVA中搜索包含uid'11'的'tony *'的sphinx
然后再次进行mysql搜索以获取像picurl这样的实时字段,每个匹配的friendid的状态。没有Sphinx
a)Mysql搜索“uid 11”的朋友,其中fname喜欢'tony%'或lname喜欢'tony%'或者CONCAT(fname,'',lname)喜欢'tony stark%'或者CONCAT(lname,''' ,fname)LIKE'tony stark%'并在同一个查询连接中提取细节 (从其他帖子来看,大量记录的表现似乎很低)
方法4:
有任何建议吗?
PS:我的下一个挑战是搜索朋友的朋友,以及问题标题..
答案 0 :(得分:0)
会推荐方法2
但对于方法4 - 可能会使用专用的Graph数据库。 (或专用的engine for mysql) - 对于只是前缀搜索,你不需要像sphinx这样的东西。