|
1.革命性的数据存储方式
内存非文件格式。这个过程是内存数据库技术含量最大的部分。
设想一下,在内存里建立隐含内存盘再把磁盘数据库搬到上面,是不是很容易?但这种方法的缺点也是很明显的:快的有限、数据存储占用更多的内存、文件IO导致的系统晃动及不稳定性等等...而这正是今天很多号称“内存数据库”的实现方法。
内存很快,给所有人的感觉都是内存很快。但这种感觉是从何而来的?是从我们往内存某个单元写数来的,比如做x=1可能只要几个机器周期。如果不是直接对x赋值,而是把x=1写到内存盘的某个文件上,比如x.dat上加一行x=1,这个速度快不快呢?还是快,但比直接赋值要慢的很多了。
x=1直接赋值的时候,在内存里面就是占用1个字节(最少情形)~8个字节(最多情形);在x.dat文件里面加一行"x=1"情况如何呢?为什么磁盘数据库可以压缩?就是因为文件表格里面有很多空隙。
文件系统在计算机的各个部件中属于最不可靠的部分。您是否遇到过这种情形:磁盘还是好的,里面的文件却崩溃了?
所以说内存盘数据库的技术含量有限。
不走内存盘,那路就比较难了。不过结果证明也是值得的。这个方法就是内存管理的时候借鉴实时操作系统的内存管理技术,通过非文件化管理。这就是eXtremeDB的数据存储方法了。为什么说它是革命性的?可以用对比评测来感受。
2.革命性的访问方式
您看到很多“内存数据库”的访问模式和SQL Server没有区别,就是通过一个服务器程序访问数据源、用户程序通过进程间通信间接访问数据源。这个模式在实现上也很简单。
可是,它占用了太多的CPU资源;而且,进程间通信晃动性也太大了;在实时操作系统上,进程间通信还会造成优先级翻转。
因此,如果一种内存数据库是以管理强实时数据为目标的,进程间通信就是不可接受的。
不基于进程间通信怎么办?就是eXtremeDB的内核嵌入模式了。每个进程(就是每个程序 )直接访问数据源。每个程序都直接访问数据源缩短了代码执行路径、使得系统确定性高了,是其优点;但N个进程同时访问数据源的时候,是不是有冲突?这就是eXtremeDB内核的功能之一了。
之中内核嵌入的访问方式是不是革命的?
当然,eXtremeDB也支持进程间通信(就是本地IPC模式)、远程访问(如eXtremeDB RPC Connector或eXtremeDB rSQL Connector了)这些“不革命”的模式了。
3.全面、灵活、开放的索引方式
我没有看到那种数据库能象eXtremeDB这样支持索引:
全面--不管是B-Tree、Hash、通常数据库采用的List索引,还是P-Tree、R-Tree、OID、AutoID...甚至用户自定义索引算法,eXtremeDB都可以支持
灵活--在eXtremeDB定义文件里标注出来,内核就自动帮您维护索引,比如
uniq tree <字段1, 字段2...> tk12;
内核就自动维护这个索引
4.革命性的接口方式
eXtremeDB的接口API虽然非常直观,却是由用户数据库定义通过预编译器产生出来的。其它内存数据库不可避免地要进行动态内存分配和回收。在快实时数据管理的时候,这个过程产生内存碎片的速度可以很快,使得系统变慢甚至崩溃...通过这种定制的API,eXtremeDB不仅变快了,更重要的是它避免内存碎片的问题,系统变稳定了、强壮了。
这是不是革命性的?
是啊,eXtremeDB与其它“内存数据库”相比,走了更多的弯路、吃了很多别人没有吃的苦。也正是如此,使得eXtremeDB更快、更小、更稳、更壮!
所以才说数据库技术要是有什么可以被称为“传奇”的话,一是E.F.Codd的SQL技术、而是eXtremeDB的内存数据库技术。 |
|