在Java中存储和检索对象而不使用关系数据库的简单方法?

在Java中存储和检索对象而不使用关系数据库的简单方法?,java,persistence,relational,Java,Persistence,Relational,您知道一种在Java中存储和检索对象的“简单”方法吗,而无需使用Hibernate之类的关系数据库/ORM 注意到,我不考虑序列化,因为它不允许在对象图的中间检索任意对象。我也不考虑它的限制性许可证的d4O。谢谢。 “简单”的意思是:不必处理诸如键/值对之类的低级细节来重建对象图(如BerkeleyDB或传统缓存)。这同样适用于从面向文档或列的数据库(CouchDB、HBase等等,甚至Lucene)重建对象 也许有一些有趣的项目提供了所提到的存储系统和对象模型之间的集成层(就像ORM用于RDB

您知道一种在Java中存储和检索对象的“简单”方法吗,而无需使用Hibernate之类的关系数据库/ORM

注意到,我不考虑序列化,因为它不允许在对象图的中间检索任意对象。我也不考虑它的限制性许可证的d4O。谢谢。 “简单”的意思是:不必处理诸如键/值对之类的低级细节来重建对象图(如BerkeleyDB或传统缓存)。这同样适用于从面向文档或列的数据库(CouchDB、HBase等等,甚至Lucene)重建对象

也许有一些有趣的项目提供了所提到的存储系统和对象模型之间的集成层(就像ORM用于RDBMS一样),但我并不知道

有人在生产中成功地使用了这些数据库,或者尝试了关系数据库以外的持久性策略吗?RDF商店怎么样

更新:我看到一篇非常有趣的文章:

  • (也称为将内容存储到文件中)
  • (使用关系数据库,但对开发人员来说相当透明)
我建议使用Hibernate,因为它可以处理大多数让开发人员在使用数据库时陷入困境的丑陋细节,同时还可以考虑多年来对数据库软件进行的优化。

我建议使用Hibernate(或者更通用的映射),比如Matt,但是后端也有一个RDBMS,我不太清楚你说的是什么意思

…不使用关系数据库

了解更多关于应用程序的信息也很有趣,因为OR映射并不总是一个好主意(开发性能与运行时性能)


编辑:我很快就了解了terracotta,关于用该工具替换DBs有一个很好的讨论。仍然是实验性的,但值得一读。

查看关于Prevayler的评论。Prevayler是一个围绕对象序列化的事务包装器——大致上,使用纯java中的对象,并通过java API w/o sql持久化到磁盘,这比编写自己的序列化要简洁一些

注意事项-使用序列化作为持久性机制,在更新类时可能会导致保存的数据无效。即使使用包装器库,您也可能希望自定义序列化/反序列化处理。它还有助于在类中包含serialVersionUID,这样您就可以覆盖JVM关于类何时更新的想法(因此无法重新加载保存的序列化数据)

看起来很有趣。它是根据LGPL授权的,因此没有GLP本身那么严格


查看他们的网站,看看它是否能满足您的需要。

嗯。。。如果没有序列化,没有ORM解决方案,我会回到某种基于XML的实现?如果您只想从对象图中提取一些对象,那么您仍然需要仔细设计它——可能每个对象都有一个不同的文件,其中对象关系由URI引用到另一个文件


我会说这并不“容易”,因为我总是发现设计XML到对象的映射有点费时,但我真的受到了ApacheBetwixt上一次对话的启发,这让我觉得自己已经过时了,现在有了更简单的解决方案。

我建议您只需将POJO取出并从中创建XML,就可以将其存储在磁盘上。它非常容易使用,也是开源的。

我仍然认为你应该考虑付费。


如果您还需要其他内容,请在标题中添加“使用MIT风格的许可证”。

Terracotta提供了一个高可用性、高可扩展性的持久到磁盘对象存储。您可以仅将其用于此功能,也可以使用其广泛的功能来实现完全群集的应用程序,这是您的选择

陶土:

  • 不会破坏对象标识,为您提供最自然的编程接口
  • 不需要序列化
  • 集群(并持久化)几乎所有Java类(映射、锁、队列、FutureTask、CyclicBarrier等)
  • 以内存速度将对象持久化到磁盘
  • 仅移动对象增量,提供非常高的性能
使用Terracotta进行内存持久化-无数据库。Gnip接收Facebook、Twitter等网站上的所有事件,并以标准化的方式为消费者制作这些事件。他们当前的解决方案每秒处理超过50000条消息


它是OSS,与许多其他第三方框架(包括Spring和Hibernate)高度集成。

我想我已经找到了我的问题的答案

当您总是从关系、规范化和连接的角度来考虑数据时,获得面向文档的范式思维并非易事

这似乎很合适。它仍然可以充当键值存储,但其强大的查询功能(map/reduce、视图排序)、并发就绪性和语言无关的HTTP访问使它成为我的选择

唯一的问题是必须正确地定义JSON结构并将其映射到对象,但我相信我会想出一个简单的解决方案,用于Java和Scala的关系模型(并且担心以后的缓存,因为争用已经从数据库中移开)。Terracotta仍然有用,但肯定不像RDBMS场景那样有用


谢谢大家的意见。

也许您应该将问题改为“不使用关系数据库、对象序列化或任何GPL许可的产品,用Java轻松存储和检索对象?”。顺便说一句,我也想知道这样一个解决方案。谢谢,但我认为这个标题太长了!我同意。我懂了