javazone
发贴: 5
积分: 0
|
于 2006-09-28 13:14
转贴:有关内存数据库与嵌入式数据库的概念?
这里的高人有谁玩过eXtremeDB这个实时的嵌入式的内存数据库?有空研究一下这个吧:http://www.leadingtek.com.cn . 有关eXtremeDB: eXtremeDB在管理实时数据的时候,有这样的优点: .功能特别全。 eXtremeDB将数据保存在内存中,在内存中建立数据结构,在数据结构上提供数据库API,这些API提供了通常只有在企业数据库上才有的各种数据管理功能,如表结构、交易管理、HASH索引、树索引、OID、Autoid、引用、历史版本、事件触发等。在eXtremeDB的表中,不仅可以支持通常的简单数据,而且可以支持结构和矢量等等复杂数据。这对诸如机顶盒等应用领域而言,特别有利。 .性能特别高。 由于数据是保存在内存中,因此,每次插入、检索、更新数据的操作都非常快。通常,在400MHz的处理器上一个交易的时间只有1~2微秒。这要比静态数据管理或常规数据库的性能要高很多。 .硬件要求特别低。 eXtremeDB在使用的时候,基本开销只有50K~100K尺寸;管理数据的效率高达70%~80%。相比而言,Oracle等商业数据库或我们自己编写的数据管理软件,效率在10%~20%左右。以我们为Genesis Microchip做的参考设计而言,管理152K个节目信息,包括标题索引、内容索引等诸多功能的数据库,占用内存的尺寸在8~9M左右。在我们的EPG参考设计中,如果用400MHz的处理器,检索一个节目的时间机会感觉不到。 .开发非常方便 eXtremeDB的数据库系统以C/C++的Library的形式提供给用户,与用户的程序无缝集成在一个运行程序之中。开发过程流畅,使用非常方便。
我最先接触到的内存数据库好像是zope里面的gadfly(是不是这样叫的忘记了)吧,不过没有太多的接触,只是学习zope的时候有过简单的接触。这里我也说不出什么。主要讲讲我在公司的业务开发中使用的内存数据库知识吧。 我们公司是做电信的业务开发的,目前的智能网业务主要是基于国内的XX公司的平台上进行。因为客户全部是国外的,所以开发相对严格一些。我们业务的主要功能就是接管交换机的呼叫后,处理这个呼叫的业务逻辑,包括鉴权,实现用户需要的功能。这些功能是和数据库离不开的,但是针对每个呼叫,所要求的效率也是要很高的,不然客户无法忍受投诉就是我们的问题了。 在我们的业务中,数据库最少有这么几个表:业务基本表,业务级系统参数配置表,费率表,相关日志表,功能键对照表等。呼叫接进来之后,系统需要先初始化,这时候就要提取系统配置表中的数据。这个表我们一般的情况下就只有一条记录,所以这个表一般都是内存表。而业务基本表存放的是用户帐户之类的数据,记录通常会在1000万以上,是绝对不能使用内存数据库的。费率表会根据各种币种设置相应的功能费率,记录也会在1000以下,所以也是内存表,还有一个内存表就是功能键对照表了,这个对照表是根据用户输入的功能键(譬如:用户在话机上输入11,则系统会认为是查询余额)转变为业务去处理相应的功能。这个记录数也会在100以下,所以也是内存表。 在论坛中,我提到,一般只读的数据才会做成内存表,不过那是我们平台对我们的建议。因为我们的平台对可写的内存表算法处理的不是很好,效率比较低,不适合使用。当然了,我们现在的内存数据库,如果想修改内存表中的数据,那在每次修改完了之后都要重启平台,好让业务重新初始化内存数据库中的数据。不过以前的平台是支持动态刷新的,不过现在不让这么做了,说是不稳定。还有,内存数据库由于是我们自己实现的,因此不支持存储过程。所有的内存数据库的操作都需要自己手动的操作。 使用内存数据库,最明显的是在性能测试的时候,操作数据库的时间基本可以忽略不计,这个对于电信应用来说是很大的优势。不过使用内存数据库的话,修改其中的数据不是很方便,而且还会暂用大量的内存。具体如何使用,还是看使用者自己的权衡了。有条件的最好在自己使用的时候测试一下先,综合考虑各种影响因子。
|