0

MongoDB がトランザクションを必要とするかどうか、および単一のドキュメントにすべてを含めない理由を理解しようとしていました。また、Twitter が HBase を使用していることも知っているので、ツイートとウォッチャーについて考えてみました。

ツイートを投稿すると、問題なく挿入されます。しかし、私や他の誰かが私のつぶやきを見つけるにはどうすればよいでしょうか? mongodb にはインデックスがあると聞いたので、作成者のインデックスを作成して自分のツイートを見つけることができるかもしれませんが、誰もがそれを行うと効率的であるとは想像できません。また、時間もインデックス化する必要があります。

だから私が理解していることから(Twitterがリリースされたいくつかのスライドを見たと思います)、Twitterには「タイムライン」があるため、人がTwitterをツイートするたびに、日付でインデックス付けされた全員のタイムラインにtweetidが挿入され、特定のユーザーが閲覧すると、ソートされた利用可能なツイートが取得されます時間。

それはmongodbでどのように行われますか? 私が考えることができる唯一の解決策は、完了時に削除される {SendOut:DateStamp} という列をツイート ドキュメントに含めることです。最初の試行で完了しなかった場合 (タイムスタンプをチェックして、今までに完了すべきかどうかを推測します)、すべてのウォッチャーをチェックして、誰が受信していないかを確認し、受信していない場合は挿入する必要があります。しかし、トランザクションがないので、SendOut 列にインデックスを付ける必要があると思いますか? このソリューションは機能しますか? ツイートを効率的に挿入して、ユーザーを見ているすべての人に提供するにはどうすればよいでしょうか? (この解決策がうまくいかない場合)

4

1 に答える 1

0

pub/sub に似たモデルを説明しているようです。代わりに、ユーザーが最後に読んだ各ユーザー オブジェクトを使用して、最後の投稿を (日付別に) 追跡することはできませんか? ユーザーは、時間などのさまざまなインデックスを使用して、同じ方法でツイートをリクエストします。

何のためにトランザクションが必要なのかわかりませんが、Mongo はアトミック操作をサポートしています。

[更新しました]

つまり、各ユーザーのオブジェクトには、最後に読み取られた/配信されたツイートの dateTime が格納されます。明らかに、購読している著者 ID のリストも必要です。新しいツイートを取得するには、author_id、time プロパティの両方でインデックス付けされたツイートを要求し、時間で並べ替えます。

ユーザー オブジェクトからの最終読み取り日を使用し、それをツイート コレクションのセカンダリ インデックスとして使用することで、pub/sub またはトランザクションのいずれかを実行する必要はないと思います。

私は何かが欠けているかもしれません。

于 2012-10-10T20:57:45.550 に答える