Reddit は現在、データベースを PosgreSQL から Apache Cassandra に移行しています。Reddit が Cassandra で使用しているデータベース スキーマを知っている人はいますか?
1 に答える
また、正確な Reddit スキーマもわかりませんが、アーカイブしたいものについては、リレーショナル データベースではなくドキュメント ベースのデータベースにコメントの階層を保存するという正しい方法をとっています。ルート コメントごとに 1 つのドキュメントを保持し、そのコメントにすべての子 (および子の子) を追加することをお勧めします。
CouchDB と MongoDB では、JSON ドキュメントを直接保存できます。Cassandra では、JSON を String として保存します。したがって、データ構造は
root-comments
{
root-comment-id
root-comment-json-string
}
各 root-comment-json-string は次のようになります。
{
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 : []
}
]
}
]
}
さらに、各コメントの構造に UserName、UserID、Timestamp などを追加することもできます。
この「非正規化」構造により、大量のデータがある場合、正規化されたリレーショナル構造と比較してクエリが非常に高速になります。
いずれにせよ、大規模なユーザー規模でそのようなシステムを実装するときに発生する可能性のあるすべての例外に対処する必要があります。誰かがコメント A にコメント B で返信したが、同時に (または後で) コメント A が削除された場合はどうなりますか。
インターネットで「カサンドラ階層データ」を検索すると、他のアプローチがいくつか見つかりますが、それらはすべて正規化に戻るか、「無限」階層に対して完全ではありません。