0

BerkeleyDBは、単一のキーに複数の値を格納できることを除いて、RubyハッシュテーブルまたはPythonディクショナリと同等のデータベースです。

私の質問は、複雑なデータ型をこのようなストレージ構造に格納したい場合、どうすればよいでしょうか。

通常のリレーショナルテーブルでは、Personを表す場合は、特定のデータ型の列を含むテーブルを作成します。

Person
-id:integer
-name:string
-age:integer
-gender:string

このように書き出すと、人がキーと値のペアのセットとしてどのように理解されるかがわかります。

id=1
name="john"; 
age=18; 
gender="male";

個人を個々のキー/値のペア(name = "john")に分解するのは簡単です。

ただし、BerkeleyDB形式を使用して個人を表すには、構成要素であるキーと値のペアから個人を再構成する何らかの方法が必要になります。

そのためには、人を1つの単位としてまとめるために、人工的なカプセル化構造を課す必要があります。

これを行う方法はありますか?

編集:Robert Harveyの回答が示すように、BerkeleyDBのJavaエディションにはエンティティ永続化機能があります。残念ながら、 Monetaを使用してRubyアプリケーションからBerkeleyDBに接続するため、このサポートがない場合はカスタムソリューションを作成する必要があると思われるStandardEditionを使用します。

4

3 に答える 3

2

あなたのデータストアがそうできるなら (そして BerkeleyDB は AFAICT をします)、オブジェクト属性を別のキーに分割せずに、オブジェクト ID でキー付けされたオブジェクト属性の表現を格納するだけです。

例:

Person
 -id:1
 -name:"john"
 -age:18
 -gender:"male"

キーを使用して、yaml 表現を BerkleyDB に保存しますperson_1

--- !ruby/object:Person 
attributes: 
  id: 1
  name: john
  age: 18
  gender: male

代わりに、各属性をキーとしてデータストアに保存する必要がある場合 (なぜですか?)、person レコードのキーがその識別属性 (ActiveRecord の ID) にリンクされていることを確認する必要があります。

この場合、これらのキーを BerkleyDB に保存します。

person_1_name="john"; 
person_1_age=18; 
person_1_gender="male";
于 2009-06-14T10:03:00.487 に答える
1

注釈型エンティティについては、このドキュメントをご覧ください。

http://www.oracle.com/technology/documentation/berkeley-db/je/java/com/sleepycat/persist/model/Entity.html

于 2009-06-14T05:09:23.297 に答える