正確な名前、または姓名のプレフィックスで友人を検索するソリューションを探していました。私の要件は、このリンクに似たものです。Sphinx vs. MySql - 友達のリスト (効率/速度) を検索します が、投稿ではその方法について説明していません。スフィンクスを介して関係を検索することはお勧めできません。次のアプローチのいずれかを使用するか、まったく異なるアプローチを使用する必要があるかどうか、誰でも提案できますか。また、たとえば 100 万件以上のレコードの高速性とスケーラビリティを探しています
DB構造も似たようなものです。
InnoDB
table1- users: uid、fname、lname、city、country、picurl、status (picurl と status はいつでも変更される可能性があり、sphinx はリアルタイムではなく、これら 2 つのフィールドの私の設計では 10 分の遅延さえ許容できないと言うか想像してください。 )
table2- 友達: uid,fid
目標は、検索することです。「uid 11」のすべての友人で、fname、lname、またはフルネームに接頭辞「tony」があり、詳細を引き出します。
- アプローチ 1:
Sphinx: uid、fname、lname で検索 (属性: 都市、国)
a)mysql検索を実行して、「uid 11」のフレンドIDを引き出し、配列Xに保存します
b) 次に、配列 X によってフィルタリングされた docid の 'tony*' をスフィンクス検索します。
c) 次に、mysql 検索を再度実行して、一致するフレンド ID ごとに picurl,status などのリアルタイム フィールドを取得します。
また
- アプローチ 2:
Sphinx: uid、fname、lname (属性: 都市、国) で検索 + MVA: フレンド ID (すべてのフレンド ID を保存するための MVA)
a)uid「11」を含むMVAでフィルタリングされた「tony *」のスフィンクスを検索します
b) 次に、mysql 検索を実行して、一致する各フレンド ID の picurl,status などのリアルタイム フィールドを取得します。
- アプローチ 3:
スフィンクスなし
a) Mysql は、「uid 11」の友人を検索します。ここで、「tony%」のような fname または「tony%」のような lname OR CONCAT(fname, ' ', lname) LIKE 'tony stark%' OR CONCAT(lname, ' ', fname) LIKE 'tony stark%' と同じクエリ結合で詳細を引き出します (他の投稿から、これは多数のレコードのパフォーマンスが低いようです)
アプローチ 4:
助言がありますか?
PS: 私の次の課題は、友達の友達を検索することです。質問ヘッダーは..