2011-02-02 8 views
0

JavaおよびCassandraデータベースを使用してディスカッションフォーラムに関連するWebアプリケーションを作成しています。非常に非正規化されたNoSQLデータベースの固有キー(主キー)の設計

ユーザーの詳細が格納されている行には「キー」を、ユーザーによってポストされたコンテンツは&にそれぞれ設定する必要があります。

1つのオプションは、Java言語によって提供されるランダムに生成されたUUIDを取得することですが、これらの長さは16バイトです。 NoSQLデータベースには大量の非正規化が含まれているため、小さなサイズでキーを生成できる場合は、ディスクスペース、RAM、その他のリソースを無駄にするかどうかについて懸念しています。

私は2種類の鍵を生成する必要があります.1つはユーザ用の鍵です。&その他のコンテンツは投稿者用です。

ユーザーが投稿したコンテンツについては、timestamp+userIdとなるとよいでしょう。ここで、timestampはコンテンツが投稿されたサーバーの時刻であり、userIdはユーザーの行のキーを参照します。

任意の提案、感謝のコメント...

おかげ マルコス

答えて

2

これは分散アプリケーションですか?

次に、単純な同期カウンタを使用して、起動時に次の使用可能なIDで初期化することができます。

一方、データベースは、javaによって作成されたUUIDハッシュを処理できる必要があります。 これは、一意でなければならないsessionIdsのようなものを作成するための標準です。 あなたの文脈におけるセッションはユーザ入力のセットを表すので、あなたの問題は幾分似ています。

+0

ありがとうOliver !!はい、分散データベースCassandraを持つ分散アプリケーションです。このデータベースは最終的に一貫しているため、同期が非常に高速ではない場合があり、そのIDのデータがオーバーライドされる可能性があるため、問題が発生する可能性があります。しかし、カッサンドラの一貫性レベルを調整することも可能です。それが実現可能な解決策につながる場合は、その点を検討します。これ以外に何か別の選択肢がありますか? –

+1

投稿のIDについては、このuserId:PostCountOfUser –

+1

のように、 'userId'と 'そのユーザーの投稿件数'の組み合わせを使用して生成する必要があります。データ表現によっては、ユーザーのすべての投稿をより迅速に検索することもできます。 (ユーザーは一度だけログオンし、一度に1つのセッションに投稿すると仮定できます) – Oliver

関連する問題