2011-02-01 2 views
4

コンテンツに関する情報(メタデータ)をそのコンテンツのID(またはキー)に保存することをお勧めしますか?コンテンツに関する情報(メタデータ)をそのコンテンツのID(またはキー)に保存することをお勧めしますか?

つまり、データベースに格納されているコンテンツのID(またはキー)として時間ベースのUUIDを使用しています。私のアプリケーションはまず、(データベースからの)そのようなすべてのId(またはキー)のリストにアクセスし、(データベースから)対応するコンテンツにアクセスします。これらのIDは実際にはUUID(時間ベース)です。私のアイデアは、自分のソフトウェアがデータベースからコンテンツ全体に再度アクセスすることなく、このメタコンテンツにアクセスできるように、コンテンツに関するいくつかの追加情報をIds自体に保存することです。

私のアプリケーションコンテキストは、JavaテクノロジとCassandraデータベースを使用するWebサイトです。 私の質問は、

  1. どうすればいいですか?コンテンツのIDからメタデータを取得するために、(ユーザーへのデータの提示時に)多くの処理が必要になる可能性があるので、私は懸念しています。したがって、代わりにデータベースから取得し、そのコンテンツのIDの処理を通じて取得するほうがよい場合があります。

  2. 提案されている場合は、どのように効率的に実装する必要がありますか?私は、次の方法を考えていた: -

'timebasedUUID'は、そのコンテンツがユーザー& 'userId'によって追加されたタイムスタンプに基づいて生成されたIDで、

Id of a content = 'Timebased UUID' + 'UserId'

がいることを入れて、ユーザーのIDを表しコンテンツ。

ので、私の例Idはこのようなものになります - e4c0b9c0-a633-15a0-ac78-001b38952a49(TimeUUID)--ff7405dacd2b(ユーザーID)、私が最も効率的な方法で、コンテンツの上記IDからこのuserIdを抽出する必要がありどのように

を?

メタ情報をIDに格納する方が良いでしょうか?

答えて

4

あなたはこれに多くの考えを入れているようですが、これはお勧めできません。このようなデータを保存すると、最初は良いアイデアのように思えますが、データの読み込みと保存に多くの予期しない問題が発生するため、問題が発生します。個別のデータを別々の変数と列として保持することが最善です。

メインコンテンツでメタコンテンツにアクセスすることに本当に関心がある場合は、2つの列ファミリを作成します。一方のファミリーはメタコンテンツを有し、他方はより大きなメインコンテンツであり、両方が同じIDキーを共有する。私はカサンドラについてはあまりよく分かりませんが、これはこの種のことをするために推奨される方法のようです。

私はこれがすべて必要であるとは思わないことに注意してください。ユーザーが非常に大量の情報を保存している場合を除き、サイズは自明であり、検索はすばやく続ける必要があります。

+0

ありがとうAmaDaden!私はすきです! –

1

私はAmaDadenに同意します。 IDとデータを混ぜることは、苦しみの世界につながる道の第一歩です。特に、ビジネスロジックでデータ部分を変更する必要があり、データベースロジックでIDが変更されないようにする必要があります。あなたの例では、突然、ユーザーが2つのアカウントを1つのユーザーIDにマージできる必要があります。ユーザーIDが単なるデータであれば、これは簡単な更新でなければなりません。それがIDの一部であれば、そのIDへのすべての参照を見つけて更新する必要があります。

関連する問題