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

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

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

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

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

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

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

  1. db4o种纯对象数据库引擎

    db4o是一种纯对象数据库,相对于传统的关系数据库+ORM,db4o具有以下好处:1)以存对象的方式存取数据(废话--,不过你考虑一下完全以对象的方式去考虑数据的存取对传统的数据库设计思维来说是多么大 ...

  2. STSDB、NDataBase 对象数据库在不同.net framework下无法读取的解决办法

    STSDB.NDataBase 等对象数据库将对象保存在文件中后,如果在不同的windows平台.不同的.net frameWork下总是无法读取,原因是对象模式已经不同了. 解决的办法也很简单,就是 ...

  3. C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点

    C++ 语言中的重载.内联.缺省参数.隐式转换等机制展现了很多优点,但是这些 优点的背后都隐藏着一些隐患.正如人们的饮食,少食和暴食都不可取,应当恰到好处. 我们要辨证地看待 C++的新机制,应该恰如 ...

  4. post 相比get 有很多优点,为什么现在的HTTP通信中大多数请求还是使用get?

    好吧, 除了哲学方式的回答以外,下面是一个浏览器从业人员的看法 事实上GET 和 POST 在实践上面有非常大的区别,这两种方法在语义上面并非能互相取代. POST 是否比 GET 安全 是的, PO ...

  5. “拒绝了对对象数据库的 EXECUTE 权限”之解决

    “拒绝了对对象'aspnet_CheckSchemaVersion'的 EXECUTE 权限”之解决 [错误状态] “/XXX”应用程序中的服务器错误. ----------------------- ...

  6. 拒绝了对对象 '***' (数据库 'BestSoftDB_P',架构 'sale')的 EXECUTE 权限。

    问题描述: 给普通用户授予读写权限,之后研发反映查询语句报错: nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: ...

  7. 拒绝了对对象 '**' (数据库 'db',架构 'dbo')的 SELECT 权限

    操作次数据库的用户的权限不够,因此只需要赋予相应的权限即可 MSSQL2005:具体数据库(xxx) --- 安全性---- 架构---- dbo(属性)--- 权限--- 添加--- 浏览-- [p ...

  8. sql2008拒绝了对对象 (数据库 ,架构'dbo')的SELECT权限

    连接sql2008的时候,出现了这种一直报权限错误:错误截图如下: 所见效果描述:在windows身份验证的 情况下登陆进去数据库的表都是可以打开的,当换到sa或者别的账号登陆进去的时候这个时候我们点 ...

  9. BIN文件对象数据库,直接存储对象做数据库,小型项目用它准没错

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

随机推荐

  1. 多线程之继承Thread类及多线程内存分析

    *创建多线程的一种方式:继承Thread类 * java.lang.Thread是描述多线程的类,要实现多线程程序,一种方式就是继承Thread类 * 1.创建一个类Mythread让其extends ...

  2. stars-one的原创工具——星之小说下载器(JavaFx应用 )

    星之小说下载器Kotlin版 基于星之小说下载器Java版重构的Kotlin版本 github地址 使用说明 确保电脑有jdk8+以上的环境,双击即可运行(win10系统),win7则需要输入命令ja ...

  3. WebService简单使用教程

    根据说明书获取信息 代码示例: import com.gyf.weather.ws.ArrayOfString; import com.gyf.weather.ws.WeatherWS; import ...

  4. framebuffer测试程序

    /* framebuffer简单测试程序 网上转载 很多次 的程序 :-) */ #include <stdio.h> #include <stdlib.h> #include ...

  5. QWidget 设置背景图片

    QWidget 设置背景图片办法: 利用 QPaltette QPixmap pixmap("back.png"); QPalette palette; palette.setBr ...

  6. windows server :远程桌面服务当前正忙,因此无法完成您尝试执行的任务

    原因是:Csrss.exe 进程和某些应用程序 (例如,Microsoft Excel 或 Microsoft Visio) 之间发生的死锁情况下会出现此问题. 解决:下载一个修复补丁,安装后重启服务 ...

  7. Codeforces Round #575 (Div. 3) E. Connected Component on a Chessboard(思维,构造)

    E. Connected Component on a Chessboard time limit per test2 seconds memory limit per test256 megabyt ...

  8. PHP中替换换行符的几种方法

    PHP中替换换行的几种方法 参考脚本之家的文章:<PHP中替换换行符的几种方法小结>. 代码: 方法一: $replace_str = str_replace(array("\r ...

  9. java高并发核心要点|系列1|开篇

    在java高并发编程,有几个很重要的内容: 1.CAS算法 2.CPU重排序 3.缓存行伪共享 我们先来说说高并发世界中的主要关键问题是什么? 是数据共享. 因为多线程之间要共享数据,就会遇到各种问题 ...

  10. DECLARE_GLOBAL_DATA_PTR

    DECLARE_GLOBAL_DATA_PTR在arch/arm/include/asm/global_data.h中定义 #include <asm-generic/global_data.h ...