4

クラスCustomerがあり、firstName、lastNameなどの単純なフィールドだけでなく、フィールドとして連絡先のリストがあり、すべての連絡先オブジェクトに電子メールのリストと電話番号のリストがあるとします。HBase スキーマが firstName のような単純な String フィールドでどのように見えるかは既に知っています。しかし、ネストされたフィールド (オブジェクトのリスト、それぞれが他のオブジェクトまたはデータ型のリストを含む) を保存する方法がわかりません。誰でもそれを手伝ってもらえますか?

よろしく

Java クラス:

public class Customer{
   private String id;
   private String userName;
   private String lastName;
   private List<Address> addresses;
   private List<Contact> contacts;
   private List<Objects> objects; // list of other possible objects
}

public class Address{
   private String homeNumber;
   private String street;
   private String city;
}

public class Contact{
   private List<String> emails;
}

HBase スキーマ:

Table: Customer
Row Key: id
Column Family: data [columns: userName, lastName]
Column Family: address [ columns: homeNumber, street, city ]
Column Family: contact ???

ここで連絡先とどのように連携しますか? または、リストの他のアドレス エントリを取得するにはどうすればよいですか?

よろしく


Customer テーブルにいくつかの住所を保存するにはどうすればよいですか? Put の方法:

add(byte[] family, byte[] qualifier, byte[] value) 

アドレスは 1 つしか持てません。そうですか?「row1」の場合、次の例があります。

add("adress", "homenumber", value);
add("adress", "street", value);
add("adress", "city", value);

それは1つのアドレスになります。この「row1」の他の人をこの方法で保存するにはどうすればよいですか?

よろしく、

4

2 に答える 2

2

コレクション メンバーに必要なアクセス パターンCustomerによって、それらの格納方法が決まります。

たとえば、顧客の住所の一部だけを取得する理由はありますか? おそらくそうではありません。addressそれでは、修飾子がアドレスのハッシュコード (またはその他の固有の値) であり、セルに JSON データが含まれる列を含む列ファミリーを単純に持たないのはなぜでしょうか?

顧客の連絡先へのアクセス パターンは? これらの場合contact、列修飾子が連絡先のハッシュコード/ID であり、セルの内容が電子メールである列ファミリーがある場合があります。


address2 つの住所を持つ顧客の列ファミリーの内容の例を次に示します。

コラム:address:589F2AB09C
内容:{ "homenumber": 4, "street": "Cherry Ln", "city": "Pleasantville" }

コラム:address:FB94012AC4
内容:{ "homenumber": 100, "street": "Broadway", "city": "New York City" }

上記の hashcode 列修飾子は、私が作成した値です。実際には、 anAddressを aにマップするハッシュ関数が必要であり、その の修飾子として the をbyte[]使用します。そのハッシュ関数を記述する良い方法は、(1) を にシリアル化し、(2) その SHA1 ハッシュを計算して新しい、ハッシュコードを取得することです。byte[]AddressAddressbyte[]byte[]byte[]

それでも私の言っていることが理解できない場合は、HBase を使おうとして頭がおかしくなっているのではないかと思います...

于 2013-08-07T20:58:04.597 に答える