最近在了解TIMESTEN 销售技术人员介绍的时候都讲它的好处,但是我想知道它的短处,大家都说说看,这东西是不是真的那么好! 目前我只知道它不支持存储过程
解决方案 »
- OCCI查询时getstring不能获取长字符串
- 请问这段代码错在哪?程序提示错误
- 请教oracle高手,OCI初始化时出错
- 求这个SQL怎么写?
- oracle sqlldr 出现达到提交点 - 逻辑记录计数 86
- update dept set dname=dname+'xxxxxxxxx' where deptno=10;
- 请问各位:字段属性由char(10)转为varchar2(10)如何将原来记录中的空格去掉?
- 请问如何把一台电脑上建的数据库拷贝到其他电脑的数据库中?
- 在ORACLE9i中怎么让一张表中的id号自加呢?
- 如何把一个文件插入到一个clob字段中?
- trailing null missing from STR bind value
- SQL%NOTFOUND是什么?是ORACLE的全局变量吗?
另外,多数由传统的、基于磁盘优化的RDBMS完成的工作都是基于数据主要是存在磁盘上的。优化算法、缓冲池管理和索引提取技术都是基于这种假定来设计的。
即使RDBMS配置成数据库所有的数据都装载到内存中,性能也会被这种假定与RDBMS的处理逻辑、索引模式、数据存取机制相辅相成已经经历了数十年的研究和发展,是不可能轻易被改变的。
另一方面,TIMESTEN是在确认数据驻留在内存的前提下设计的,因此可以更直接的访问到数据降低了查找数据的代码长度和简化了算法和数据结构。
当数据驻留在磁盘的假设不存在时,数据访问和操作的复杂度降低了。机器指令的数量降低了至少10%,缓冲池的管理和额外的数据复制都不再需要,数据结构也简化了。当数据是驻留在内存中成为一种假定时,设计更加简单、简洁和紧凑。
查询优化
基于磁盘的文件数据库的查询优化的算法和基于内存的内存数据库的算法是不同的。RDBMS优化算法的策略都是基于数据主要驻留在磁盘上的情况。在动态运行环境中,数据在一个具体时刻有可能是在磁盘上也有可能是缓存在内存中的,但是算法的实现必须考虑到最坏的情况即数据全部驻留在磁盘中。算法主要消除磁盘读写造成的性能瓶颈。在这种假设的情况下设计出的优化器对数据主要驻留在内存中的TIMESTEN是没有作用的。
另一方面,内存数据库技术在设计查询优化器时只需要考虑数据驻留在内存中的情况。因为不需要考虑数据驻留在磁盘上的最坏的情况,查询优化器的实现要简单很多而且要准确。
缓冲池管理
在传统数据库管理系统中,为了管理缓存在内存中的数据必须要维护缓冲池。当SQL查询分析器需要磁盘上的一页数据时时,数据存取方法要首先在缓冲池中查询该数据。即使数据在缓冲池中查询到,在很多情况下这些数据都需要被复制到缓冲池外面以便后面的处理。缓冲池的维护和管理以及额外的数据的复制都加重了访问到应用程序所需数据的负担。尽管缓冲池的维护和管理在基于磁盘的数据管理方案中是必需的但是在基于内存的情况下就不是必需的了。TIMESTEN是没有缓冲池的。数据全部驻留在内存中所以就不再需要缓冲池了。正因为如此,访问数据的代码长度减少了、复制避免了、算法简化了和数据传递给应用程序的速度变快。
另外,没有一个RDBMS产品是动态转变这种基于磁盘的假定的。数据驻留磁盘的假设和其他系统代码联系太紧密了没有办法简单的通过if_then_else语句重新塑造它们。
索引结构
B+-Trees在典型的RDBMS‘B+- tree索引页中,关键值和数据指针都是存在B+树节点中的。一个B+树节点中(相当于磁盘上的页)由很多个B+树条目组成,每个条目中维护着索引数据值和下一个合适的索引节点的页码或包含搜索数据的磁盘分区的页码。这是一个非常平滑、宽广的树-可以有效降低磁盘读写操作。B+ tree结构降低了完成一个数据文件的索引查询所需要的磁盘读写操作的数量。B+ tree实现这个是通过(1)将关键值存储在自身节点中(降低磁盘读写操作)(2)在一个节点中存储尽可能多的索引条目(增加为一次单独的读写操作服务的B+树的条目)。
在数据和索引文件存储在磁盘上的情况下。这个结构确实能降低磁盘读写操作。但是在数据存储在内存的情况下,这个结构对提升系统性能就没有作用了。在数据主要存储在内存的情况下,索引模式设计的目标就变成降低CPU循环而不是I/O。在B+ tree结构里,CPU循环耗费在管理用来存储从磁盘读入到内存中的数据和索引的缓冲区上了。
T-tree可以优化内存的访问。T-tree节点间的连接是通过简单的less-than-or-equal-to和greater-than指针实现的。这些指针引用的是内存位置而不是磁盘上的页码。只需要比较两次,T- tree搜索算法就能确定要搜索的数据是在当前的节点还是在其他地方。
在内存数据管理中,算法实现的主要目的是降低空间要求、减少磁盘读写和缩短算法实现的代码长度。T-tree树的节点不需要存储索引的值而只存储指向内存中存在的一行数据的指针,降低了对内存空间的要求;T-tree索引结构完全是驻留在内存中所以根本不存在磁盘读写的问题;T-tree搜索算法的实现非常简单,缩短了代码长度和复杂度。