我正在和一个朋友一起做一个项目,该项目将利用 Hbase 来存储它的数据。有没有好的查询示例?我似乎正在编写大量 Java 代码来遍历 RowResult 的列表,而在 SQL 领域,我可以编写一个简单的查询。我错过了什么吗?还是 Hbase 缺少什么?
6 回答
我认为您和我们中的许多人一样,错误地将 bigtable 和 HBase 视为另一个 RDBMS,而实际上它是一种面向列的存储模型,旨在有效地存储和检索大量稀疏数据。例如,这意味着在理想情况下将多对一关系存储在单行中。您的查询应该返回很少的行,但包含(可能)许多数据点。
也许如果您告诉我们更多关于您要存储的内容,我们可以帮助您设计架构以匹配 bigtable/HBase 的处理方式。
要详细了解 HBase 与“传统”RDBMS 的不同之处,请查看这篇很棒的文章: Bryan Duxbury 的匹配阻抗:何时使用 HBase。
如果您想使用查询语言和 JDBC 驱动程序访问 HBase,这是可能的。Paul Ambrose 在 hbql.com 上发布了一个名为 HBQL 的库,可以帮助您做到这一点。我已经将它用于几个项目并且效果很好。您显然无法访问完整的 SQL,但它确实使它更易于使用。
我建议看一下 Apache Hive项目,它类似于 HBase(在某种意义上它是一个分布式数据库),它实现了一种 SQL 风格的语言。
感谢肖恩的回复,对于我迟到的回复感到抱歉。我经常错误地将 HBase 视为 RDBMS。事实上,我经常因为它而不得不重新编写代码!忘记这件事真是太难了。
现在我们只有 4 张桌子。在这种情况下,考虑到我的背景,这很少。我只是希望使用一些RDBMS 功能,同时主要坚持面向列的存储模型。
很高兴听到你们正在使用 HBase!无论如何,我都不是专家,但这里有几件事可能会有所帮助。
HBase 基于 BigTable / 灵感来自 BigTable,它恰好被 AppEngine 公开为他们的 db api,因此如果您正在开发 web 应用程序,浏览他们的文档应该会有很大帮助。
如果您不在 webapp 上工作,您所描述的迭代类型通常通过 map/reduce 处理(不要发出您不想要的值)。使用迭代器跳过值几乎可以保证您的应用程序将遇到 HBase 大小的数据集的瓶颈。如果你发现你还在思考 SQL,请查看 cloudera 的 pig 教程和 hive 教程。
基本上,整个 HBase/SQL 心理差异(对于非 webapps)归结为“将计算发送到数据,不要将数据发送到计算”——如果你在编码时牢记这一点的话'会很好的:-)
问候,
大卫