我正在和一个朋友一起开发一个项目,该项目将利用 Hbase 来存储数据。有什么好的查询示例吗?我似乎正在编写大量 Java 代码来迭代 RowResult 的列表,而在 SQL 领域,我可以编写一个简单的查询。我错过了什么吗?或者Hbase遗漏了什么?

有帮助吗?

解决方案

我认为您和我们许多人一样,犯了将 bigtable 和 HBase 视为另一个 RDBMS 的错误,而实际上它是一种面向列的存储模型,旨在有效地存储和检索大量稀疏数据。例如,这意味着理想情况下将多对一关系存储在单行中。您的查询应该返回很少的行,但包含(可能)许多数据点。

也许如果您告诉我们更多有关您尝试存储的内容,我们可以帮助您设计模式以匹配 bigtable/HBase 的处理方式。

要详细了解 HBase 与“传统”RDBMS 的不同之处,请查看这篇精彩的文章: 匹配阻抗:何时使用 HBase 作者:布莱恩·达克斯伯里。

其他提示

如果您想使用查询语言和 JDBC 驱动程序访问 HBase,这是可能的。Paul Ambrose 在 hbql.com 上发布了一个名为 HBQL 的库,可以帮助您做到这一点。我已经将它用于几个项目并且效果很好。显然,您无法访问完整的 SQL,但它确实使其更易于使用。

我研究了 Hadoop 和 Hbase,结果是 肖恩 说,我很快意识到它并没有给我真正想要的东西,即一个符合 JDBC 的集群数据库。

我认为你最好使用类似的东西 C-JDBC 或者 高可用性JDBC 这看起来更像是我所追求的。(就我个人而言,除了阅读文档之外,我还没有对其中任何一个进行进一步的了解,所以我无法判断它们中的哪一个是好的(如果有的话)。)

我建议看看 Apache 蜂巢 项目,它类似于 HBase(从某种意义上说,它是一个分布式数据库),它实现了 SQL 式语言。

感谢肖恩的回复,并对我迟到的回复表示歉意。我经常犯这样的错误:将 HBase 视为 RDBMS。事实上,我经常因此不得不重新编写代码!忘记这是一件很难的事情。

现在我们只有4张桌子。考虑到我的背景,这种情况很少见。我只是希望使用 一些 RDBMS 功能,同时主要坚持面向列的存储模型。

很高兴听到你们正在使用 HBase!从任何角度来看,我都不是专家,但这里有一些可能会有所帮助的事情。

  • HBase 基于 BigTable/受 BigTable 启发,而 BigTable 恰好由 AppEngine 作为其 db api 公开,因此 浏览他们的文档 如果您正在开发网络应用程序,应该会有很大帮助。

  • 如果您不是在开发网络应用程序,那么您所描述的迭代类型通常是通过 map/reduce 处理的(不要发出您不需要的值)。使用迭代器跳过值实际上可以保证您的应用程序将遇到 HBase 大小的数据集的瓶颈。如果你发现你还在用 SQL 思考,请查看 cloudera 的 Pig 教程和 Hive 教程。

  • 基本上,整个 HBase/SQL 心理差异(对于非 Web 应用程序)可以归结为“将计算发送到数据,而不是将数据发送到计算”——如果您在编码时牢记这一点的话。会做的很好:-)

问候,

大卫

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top