有没有人对如何使用嵌套的实体创建一个HBase的表的例子吗?
例
UserName (string)
SSN (string)
+ Books (collection)
该藏书是这样的,例如
图书
isbn
title
etc...
我无法找到一个简单的例子是如何创建一个表是这样的。 我看到很多人谈论它,和它是如何在某些情况下最好的做法,但我不能找到如何在任何地方做一个例子。
谢谢...
有没有人对如何使用嵌套的实体创建一个HBase的表的例子吗?
例
UserName (string)
SSN (string)
+ Books (collection)
该藏书是这样的,例如
图书
isbn
title
etc...
我无法找到一个简单的例子是如何创建一个表是这样的。 我看到很多人谈论它,和它是如何在某些情况下最好的做法,但我不能找到如何在任何地方做一个例子。
谢谢...
嵌套实体不是HBase的正式功能; 这只是一种方式的一些人在谈论一个使用模式。 在这个模式中,你可以使用一个事实,即在HBase的“列”其实只是一个大地图(一串键/值对的),让你的每“行”将一列列内基数的三维模型嵌套实体。
架构的角度来看,你不需要做太多的表本身; 当您创建HBase的表,你只需指定名称和列族(和相关属性),像这样(在HBase的壳):
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命令这样做,他们”重新仅用于说明目的)。 虽然你可以有效地键(使用分页列过滤器)扫描列的仅仅是部分在一个表中,你不能做比把它们和其他地方的解析他们的其他单元格中的内容。
你为什么要这样做? 也许只是如果你想周围所有的嵌套行原子的一个父行。 这不是很常见,你最好的选择可能是由它们建模为单独的表开始,只有移动到这个方法,如果你真的了解权衡。
有这一定的局限性。 首先,这种方法仅适用于一级深:你的嵌套实体本身不能有嵌套实体。 您还可以有多个不同的嵌套子实体在一个单亲,列资格赛是他们的标识属性。 其次,它不是有效的访问存储作为行内嵌套列资格赛的个人价值,相比于另一个表访问行,因为你在前面章节中的经验教训。 不过,也有引人注目的情况下,这种模式的设计是适当的。 如果你在孩子实体唯一方法是通过父实体,并且希望有大约父的所有儿童事务的保护,这可能是正确的道路要走。