我正和一位朋友合作开发一个项目,该项目将利用Hbase存储数据。有什么好的查询示例吗?我似乎正在编写大量的Java代码来遍历RowResult的列表,而在SQL领域,我可以编写一个简单的查询。我错过了什么吗?或者Hbase遗漏了什么?
答案 0 :(得分:20)
我认为,就像我们中的许多人一样,当它实际上是一个面向列的存储模型,意味着有效地存储和检索大量稀疏数据时,他们错误地将bigtable和HBase视为另一个RDBMS。这意味着,例如,理想地存储单行内的多对一关系。您的查询应返回非常少的行,但包含(可能)许多数据点。
也许如果您告诉我们更多关于您要存储的内容,我们可以帮助您设计您的架构以匹配bigtable / HBase的处理方式。
关于HBase与“传统”RDBMS的不同之处,请参阅Bryan Duxbury撰写的这篇精彩文章:Matching Impedance: When to use HBase。
答案 1 :(得分:2)
如果要使用查询语言和JDBC驱动程序访问HBase,则可以。 Paul Ambrose在hbql.com上发布了一个名为HBQL的库,可以帮助你做到这一点。我已将它用于几个项目并且运行良好。您显然无法访问完整的SQL,但它确实使它更容易使用。
答案 2 :(得分:1)
我看了Hadoop和Hbase,正如 Sean 所说,我很快就意识到它没有给我我真正想要的东西,这是一个集群的JDBC兼容数据库。
我认为你可以更好地使用像C-JDBC或HA-JDBC这样的东西,这看起来更像我以前的样子。 (就个人而言,除了阅读文档之外,我没有进一步了解其中任何一个,所以我不知道哪个是好的,如果有的话。)
答案 3 :(得分:1)
我建议看看Apache Hive项目,它类似于HBase(在某种意义上它是一个分布式数据库),它实现了一种SQL式语言。
答案 4 :(得分:0)
感谢Sean的回复,对不起我迟到的回复感到抱歉。我经常犯下将HBase视为RDBMS的错误。事实上我经常因为它而不得不重新编写代码!忘掉这是一件很难的事。
现在我们只有4张桌子。考虑到我的背景,在这种情况下,很少。我只是希望使用一些 RDBMS功能,而主要是坚持面向列的存储模型。
答案 5 :(得分:0)
很高兴听到你们正在使用HBase!在任何想象中我都不是专家,但这里有一些可能有用的东西。
HBase基于/受BigTable的启发,它恰好被AppEngine作为他们的db api公开,所以如果你正在使用webapp,browsing their docs应该会有很大的帮助。
如果您没有使用Web应用程序,那么您所描述的迭代类型通常使用via map / reduce处理(不要发出您不想要的值)。使用迭代器跳过值几乎可以保证您的应用程序在HBase大小的数据集中存在瓶颈。如果你发现你还在思考SQL,请查看cloudera的pig教程和hive教程。
基本上整个HBase / SQL的心理差异(对于非webapps)归结为“将计算发送到数据,不将数据发送到计算中” - 如果你记住这一点的话你编码你会做得很好: - )
此致
大卫