2010-07-15 37 views
22

任何人都知道HBase的Java ORM实现。这一个看起来真的不错的RubyHbase的Java ORM

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

,但无法找到一个为Java。

谢谢。

+10

为什么这个问题关闭!!!!!?这是一个非常好的问题,3390次的观点! SOF版主做什么? – Heidarzadeh 2012-10-31 06:11:23

+4

这是一个非常重要的问题,为什么它被认为没有建设性? – nitefrog 2014-02-08 00:17:35

+0

这仍然是一个相关的问题。这个问题的大多数答案都指向过时或不存在的项目。我推荐使用以下任一种: [1] Apache Phoenix + Hibernate [2] https://flipkart-incubator.github.io/hbase-object-mapper/(披露:我是这个项目的作者) – 2016-09-19 09:54:22

回答

2

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

+0

谢谢。 parhely似乎没有文档,所以我选择首先使用pigi。 – 2011-01-23 01:02:12

4

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

例如,根据您的访问模式,作者编辑,您可能希望选择将整个作者保存在书籍表中的应用程序层缓存实现(尽管作者位于2表中,作者表和书桌)或只是作者ID。此外,作者的集合可以保存到一个单元格中,作为XML/JSON或单个作者的单个单元格。

有了这个理解,我总结写了一个全面的ORM,比如Hibernate,不但非常困难,而且实际上可能并不确定。所以我采取了另一种方法,就像iBatis对Hibernate一样。

让我试着解释它是如何工作的。为此,我将使用来自herehere的源代码。

  1. 首要任务是实现一个ObjectRowConverter接口,在这种情况下是SessionDataObjectConverter。抽象类封装了从HBase社区讨论和学习的基本最佳实践。该扩展基本上可以让您100%控制如何将对象转换为HBase行,反之亦然。对于这个API来说,唯一的限制就是你的域对象必须实现PersistentDTO接口,这个接口在内部被用来创建Put,Delete,做byte []到id对象,反之亦然。
  2. 接下来的任务是在HBaseImplModule中完成依赖关系。请让我知道如果你有兴趣,我会通过依赖注入。

而那就是它。他们如何使用可用here。它基本上使用CommonReadDao,CommonWriteDao来读写HBase的数据。常见的读取dao实现多线程行对查询进行对象转换,多线程通过ID获取,通过ID获取并且具有像Hibernate Criteria一样的API通过扫描(无可用聚合函数)查询HBase。通用写道实现了与一些附加设施相关的常见写入相关代码,例如乐观/悲观锁定,单元覆盖/合并检查实体(非) - 保存,更新,删除等。

此ORM是为我们开发的内部的目的和我一直在我的脖子,因此还不能做一些文件。但如果你有兴趣让我知道,我优先考虑文件。

2

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

也许值得一提的

  • 我们用Hadoop map/reduce大量使用它
  • 它有额外的模块可以让你从JSON流中抽取HBase数据 (在我们的情况下,它来源于Python代码)