软件的两种存取方式的区别和优劣

ZeusStar 2002-12-19 08:00:10


在两年多的软件开发中,我多次遇到一个问题,也就是软件内部的数据存取管理。
一种方式是数据实时到数据库中存取,另一种是先读取到内存中,然后通过用户的特定操作保存到数据库

或者硬盘中。
我参加开发的软件都是Mis系统,以前设计的软件都是直接对数据库操作,也就是对一个对象进行新增、修

改、删除操作都是直接对数据库操作:

图一


一年前我开发的软件这三个操作还是用SQL语句直接完成的,这样很不容易管理。现在我开发的软件都是用

面向对象的方式设计的。新增、修改、删除(AED)操作都已经封装成了类的一个方法。但是在操作低层,仍然是

用SQL语句完成的操作。也就是说,仍然是频繁读取数据库。
这样做有几个好处:
1。内存中的数据是和数据库中的同步的,这样掉电对系统的影响就很小
2。内存中的数据是和数据库中的同步的,这一点对C/S系统很重要,保证了多个工作站协同操作的正确性。
缺点:
1。读取数据库频繁,硬盘负荷大
2。大数据查找遍历都是依靠数据库的SQL来完成,虽然效率高,但是Sql复杂时(这种情况很多,通常的报

表都涉及数个表,复杂一点的sql都有几十行sql语句),开发和维护这样的sql语句都是一件非常痛苦的事情。

而且没有办法面向对象话,如果要面向对象化,那么就会出现用n条sql语句来换取对象化的情况,象下面的报

表:

图二

有开发经验的软件工程师都知道,只要数据库设计合理,上面的结果用一条简单的sql语句就可以得到。但

如果第2列不是交易数量,而是交易成本,而且交易成本的计算是一个很复杂的表达式,那么你也许更情愿将其

对象化,将成本计算写进代码,而不是放进sql中去搅。这样当你计算公式改变时,你就不用更新n处的sql了。
考虑到以上情况,我考虑将系统中的所有数据都放到内存中进行处理。大家看Word,Excel这些国外知名公

司的产品也是如此。
当打开Word时,进行任何操作,只要你不保存,中间结果都没有更新到硬盘上。包括Word程序本身的一些

设置。如果非法关闭,也无法保存。这么说来微软在处理时也将文档对象化,放到了内存中去处理,这样做很

有好处:
程序语言的处理非常丰富,可以充分运用算法和结构,获得更好的速度和运算效率。(这里要说到一个事

实,就是我从事了两年的在一个MIS系统开发,从来没有在一个产品中遇到用代码处理排序、查找算法的情况,

不是因为没有使用排序和查找,而是用SQL代替了)再就是数据都在都在内存中,操作方便,速度也很快。更为

重要的是,限制使用Sql,完全对象化后的程序可以很方便的调试、跟踪和错误处理。精简了环节后,程序的运

行稳定性也要高得多。

修改后的模型是这样的:



图3


有一个代价,就是全部放入内存的程序内存开销肯定高。我们经常埋怨微软的东西占用很多内存,可能就是

这个原因。我相信这个代价是值得的,因为这样的软件运行效率更高,更加稳定(这儿的稳定不仅是内存操作

比硬盘稳定,更重要的是模块化的东西经过了更严格的单元测试和系统测试)。

所以我提出一个问题,程序开发是否原则上应该把数据对象化并放入内存,程序大部分应该是业务的处理而

不是存取数据库。
这个问题看起来小,但是对程序的运行效果和表现形式都有很大区别,我所读过的书也没有提到这个问题,

希望大家能够一起探讨,真正把自己软件的性能提上去。


彭刚 pen_gun@yeah.net
...全文
73 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeck_zhou 2002-12-24
  • 打赏
  • 举报
回复
我也要全文包括图~
信箱:jekyll_zhou@yahoo.com.cn
maohaisheng 2002-12-23
  • 打赏
  • 举报
回复
me too, selab_2000@163.net
wireman 2002-12-23
  • 打赏
  • 举报
回复
还有我,wireman@sina.com,可以一起讨论的。
Ivasons 2002-12-23
  • 打赏
  • 举报
回复
me too, qiezis@yahoo.com.cn
liuty2006 2002-12-23
  • 打赏
  • 举报
回复
很感兴趣.
但看不到图,能否将完整文档发给我.


liuty2006@sina.com
yyy1020 2002-12-23
  • 打赏
  • 举报
回复
以下软件可供参考:
http://www.csdn.net/cnshare/soft/15/15185.shtm
goodpiano 2002-12-23
  • 打赏
  • 举报
回复
很有意思,不过我以前都采用第1种方式。现在不作mis 系统了,不能给什么实质的建议,不过很多系统某些方面还是要求相当的实时性的,不太好处理
mycreatedream 2002-12-23
  • 打赏
  • 举报
回复
我也很感兴趣.但看不到图,能否将完整文档发给我.希望能与你讨论。
mycreatedream@etang.com
dimcat 2002-12-23
  • 打赏
  • 举报
回复
我也要全文包括图~
信箱:dimcat@sohu.com
heaven_999999 2002-12-23
  • 打赏
  • 举报
回复
让我想起内存的调换机制,对于数据库数据的调换
heaven_999999 2002-12-23
  • 打赏
  • 举报
回复
我也要全文包括图~
信箱:sxp_999999@163.com

我做过一个MS系统,也是用对象,把数据先放在对象里~
这样查询后第二次显示比较快。

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧