2

私は自分のオブジェクトとそのプロパティを持っています。オブジェクトはその構造を変更する可能性があります。プロパティは追加/削除/変更される可能性があります。オブジェクトは完全にドロップされる可能性があります。したがって、オブジェクトのメタデータ(説明、クラス、好きなように呼び出してください:))を変更できます。

データベースには、オブジェクト スキーマとこれらのオブジェクトのインスタンスを格納する必要があります。

上記のデータを格納するためにリレーショナル データベース構造を編成する最善の方法は何ですか?

現在、私は2つの方法しか見ていません:

  1. オブジェクト スキーマをいくつかのテーブルに格納します: スキーマの一般データ、スキーマ プロパティ、可能なプロパティ タイプ。インスタンスをテーブルに保存します: インスタンスの一般データ、いくつかのテーブル - 可能なプロパティ タイプ テーブルからのタイプごとに、インスタンス プロパティ データを保存します。等々。
  2. p1 のようにオブジェクト スキーマを格納しますが、XML ファイルのようなインスタンスを 1 つのテーブルに格納します。1 つのテーブルは一般的なインスタンス情報用で、もう 1 つのテーブルはインスタンス XML です。

なぜ/何のためにこれが必要なのか聞かないでください。カスタム オブジェクトを保存するだけで、DB は高速に動作するはずです :)

4

4 に答える 4

1

シリアライズ。Java では、文字通り、シリアル化します。Pythonでは、ピクルス。他の言語では、入手したものは何でも使用します。結果を blob 列に格納します。ビールを飲みに出かけましょう。

于 2010-05-16T22:48:26.137 に答える
0

リレーショナルDBには、いくつかの選択肢があります。

  1. BLOBへのシリアル化-オブジェクトを検索できないため、適切ではありません。
  2. メタデータ用のテーブルと、Property1 .. PropertyNのような列を持つテーブルを用意します。非常に高速ですが、柔軟性はありません。
  3. スキーマを頻繁に変更する必要がない場合は、オブジェクトの実際のテーブルを使用できます(たとえば、実際に実行CREATE TABLEするALTER TABLE など)。

リレーショナルDBとは別に、MongodbなどのNoSQLデータベースを試すことができます。いくつかのテストを実行したところ、5Mオブジェクトのコレクションはかなり高速に動作します。明らかに、NoSQLソリューションはリレーショナル要件に適合しませんが、時間があれば試してみてください。

于 2010-05-17T08:34:05.647 に答える
0

.NET (特に C#) を使用します。また、プロジェクトにはリレーショナル データベースを使用する必要があります。

何百万ものインスタンスがある場合、BLOB を使用することを選択した場合 (上記のリストの p2)、データベースの速度がどのように低下​​しますか? BLOB の保存は、パフォーマンスの観点から優れていますか?

于 2010-05-17T07:51:32.517 に答える
0

スキーマを XML のブロブとして保存し、データを別の XML のブロブとして保存します。これは簡単にシリアル化/非シリアル化でき、XML スキーマの標準は既に存在します。

高速に取得するためにデータの一部にインデックスを付ける必要がある場合は、インデックスを作成できる追加の列にその情報を引き出します。ただし、XML BLOB は保持してください。

于 2010-05-16T23:04:11.967 に答える