【问题标题】:Friends and relationship searches with sphinx (like friends of friends) for social networks使用 sphinx(如朋友的朋友)搜索社交网络的朋友和关系
【发布时间】:2013-05-24 16:42:09
【问题描述】:

我正在寻找一种解决方案,通过确切的姓名或他们的名字或姓氏的前缀来搜索朋友。我的要求与此链接类似。 Sphinx vs. MySql - Search through list of friends (efficiency/speed) 但该帖子没有解释如何做到这一点。它确实说不建议通过 sphinx 搜索关系。谁能建议我是否应该使用以下任何一种方法或完全不同的方法。此外,我正在寻找超过一百万条记录的高速和可扩展性

数据库结构类似。

InnoDB

table1- 用户:uid、fname、lname、城市、国家/地区、picurl、状态(picurl 和状态可能随时更改,并且 sphinx 不是实时的,只是说或想象在我的设计中即使 10 分钟的延迟也是不可接受的两个字段。)

table2-朋友:uid,fid

目标是搜索:“uid 11”的所有朋友,在他们的 fname 或 lname 或全名中具有前缀 'tony' 并提取他们的详细信息。

  • 方法一:

Sphinx:搜索 uid、fname、lname(属性:城市、国家/地区)

a) 执行 mysql 搜索以提取“uid 11”的好友 ID 并存储在数组 X 中

b) 然后在 sphinx 中按数组 X 搜索 'tony*' 过滤后的 docid。

c) 然后再次执行 mysql 搜索以提取每个匹配的朋友 ID 的实时字段,例如 picurl、status。

  • 方法二:

Sphinx:搜索 uid、fname、lname(属性:城市、国家/地区) + MVA:friendids(MVA 存储所有好友 ID)

a) 在 sphinx 中搜索由包含 uid '11' 的 MVA 过滤的“tony*”

b) 然后再次执行 mysql 搜索以提取每个匹配的朋友 ID 的实时字段,例如 picurl、状态。

  • 方法 3:

没有狮身人面像

a)Mysql 搜索 "uid 11" 的好友 where fname like 'tony%' OR lname like 'tony%' OR CONCAT(fname, ' ', lname) LIKE 'tony stark%' OR CONCAT(lname, ' ' , fname) LIKE 'tony stark%' and pullout the details in the same query join (从其他帖子看来,大量记录的性能似乎很低)

  • 方法4:

    有什么建议吗?


PS:我的下一个挑战是搜索朋友的朋友和问题标题..

【问题讨论】:

    标签: php mysql sphinx


    【解决方案1】:

    会推荐方法2

    但是对于方法 4 - 可能会使用专用的图形数据库。 (或用于 mysql 的专用 engine) - 仅用于前缀搜索,您并不需要像 sphinx 这样的东西。

    【讨论】:

    • 感谢您给我一个工作方向。所以 Approach4 应该比 Approach2 仪式更好?另外,将neo4j与mysql一起使用会更好还是使用您提到的oqgraph之类的mysql引擎(它是最好的mysql引擎吗?)。 (我问这个是因为我读到 neo4j 是持久的,而 oqgraph 不是。)此外,对于大型数据库,其中哪一个更有效。您还可以提供一些很好的链接,以了解何时不使用 RDBMS,因为那里似乎有很多无 sql 选项。在阅读了所有这些之后,似乎 mysql 对于大型数据库来说确实不是那么好。
    • 我的意思是 RDBMS 似乎不适用于大数据。并不是要精确定位mysql。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多