透明持久性允许您使用常规对象而不是数据库。这些对象会自动从磁盘读取或写入磁盘。这种系统的例子是Gemstone和Rucksack(用于普通的lisp)。实现透明持久性
他们所做的简化版本:如果您访问foo.bar
并且bar不在内存中,则会从磁盘加载。如果您执行foo.bar = baz
则foo
对象在磁盘上得到更新。大多数系统还具有某种形式的交易,并且可能支持跨程序甚至跨网络共享对象。
我的问题是实施这些类型的系统有哪些不同的技术,以及这些实现方法之间的权衡是什么?
透明持久性允许您使用常规对象而不是数据库。这些对象会自动从磁盘读取或写入磁盘。这种系统的例子是Gemstone和Rucksack(用于普通的lisp)。实现透明持久性
他们所做的简化版本:如果您访问foo.bar
并且bar不在内存中,则会从磁盘加载。如果您执行foo.bar = baz
则foo
对象在磁盘上得到更新。大多数系统还具有某种形式的交易,并且可能支持跨程序甚至跨网络共享对象。
我的问题是实施这些类型的系统有哪些不同的技术,以及这些实现方法之间的权衡是什么?
我已经在几个项目上使用了这样一个系统(ObjectStore),最显着的是商业信用风险系统和一个用于优化石油管道网络流量的系统。有关执行的问题太复杂,在这里讨论,但是对于这样的系统和关系数据库之间进行权衡:
对象DB优点:
非常非常快的 - 某些查询也可以是100比关系数据库快1000倍。实际上,我设计的风险系统不能(根据Sybase自己)在SQL数据库上实施。
非常容易与C++代码集成 - 不需要阻抗匹配图层。
数量有限的面包和奶油的CRUD应用
关系优势GUI库:
即席查询非常非常容易和比对对象的DB更快。
约一百万的工具来管理数据库
很容易地创建GUI应用程序
很多人都有RDBMS经验
但当然,与所有的工具,你不必选择一个。我从Sybase数据库写入导入数据的风险应用程序,以及Oracle的管道。
感谢您的回答。考虑到折衷,我打算在实现透明持久性的不同方法之间进行权衡,但是对象db和关系数据库之间的权衡也很有趣。 100-1000x是相当快的速度! – Jules 2010-06-14 20:52:48