对象存储该怎么走?
来源:互联网 发布:php实例化 编辑:程序博客网 时间:2024/05/17 03:36
五年前,当我提到已经面向对象了,不用再设计数据库时,许多人嗤之以鼻。今天,大量的ORM涌现,甚至于JDO2.0与EJB3.0轮番出战。面对如此热闹的场面,我不禁再次提出置疑,这么做对吗?
让我们简单回顾一番历史,重新考察一次数据库到底是做什么用的。也许您认为,数据库就是存储数据的仓库,仅此而已,这也是目前所有ORM技术的根本假设,但这也正是问题所在。传统的关系数据库不仅仅存储数据,而且存储数据处理的过程(包括存储过程及触发器)。也就是说,如果传统关系数据库仅存储数据,那么就不应当称作DBMS,就失去了数据管理的功能。数据库不仅存储数据,还管理数据。而目前的ORM技术把数据库的管理功能丢失了。这会带来问题吗?会,一定会,其中最主要的问题就是性能问题。假设有如下查询:select user from User where user.isBusy(); 在很多ORM产品中都支持这样的基于对象的简便查询。问题是,该查询包括一个对象的方法条件,无论您怎么做,您都只能把所有user对象(不管是否满足条件)全部由数据库端调到处理端,然后再一个个看条件是否满足,处理过程无法在数据库端完成。
那么,是否我们应当重新回到关系数据库时代,答案是否定的。对象方式给我们所带来的好处是显而易见的,没有人愿意重新回去写大量的、复杂的、难以理解的sql或者存储过程。对象是对的,问题没有出现在面向对象方面,那么问题出在什么地方呢?问题恰恰出在关系数据库本身,关系数据库与面向对象是不可调和的,要彻底解决问题,只能建立新的面向对象的数据库,或者说,建立一套持久对象的管理系统。
请注意,我们要建立的是持久对象管理系统(在这里,我舍弃了数据库这一概念,以使问题更加明了),该系统应当具备如下功能:
1. 该系统能不间断工作。当我们需要修改某个持久类时,把类从持久对象管理器中下载下来,修改完后,再上传上去,而不用重启管理器。
2. 所有持久对象都应当在持久对象管理器中存活,而不应再转移到其它地方去,要让这些持久对象工作,只能通过消息方式,该消息方式不应当基于RMI等现行的分布式技术,具体的通讯方式以后再描述。
3. 持久对象管理器所管理的一定是对象,持久对象,而不是数据。这主要表现在这些持久对象自己会有行为,而这些行为是在持久对象管理器端执行的,对象不会被转移到其它地方,再执行行为。这些行为包括写行为,也包括读行为。
以上是几点浅显的看法,虽不系统,但至少没有人云亦云。愿与各位愿意思考,愿意找寻真理,而不是整日跟在别人后面捡拾概念的人共勉。
另外,我用java部分实现了上述想法,目前碰到了一些困难,愿与大家共同探讨。
- 对象存储该怎么走?
- 下一步该怎么走?
- 路该怎么走?
- 我该怎么走?
- 路该怎么走?
- 路该怎么走?
- 下一步该怎么走?
- 下一步该怎么走?
- 牛小新该怎么走
- 下一步,我该怎么走!?
- 汇编之后该怎么走
- 技术路线该怎么走?
- 以后该怎么走啊?
- 该怎么开始,该怎么迷茫,就开始走吧!
- GIS教育这盘棋该怎么走?
- 团队的路该怎么走?
- 未来的道路.该怎么走
- 程序员的路该怎么走
- 十二星座老公挨老婆打的反应
- 一支把我也搞疯了的MV
- WIN2000+PHP+MYSQL+TOMCAT+JSP完全整合安装手册 [转帖]
- 女人必需知道的事
- 数据库中表的move操作
- 对象存储该怎么走?
- ADO封装类的实现
- 今天出差去深圳验货
- 互联网周刊:软件骑士乔伊(ZT)
- 12部单身女人必看的电影(转载)
- TD-SCDMA
- "添加/删除程序"项无法打开解决方法
- 使用DatabaseMetaDate获取数据库信息
- 铁打的营盘流水的兵