22

任何人都知道 HBase 的良好 Java ORM 实现。这个对 Ruby 来说真的很好看

http://www.stanford.edu/~sqs/rhino/doc/

但是找不到Java的。

谢谢。

4

7 回答 7

12

最近发布了 kundera-2.0.4 的新版本,它是基于 Hbase 的 ORM。它提供了大量其他非常有用的东西,比如索引、跨数据存储持久性等。

我建议试一试 https://github.com/impetus-opensource/Kundera

可执行 jar 位于:

https://github.com/impetus-opensource/昆德拉

于 2011-12-15T10:14:05.817 回答
4

在我看来,HBase 的优势在于将动态列保留在静态列族中。根据我使用 HBase 开发应用程序的经验,我发现确定单元限定符和值并不像 SQL 那样容易。

例如,一本书有许多作者,根据您的访问模式、作者编辑、应用层缓存实现,您可能希望选择将整个作者保存在书表中(即作者驻留在 2 个表中,作者表和书表) 或只是作者 ID。此外,作者的集合可以作为 XML/JSON 保存到一个单元格中,也可以保存为单个作者的单个单元格。

有了这种理解,我得出结论,编写一个成熟的 ORM,比如 Hibernate,不仅非常困难,实际上可能还没有定论。所以我采取了不同的方法,更像是 iBatis 之于 Hibernate。

  • 我的迷你框架:http : //github.com/smart-it/smart-dao [smart-hbase]
  • 用法:https ://github.com/smart-it/smart-cms [content-spi-impl 模块有用法]
  • 用法:https ://github.com/smart-it/jetty-session-hbase [hbase-impl 模块有用法]

让我试着解释一下它是如何工作的。为此,我将使用此处此处的源代码。

  1. 首要任务是实现 ObjectRowConverter 接口,在本例中为 SessionDataObjectConverter。抽象类封装了从 HBase 社区讨论和学习的基本最佳实践。该扩展基本上让您可以 100% 控制如何将对象转换为 HBase 行,反之亦然。对于这个 API 的唯一限制是您的域对象必须实现接口 PersistentDTO,该接口在内部用于创建 Put、Delete、执行 byte[] 到 id 对象,反之亦然。
  2. 下一个任务是像在 HBaseImplModule 中那样连接依赖项。如果您有兴趣,请告诉我,我将完成依赖注入。

就是这样。如何使用它们可以在这里找到。它基本上使用 CommonReadDao、CommonWriteDao 来读写 HBase 的数据。常见的 read dao 在查询中实现多线程行到对象的转换,多线程通过 ids 获取,通过 id 获取,并具有类似 Hibernate Criteria 的 API 以通过 Scan 查询到 HBase(没有可用的聚合函数)。Common write dao 实现了与一些附加功能相关的通用写相关代码,例如乐观/悲观锁定、单元格覆盖/合并检查实体(不)存在时保存、更新、删除等。

这个 ORM 是为我们的内部目的而开发的,我已经到了我的脖子上,因此还不能做一些文档。但是,如果您有兴趣,请告诉我,我花时间优先记录文档。

于 2010-11-30T10:40:48.600 回答
4

Hibernate OGM 是非 SQL 数据库的一个很好的解决方案。试试看。

http://www.hibernate.org/subprojects/ogm.html

于 2012-06-07T05:54:05.683 回答
3

datanucleus 怎么样:您可以使用 JPA 或 JDO 作为 API,使用 hbase 作为后端存储:http ://www.datanucleus.org/plugins/store.hbase.html

于 2011-08-27T22:28:46.943 回答
3

你可以试试这个:http ://code.google.com/p/hbase-ormlite/ 。这是 Java 中 HBase 的一种形式。

于 2012-07-13T07:01:25.623 回答
2

pigiparhely,我一个都没用过。IMO HBase 是快速键/值存储引擎,但如果您需要另一层抽象,您应该检查它们。

于 2010-08-05T15:56:05.703 回答
2

我们正在使用 HBase ORM - Surus https://github.com/mushkevych/surus/wiki

可能值得一提

  • 我们在 Hadoop map/reduce 中大量使用它
  • 它有一个额外的模块,允许您从 JSON 流中抽取 HBase 数据(在我们的例子中,它来自 Python 代码)
于 2011-10-28T19:09:47.080 回答