Cache数据库

Cache数据库,第1张

以我三甲医院运行CACHE6年的经历来说,CACHE确实不太适合中国大规模三甲医院使用。数据复杂度高,标准多,更改勤,这是美国医院相对少见的。 医院已经使用CACHE6年多,天天看着这个东西,我相信比那些写q文的人更有发言权。 1. 性能问题:现在不到4000万条记录,1.5T的信息量,CACHE都会速度超慢。查询3个月以上的数据就会死掉。别相信那些CAHCE市场材料宣传的东西。医院系统的复杂性不在绝对记录数量,而在高度的复杂度。 2. 一旦上线,分库困难。数据库越来越膨胀,速度越来越慢,最后小型机用了四年后都不够用了,还得升级小型机。我们医院当年购买ibm小型机可是很快的,可是都赶不上膨胀的速度 3. 死数据。由于OO架构限制,如果对象做了修改,而且又已经有了实例数据,那么这个对象不能进行删除(我是指业务上),时间长了之后,导致垃圾逐渐增多,不少已经定义的实例,导致速度慢,错误多。如果曾经做过OO编程的人,考虑一下定义n多对象并且有两大数据之后,突然要你修改某层对象架构(很多时候还是翻天覆地的变化)的时候,那种感觉和心情。 4. 锁定:Cache的数据库锁机制及其弱智,懒得说。好在医院的数据多是增加,很少有删除的情况,要不早出现很多乱子了。问了几家大型his公司总工级别的人物,对于锁都答非所问。让人心寒。 5. 基于OO的数据库并不成熟。在我多年使用中,感觉不如 RDB + XML的混合方式解决方便。OO非常适合抽象,但是如果这个对象经常都在改,那简直就是生不如死了。有人会说,对象会经常改吗?——那到医院来看看吧。随着医疗信息化的深入,需要改的地方只会增多,不会减少。我们从基于cache信息化厂商那里得到的“不能”已经越来越多了。 6. 资料匮乏:使用的人少,资料奇缺,人材很少。自带的CSP界面极差,功能很弱。编程语言晦涩难看,一点都不优雅(这点是个人意见),上网能找到的文章都是q文,我从来没有在中文网上找到什么非常深入的cache数据库分析文章;公司实力有限(相对于ms,oracle),一个CSP溢出漏洞都要改半天。没有大量的人使用,金子也会变成垃圾。 7. 不知道那些q文里边写的安全性很高是什么意思?我看了半天DOD TCSEC的档案,抱歉,没有发现CACHE的影子 8. 数据迁移问题。现在很多系统,基于RDBMS的,例如oracle、ms sql server 都很容易切换,但是如果转入cache,就像上了贼船,上去容易,下来难了。想后悔都没有机会。不是说绝对不能转换出来,而是很多困难。你没有失败的backup. 9.互联问题。现在健康档案互联,区域医疗信息化等,都是时代发展需要。懂行的人自己考虑一下其中难度,不懂行的人说了也是白说。

Oracle数据库,实际上应该是说,我们使用的是Oracle服务server。

Oracle服务server包括有两个部分:

一个部分是Oracle数据库database

一个部分是数据库实例instance。

Oracle数据库database,包括有数据文件、控制文件、重做日志文件,都是一些物理上的文件。

数据库实例instance,包括有数据库后台进程(PMON、SMON、DBWR、LGWR、CKPT等)和内存区域SGA(包括shared pool、db buffer cache、redo log buffer等)。实例是一系列复杂的内存结构和 *** 作系统进程

严格的说:一个Oracle服务,只包括一个Oracle实例和一个数据库(不考虑双机并行等这样的情况)。但是一个实例只能对应一个数据库,一个数据库有可能对应多个实例。除非使用并行O r a c l e服务器选项,否则每个O r a c l e数据库都有一个实例与之相关,一个数据库被唯一的一个实例装载。

数据库与实例之间是1对1/n的关系,在非并行的数据库系统中每个Oracle数据库与一个实例相对应;在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。在任何情况下,每个实例都只可以对应一个数据库。

在实际的开发应用中,关于Oracle数据库,经常听见有人说建立一个数据库,建立一个Instance,启动一个Instance之类的话。 其实问他们什么是数据库,什么是Instance,很可能他们给的答案就是数据库就是Instance,Instance就是数据库啊,没有什么区别。在这里,只能说虽然他们Oracle用了可能有了一定的经验,不过基础的概念还是不太清楚。

什么是数据库,其实很简单,数据库就是存储数据的一种媒介。比如常用的文件就是一种,在Oracle10G中,数据的存储有好几种。第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件中存储信息。第二种就是磁盘阵列形式,这个是什么意思呢,这个就是说明数据库不是存放为某个文件,而是把一个或者多个磁盘格式化成Oracle的一种格式了,等于整个磁盘就是存放Oracle数据库的,不能作为别的用途。这样的优点是存储性能高,因为不再借助别的文件格式了,而是把整个磁盘都成为Oracle最适应的文件系统格式。当然还可能有别的形式,比如网络什么的。不过我们最常用的还是文件格式的,在文件格式中,数据库指的就是那些数据文件,控制文件以及REDO文件等等一系列文件。

而什么是Instance呢,Instance其实就是指的 *** 作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们可以新建一个Oracle的Instance,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问 *** 作。

所以说,数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件中,但是我们无法直接进行 *** 作。而如果只有数据库Instance,那么我们虽然可以急性 *** 作,但是也不知道 *** 作哪些数据, *** 作生成的数据也无法保存等等。所以,当一个Oracle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。

在这里要注意一点的是,Oracle的实例在启动以后,只能load一次数据库,如果想把数据库与Instance断开,然后再重新挂在一个数据库Instance,那么就需要你首先把数据库Instance进程结束,然后重新建立这个instance的一个进程,再load另外一个数据库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个instance。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10035547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存