MongoDB がトランザクションを必要とするかどうか、および単一のドキュメントにすべてを含めない理由を理解しようとしていました。また、Twitter が HBase を使用していることも知っているので、ツイートとウォッチャーについて考えてみました。
ツイートを投稿すると、問題なく挿入されます。しかし、私や他の誰かが私のつぶやきを見つけるにはどうすればよいでしょうか? mongodb にはインデックスがあると聞いたので、作成者のインデックスを作成して自分のツイートを見つけることができるかもしれませんが、誰もがそれを行うと効率的であるとは想像できません。また、時間もインデックス化する必要があります。
だから私が理解していることから(Twitterがリリースされたいくつかのスライドを見たと思います)、Twitterには「タイムライン」があるため、人がTwitterをツイートするたびに、日付でインデックス付けされた全員のタイムラインにtweetidが挿入され、特定のユーザーが閲覧すると、ソートされた利用可能なツイートが取得されます時間。
それはmongodbでどのように行われますか? 私が考えることができる唯一の解決策は、完了時に削除される {SendOut:DateStamp} という列をツイート ドキュメントに含めることです。最初の試行で完了しなかった場合 (タイムスタンプをチェックして、今までに完了すべきかどうかを推測します)、すべてのウォッチャーをチェックして、誰が受信していないかを確認し、受信していない場合は挿入する必要があります。しかし、トランザクションがないので、SendOut 列にインデックスを付ける必要があると思いますか? このソリューションは機能しますか? ツイートを効率的に挿入して、ユーザーを見ているすべての人に提供するにはどうすればよいでしょうか? (この解決策がうまくいかない場合)