2012-04-30 22 views
9

Redditは現在、データベースをPosgreSQLからApache Cassandraに移行しています。誰かがCassandraでRedditが使用するデータベーススキーマを知っていますか?Redditで使用されるCassandraデータベーススキーマとは何ですか?

+0

私はそうではありません。私はRedditの外にいる人は誰でもわかりませんが、それは本当に重要ですか?私はあなたのアプリケーションに合ったスキーマを決定するのに役立つことでしょう。 –

+2

RedditはGitHubのサイトに権限を与えるコードを公開しました:https://github.com/reddit/reddit。私はコードを検索しそこからスキーマを決定することができました。しかし、私はそれがここで尋ねる方が簡単だと思った。 –

+1

私はコードを見て、さまざまな方法で作成されて使用される2つの異なるカラムファミリのようなものを見ます。あなたが疑問に思っている領域がありますか、またはcassandra-cliからの 'show schema'出力のようなものを探していますか? –

答えて

-1

また、正確な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」を検索すると、他のアプローチがありますが、すべて正規化に戻るか、「無限」階層では完全ではありません。

+1

あなたが記述するアプローチの問題は、新しいコメントが追加されるたびにJSONを更新する必要があります。つまり、解析してコメントをマージしてからCassandraに書き込む必要があるということです。数千のコメントを持つツリーを想像してみてください。したがって、このアプローチは検索には安いですが、更新するとコストがかかります。リレーショナル・アプローチは逆の方法であり、コメント・ツリーを検索する場合にはコストがかかり、更新する場合には安くなります。私は最良のアプローチはハイブリッドなアプローチだと考えています。記述したときに最も多くのインポートコメントを格納し、リレーショナルな方法では最も重要でないものを格納します。 –

+1

@ Calin-AndreiBurloiuはいはい。そのようなコメントシステム(redditのような)は更新よりはるかに多くの読み込みを持っていることは私の理解です。だから私の答えはまさに正しい解決策です。 –

+0

そして、結果のparsinはJSONであるため、クライアント上のJavaScriptで簡単に実行できます。 –

関連する問題