Redditは現在、データベースをPosgreSQLからApache Cassandraに移行しています。誰かがCassandraでRedditが使用するデータベーススキーマを知っていますか?Redditで使用されるCassandraデータベーススキーマとは何ですか?
答えて
また、正確なRedditスキーマはわかりませんが、アーカイブしたいものについては、リレーショナルデータベースではなくドキュメントベースのデータベースにコメントの階層を保存しています。根本的なコメントごとに1つの文書を保管し、そのコメントにすべての子(および子の子)を追加することをお勧めします。
CouchDBとMongoDBでは、JSONドキュメントを直接保存できます。 CassandraではJSONを文字列として保存します。だから、データ構造は
root-comments
{
root-comment-id
root-comment-json-string
}
と各ルート-コメント-JSON文字列は次のようになりますが、次のようになります。
{
comment : "hello world"
answers :
[
{
comment : "reply to hello world"
answers :
[
{
comment : "thanks for the good reply"
answers : []
},
{
comment : "yes that reply was indeed awesome"
answers : []
}
]
}
]
}
は、さらに、ユーザー名、ユーザーID、タイムスタンプを追加したい場合があります.. ..などをコメントごとの構造に追加します。
この '非正規化された'構造は、たくさんのデータを持っている場合、正規化されたリレーショナル構造と比べて非常に高速なクエリを作成します。
いずれの場合でも、大規模なユーザー規模でこのようなシステムを実装すると起こりうるすべての例外を処理する必要があります。誰かがコメントBでコメントAに返信すると同時に、コメントAが削除されるとどうなりますか?
インターネットで「cassandra hierarchical data」を検索すると、他のアプローチがありますが、すべて正規化に戻るか、「無限」階層では完全ではありません。
あなたが記述するアプローチの問題は、新しいコメントが追加されるたびにJSONを更新する必要があります。つまり、解析してコメントをマージしてからCassandraに書き込む必要があるということです。数千のコメントを持つツリーを想像してみてください。したがって、このアプローチは検索には安いですが、更新するとコストがかかります。リレーショナル・アプローチは逆の方法であり、コメント・ツリーを検索する場合にはコストがかかり、更新する場合には安くなります。私は最良のアプローチはハイブリッドなアプローチだと考えています。記述したときに最も多くのインポートコメントを格納し、リレーショナルな方法では最も重要でないものを格納します。 –
@ Calin-AndreiBurloiuはいはい。そのようなコメントシステム(redditのような)は更新よりはるかに多くの読み込みを持っていることは私の理解です。だから私の答えはまさに正しい解決策です。 –
そして、結果のparsinはJSONであるため、クライアント上のJavaScriptで簡単に実行できます。 –
- 1. mysqlデータベーススキーマで使用されているメモリの割合を調べるクエリは何ですか?
- 2. データベーススキーマは正確に何ですか?
- 3. Apache CassandraのDMLとは何ですか?
- 4. csprojファイルで使用されるAppDesignerFolderとは何ですか?
- 5. Visioで使用される「システムシーケンス」フィールドとは何ですか?
- 6. Laravelで使用されている `HtmlString`とは何ですか?
- 7. CakePHPで使用される.ctpファイルとは何ですか?
- 8. 擬似コードで使用されるとは何ですか?
- 9. FakeItEasyで使用されるダミーとは何ですか?
- 10. xcode 4で使用される.aファイルとは何ですか?
- 11. OpenCVで使用されるマクロCV_OCL_RUNとは何ですか?
- 12. Pythonで使用されているsys.platformとは何ですか?
- 13. TCLインタプリタで使用されるSIGUSR2とは何ですか?
- 14. Luceneで使用されるsubReaderとは何ですか?
- 15. Dartで使用される「const」キーワードとは何ですか?
- 16. CassandraをNode.jsで使用することはできますか?
- 17. 実際に使用されるルータバインディングとは何ですか
- 18. FitBitに使用されるHeartRateモジュールとは何ですか?
- 19. SAML会話に使用されるエンコーディングとは何ですか?
- 20. 実際に使用される「ピクルス」とは何ですか?
- 21. RedditでOAuthを使用すると401エラーコードを取得する
- 22. 一般的なCassandraデータタイプのバイトサイズとは何ですか? - パーティションディスク使用量を計算するときに使用されますか?
- 23. **/*。fileExtensionはantで使用されるものは何ですか?
- 24. このデータベーススキーマは実用的ですか?
- 25. ファイルは別のプロセスで使用されています。Cassandra
- 26. ::との違いは何ですか?エイリアスが使用されるときC#で?
- 27. spark-cassandra-connectorを使用してsparkとcassandraを接続するにはどうすればいいですか?
- 28. Ext.Component.initialConfigとは何ですか、何をするのですか、どのコンテキストで使用されますか?
- 29. apt-get installで使用される-yフラグは何ですか?
- 30. vtkobjectで使用されるマクロは何ですか?
私はそうではありません。私はRedditの外にいる人は誰でもわかりませんが、それは本当に重要ですか?私はあなたのアプリケーションに合ったスキーマを決定するのに役立つことでしょう。 –
RedditはGitHubのサイトに権限を与えるコードを公開しました:https://github.com/reddit/reddit。私はコードを検索しそこからスキーマを決定することができました。しかし、私はそれがここで尋ねる方が簡単だと思った。 –
私はコードを見て、さまざまな方法で作成されて使用される2つの異なるカラムファミリのようなものを見ます。あなたが疑問に思っている領域がありますか、またはcassandra-cliからの 'show schema'出力のようなものを探していますか? –