db4o这个对象数据库有很多优点,但为什么不是很火? 大家有没有用过db4o的?

Posted 天王星天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了db4o这个对象数据库有很多优点,但为什么不是很火? 大家有没有用过db4o的?相关的知识,希望对你有一定的参考价值。

  1. 没有主键的概念(因为对象的内存地址,或者引用就能标志一个对象了).因而外界想指向一个具体的对象就比较困难(比如本页的url里的1079505).

  2. 激活/保存层次的问题.获取一个对象,它的字段引用了其它对象,那么到底激活多少层次合适?保存时也是如此.层次深了伤性能,层次浅了用着不方便(动不动就是Null reference).

  3. 对象引用问题.RDBMS里我们能很轻易地明白一个引用指向的是对象的浅拷贝(因为只引用了一个主键).而一旦与内存中的对象勾搭起来,那深拷贝和浅拷贝就不容易区分了,很难说清我删除了一个对象会不会让某个其它对象的某个字段变成null(同样,修改对象也不容易看清其影响范围).

  4. 对象生存期问题.这是个看起来很奇怪甚至愚蠢的问题:没有被其它对象引用的对象是否应该存在于数据库中?换句话说,ODBMS要不要拥有GC功能?如果有GC功能的话,能够避免误删除被其它对象引用的对象,而且能够清除不再需要的数据.但是相应地,它让开发必须考虑更多的问题,保证每个对象的静态可达性.

  5. 数据库版本进化难以跟踪.由于数据库的结构与对象的结构基本一致,对对象模型的任何修改都会导致数据库结构的变化,而这个过程中原有数据如何处理必须加以特殊处理(Db4O里提供了字段改名之类的api,但是至少我很讨厌每修改一次对象就要写几行这样的代码).换句话说,我觉得数据库和对象之间耦合严重了,不利于修改.

  6. 没有类似Sql的成熟且流行的查询语言(或者你必须学习一种新语言)进行数据管理.很多时候,直接操作数据库也是必须的,这时你会非常想念Sql.

以上是关于db4o这个对象数据库有很多优点,但为什么不是很火? 大家有没有用过db4o的?的主要内容,如果未能解决你的问题,请参考以下文章

DB4O 可扩展性

寻找有关嵌入式 .NET 数据库(例如 db4o、NHibernate 或 RavenDB)的指导

在 db4o 中创建对象时限制子重复项

现在刀片很火,刀片能干嘛?刀片相对于传统的服务器有啥优点?

关于db4o的透明激活与激活声明

远程对象调用