|
原帖由 taps122 于 2008-6-20 11:03 发表 ![]()
内存数据库?将数据库加载到内存中?俺有几个问题:
1、数据终究要保持在 DISK 上,实时状态下,每个微妙刻度都在接收数据,什么时候将内存数据会写或更新到磁盘上?
内存数据库里保持的数据和磁盘数据库里保存的数据是不一样的。以电信计费为例:内存数据库中保存的是‘谁、什么时候、拨号、给谁’一类实时数据,而磁盘数据库不会记录拨号过程的。因此,内存数据库中的数据量远远大于磁盘数据库中的数据量;同时,内存数据库中大多数数据属于短周期数据,时效性很强,没有往磁盘写的必要。这一点其实是内存数据库产生的场景根源之一。另外,有些实时数据是没有保存到磁盘上的必要性的,比如路由表、IP机顶盒的节目单、预警飞机的敌方坐标信息,都是开机自学习的。
2、E.F Cod 博士的论文,确实奠定了关系型数据库的基础。但内存数据库对数据库理论的贡献真的很大?
随着大容量内存价格的不断下降及64位机器的普及,内存数据库的应用将会越来越广。在可以预见的不久将来,一个64位机器上配置64G内存是很常见的,在这样的内存里建立32G的内存数据库对很多应用也大有意义。即使是个人系统,比如电游,使用内存数据库保存实时数据将大大提升游戏的现场感。因此,今后内存数据库和磁盘数据库的区分将不再是数据库的大小,而是反应的快慢。E.F.Codd改进了访问的方式;eXtremeDB改进了存储的方式。这两点都是数据库技术的最基本点。因此,把eXtremeDB的存储技术和E.F.Cod的论文相提并论至少不是唐突的。
3、衡量数据库性能的指标中有个关键指标:查询时间,实时数据库只有简单的表:节点表和数据表,处于活跃状态的中有数据表,这种状态下,实时数据库事实上不能称为数据库,而更接近清单( List ),达到微妙级甚至纳秒级的查询时间不足为奇,因为这依赖于硬件的速度。
您这里的‘节点表’、‘数据表’的概念可能是某种内存数据库的,在eXtremeDB上这两个概念不直接呈现出来。呈现给用户的是可以直接定义字段、索引、事件、历史特征的表格。这些表格在vision上与磁盘表的表格是相同的,本身甚至可以比磁盘表更加复杂-因为磁盘表通常以表格类数据为主,eXtremeDB的数据可以是结构、内嵌表等非表格类数据。因此,从用户的角度比List要复杂得多了;从系统内在的角度,更像一个RTOS的内存管理。
eXtremeDB可以达到微秒一级,不是简单的查询,还包括插入、更新、删除类型的事务。您可以参考eXtremeDB在VxWorks/x86平台上的测试报告,这个测试报告里面有数据库的定义、硬件的环境、软件的环境。尤其要强调的是,“微秒级”不是指查询操作速度,是指对查询、添加、更新、删除进行事务化、在多任务连接并发条件下的数据库速度。
您这里的观点把查询速度作为数据库性能指标的关键,我总体上是同意的。您的这个观点点出了内存数据库的本质。我的看法也是内存数据库的目的是查询、磁盘数据库的目的是保存。我上面的说法是解释我的看法并进一步阐述您的观点。但作为自成一体的数据管理系统,插入、删除、更新、查询四者是相互联系的。
在细节上,我个人认为个别查询操作的平均速度能够达到微秒一下;以事务化的查询交易,达到微秒以下速度不容易。一个事务框架要调用OS基本服务,不然就要自己构建。信号、互斥、信号灯的速度在实时操作系统上是有指标的,通常都是微秒一级。要想比微秒更快,办法就是一次查询一万条或十万条、百万条,这个就是查询操作的速度而不是数据库的速度了。
-----------------------------------------------------------------------------------------------------------------------------------------
仅仅平和讨论而已。
欢迎您的讨论,不正确的地方请您赐教。 |
|