Hbase 架构嵌套实体

2024-02-18

有谁有关于如何创建带有嵌套实体的 Hbase 表的示例吗?

Example

UserName (string)
SSN  (string)
  + Books (collection)

例如,书籍收藏看起来像这样

Books

isbn
title
etc...

我找不到如何创建这样的表的示例。我看到很多人都在谈论它,以及它在某些情况下如何成为最佳实践,但我无法在任何地方找到有关如何执行此操作的示例。

谢谢...


嵌套实体不是 HBase 的官方功能;这只是一些人谈论一种使用模式的一种方式。在此模式中,您使用 HBase 中的“列”实际上只是一个大映射(一堆键/值对)这一事实来让您对基数维度进行建模inside通过在嵌套实体的每个“行”添加一列来添加行。

就架构而言,您不需要在表本身上做太多事情;当您在 HBase 中创建表时,只需指定名称和列族(以及相关属性),如下所示(在 hbase shell 中):

hbase:001:0> create 'UserWithBooks', 'cf1'

然后,由您在其中添加的内容(按列)决定。您可以插入如下值:

hbase:002:0> put 'UsersWithBooks', 'userid1234', 'cf1:username', 'my username'
hbase:003:0> put 'UsersWithBooks', 'userid1234', 'cf1:ssn', 'my ssn'
hbase:004:0> put 'UsersWithBooks', 'userid1234', 'cf1:book_id_12345', '<isbn>12345</isbn><title>mary had a little lamb</title>'
hbase:005:0> put 'UsersWithBooks', 'userid1234', 'cf1:book_id_67890', '<isbn>67890</isbn><title>the importance of being earnest</title>'

列名称完全由您决定,并且对您可以拥有的数量没有限制(在合理范围内:有关更多信息,请参阅 HBase 参考指南)。当然,这样做时,您必须自己进行跑腿工作:输入和取出值(您可能会使用 java 客户端以比我使用这些 shell 命令更复杂的方式执行此操作,它们'仅用于解释目的)。虽然您可以按键有效地扫描表中的一部分列(使用列分页过滤器),但除了将它们拉出并在其他地方解析之外,您无法对单元格的内容做太多事情。

你为什么要这样做?可能只是如果您希望一个父行的所有嵌套行具有原子性。这不是很常见,您最好的选择可能是首先将它们建模为单独的表,并且只有在您真正理解其中的权衡时才转向这种方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hbase 架构嵌套实体 的相关文章

随机推荐