19

我正在和一个朋友一起做一个项目,该项目将利用 Hbase 来存储它的数据。有没有好的查询示例?我似乎正在编写大量 Java 代码来遍历 RowResult 的列表,而在 SQL 领域,我可以编写一个简单的查询。我错过了什么吗?还是 Hbase 缺少什么?

4

6 回答 6

20

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

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

要详细了解 HBase 与“传统”RDBMS 的不同之处,请查看这篇很棒的文章: Bryan Duxbury 的匹配阻抗:何时使用 HBase

于 2008-09-07T03:42:38.080 回答
2

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

于 2010-04-18T19:57:27.507 回答
1

我查看了 Hadoop 和 Hbase,正如Sean所说,我很快意识到它并没有给我我真正想要的东西,它是一个符合 JDBC 的集群数据库。

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

于 2008-09-07T06:36:05.090 回答
1

我建议看一下 Apache Hive项目,它类似于 HBase(在某种意义上它是一个分布式数据库),它实现了一种 SQL 风格的语言。

于 2008-09-30T14:42:31.353 回答
0

感谢肖恩的回复,对于我迟到的回复感到抱歉。我经常错误地将 HBase 视为 RDBMS。事实上,我经常因为它而不得不重新编写代码!忘记这件事真是太难了。

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

于 2008-09-29T01:11:54.557 回答
0

很高兴听到你们正在使用 HBase!无论如何,我都不是专家,但这里有几件事可能会有所帮助。

  • HBase 基于 BigTable / 灵感来自 BigTable,它恰好被 AppEngine 公开为他们的 db api,因此如果您正在开发 web 应用程序,浏览他们的文档应该会有很大帮助。

  • 如果您不在 webapp 上工作,您所描述的迭代类型通常通过 map/reduce 处理(不要发出您不想要的值)。使用迭代器跳过值几乎可以保证您的应用程序将遇到 HBase 大小的数据集的瓶颈。如果你发现你还在思考 SQL,请查看 cloudera 的 pig 教程和 hive 教程。

  • 基本上,整个 HBase/SQL 心理差异(对于非 webapps)归结为“将计算发送到数据,不要将数据发送到计算”——如果你在编码时牢记这一点的话'会很好的:-)

问候,

大卫

于 2009-12-12T19:04:14.473 回答