sql >> データベース >  >> NoSQL >> MongoDB

パーソナライズされたFacebookのようなニュースフィードの構築:SQL、MongoDB?

    あなたのコードは私に多くを教えてくれません。プレーンなJSON/SQLでデータ構造をレイアウトできれば便利だと思います。

    とにかく、私は各ユーザーのストリームをMongoDBにシリアル化します。さまざまな理由で(少なくともソフトウェアのそのレベルでは)、HTMLをデータベースに保存しませんでした。代わりに、関連するデータを(おそらく多形の)コレクションに保存する必要があります。ニュースフィードの取得は非常に簡単で、インデックス作成は簡単です。ビューの構造は基本的に変更されません。後でHTMLを変更したい場合は、それも簡単です。

    欠点は、これにより多くのデータが複製されることです。フォロワーが多いと問題になるかもしれません。単一のユーザーIDの代わりにユーザーIDの配列を使用すると役立つ場合がありますが(情報がすべてのフォロワーで同じである場合)、制限もあります。

    非常に大きな関連付けの問題の場合、キャッシュのみがあります。私の理解では、FacebookとTwitterの両方の魔法は、データベースに頻繁にアクセスせず、RAMに大量のデータを保持することです。数十億のアイテムを関連付ける場合、RAMでもそれを行うのは困難です。

    更新は、1時間ごとではなく、継続的に書き込む必要があります。トラフィックが多く、1時間ごとの更新に30分かかるとします。現在、最悪のケースは90分です。遅れ。変更をジャストインタイムで処理する場合は、これをおそらく5分に短縮できます。

    ある時点で仮定を投入し、キャッシングといくつかのヒューリスティックを使用する必要があります。いくつかの例:

    • 最近のツイートほど、より多くのトラフィックが表示されます。リツイートされる可能性が高く、頻繁に見られます。 RAMに保存します。
    • 1991年のFacebookのタイムラインの概要ページはおそらく毎日変更されないため、これは長期的な出力キャッシュの候補です。
    • 現在のFacebookの活動は、多くの書き込みを受ける可能性があります。ここでは、出力キャッシュはあまり役に立ちません。この場合も、オブジェクトはRAMに保持する必要があります。



    1. mongodbの配列フィールドの要素を置き換える方法

    2. ジオキーを抽出できません。GeoJSONタイプが不明です:{座標:[13.42493130000003、52.50074619999999]

    3. ファイルストレージとしてのMongoDB

    4. ポイントが含まれているすべての円を取得するにはどうすればよいですか?