gpt4 book ai didi

HBase:如何保存带有嵌套字段(如列表列表)的对象?

转载 作者:行者123 更新时间:2023-12-01 03:54:59 27 4
gpt4 key购买 nike

假设我有一个类 Customer,它有简单的字段,如 firstName、lastName 等,但还有一个联系人列表作为字段,每个联系人对象都有一个电子邮件列表和一个电话号码列表。我已经知道 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 ???

它如何与这里的联系人一起工作?或者我如何才能拥有列表的其他地址条目?

问候

如何在客户表中保存几个地址? Put的方法:
add(byte[] family, byte[] qualifier, byte[] value) 

sujests 我只能有一个地址。是吗?对于“row1”,有以下示例:
add("adress", "homenumber", value);
add("adress", "street", value);
add("adress", "city", value);

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

问候,

最佳答案

什么 访问模式 您想拥有的Customer集合成员应该决定您如何存储它们。

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

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

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

栏目:address:589F2AB09C内容:{ "homenumber": 4, "street": "Cherry Ln", "city": "Pleasantville" }
栏目:address:FB94012AC4内容:{ "homenumber": 100, "street": "Broadway", "city": "New York City" }
上面的 hashcode 列限定符是我刚刚编造的值。真的,你应该有一个哈希函数来映射 Addressbyte[] ,然后使用 byte[]作为该 Address 的限定符.编写该哈希函数的一个好方法是 (1) 序列化您的 Addressbyte[] ,然后 (2) 计算该 byte[] 的 SHA1 哈希值获取新的 byte[] ,哈希码。

如果您仍然不明白我在说什么,我想您可能在尝试使用 HBase 时遇到了麻烦...

关于HBase:如何保存带有嵌套字段(如列表列表)的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18103201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com