HBase:如何用列表列表等嵌套字段保存对象?

假设我有一个类Customer,它有简单的字段,如firstName,lastName等,还有一个Contacts列表作为字段,每个Contact对象都有一个电子邮件列表和一个电话号码列表.我已经知道HBase架构如何使用firstName之类的简单字符串字段.但我不知道如何保存嵌套字段(对象列表,每个对象包含其他对象或数据类型的列表).

任何人都可以帮我吗?

问候

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) 

我只能有一个地址.是的,对吗?对于“row1”,有以下示例:

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

这将是一个地址.我如何以这种方式为这个“row1”保存其他人?

问候,

最佳答案 您希望为您的客户集合成员提供哪些访问模式,以确定如何存储它们.

例如,您是否有理由仅检索客户地址的一部分?可能不是.那么为什么不简单地让一个地址列系列包含其限定符是地址的哈希码(或其他一些独特的值)并且其单元格包含JSON数据的列?

客户联系的访问模式是什么?对于这些,您可能有一个联系人列系列,其列限定符是联系人哈希码/ ID,单元格内容是电子邮件.

以下是具有两个地址的客户的地址列系列的示例内容:

栏:地址:589F2AB09C
内容:{“homenumber”:4,“street”:“Cherry Ln”,“city”:“Pleasantville”}

列:地址:FB94012AC4
内容:{“homenumber”:100,“street”:“百老汇”,“城市”:“纽约市”}

上面的哈希码列限定符是我刚刚编写的值.实际上,你应该有一个将地址映射到byte []的哈希函数,然后使用byte []作为该地址的限定符.编写该哈希函数的好方法是(1)将您的地址序列化为byte [],然后(2)计算该byte []的SHA1哈希以获得新的字节[],即哈希码.

如果你仍然不明白我在说什么,我想你可能会试图使用HBase ……

点赞