ソーシャルネットワークの要素をいくつか備えたウェブサイトを構築したいと思います。
だから私は友達リストを保存する効率的な方法を考えようとしてきました(Facebookのようなものです)。
そして、少し検索した後、私が出くわした唯一の提案は、友情を示す2つの「ID」を持つ「テーブル」を作成することです。
これは小さなWebサイトでは機能するかもしれませんが、少し効率的ではないようです。
私はJavaのバックグラウンドを持っていますが、PHPに精通していません。
かなりうまくいくと思うアイデアが頭に浮かびました。問題は、それをどのように実装するかわからないことです。
アイデアは、友達のすべての「ID」をツリーデータ構造に保存することです。そのツリーの各ノードは、友達のIDから1桁の数字に似ています。
最初に1つのノードから開始し、次にユーザーが友達を追加するときにノードを追加します。(Lempel–Zivに少し似ています)。
すべてのノードは、0から9およびXの11個の他のノードを指すことができます。
「X」はIDの終わりを示します。
たとえば、次のツリーを参照してください。
このツリーでは、ユーザーには次の「id」を持つ4人の友達がいます。
- 0
- 143
- 1436
- 15
更新:以前は不明確だったかもしれませんが、すべてのユーザーが多次元配列の形式のツリーを持ち、ポインター自体の存在が友人の「ID」を示すという考え方です。
すべてのユーザーがそのような多次元配列を持っている場合、id "y"が私の友達かどうかを検索したり、友達リストからid "y"を削除したり、友達リストにid "y"を追加したりすると、すべて一定の時間が必要になります。ウェブサイトのユーザー数に依存しているので、欠点は、そのような巨大な配列を取得し、それをシリアル化してテーブルの各行にプッシュすることは正しくないようです。
-これを実装することも可能ですか?
-シリアル化を使用してそのツリーをテーブルに挿入することは実用的でしょうか?
-これを行うためのより良い方法はありますか?
私がこれを選んだ利点は、IDの数が非常に多い場合(数百万または数十億)でも、検索、追加、削除の時間が線形であるということです(桁数によって異なります)。
これを実装する際の助け、またはこの方法を改善または変更するための代替方法の提案をいただければ幸いです。