1 Berkely DB:开源嵌入式数据库(和应用相同的地址空间,可以显示设置为只内存数据库),支持复制(1master -> 多read only replica),支持hash,btree,record number,queue 4种存储方式,透明支持事务隔离,恢复,多用户锁(如果不需要,还可以禁止锁和日志机制),其完全基于key – value对来管理记录(key value可以是定长或变长字符串,key value也可以直接是任何数据结构,不必转换成DB指定的格式),Berkely DB不是关系数据库!(不通过sql,而是api来访问,不支持索引也不自动维护它们!),不是OO数据库,不是网络数据库,甚至不是数据库服务器(最近开始支持rpc 访问)!
MySQL使用Berkely DB做事务表实现。
主要目的:“fast, reliable, transaction-protected record storage”
有c,c++,等接口
2 Fast DB:开源嵌入式数据库(本地硬盘和内存存储),个人的,支持索引,支持cli和网络访问,但主要也是api访问(使用一种类SQL语句),支持hash和btree索引
3 Oracle Times ten:通过api访问,支持复制,自动ODBC同步等各种功能,但要付费,主要是c++接口(TTClass),另外也可以使用ODBC和JDBC。
最关键的是:Cache Group可以cache远程oracle数据库的部分表,times ten可以透明地和应用一起工作(主要的odbc api接口都可以透明工作)。但使用“Cache Connect to Oracle Cache Administrator”连接到oracle 9i时,9i好像不支持这个特性:(
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 459.75pt; HEIGHT: 240pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/surat/LOCALS~1/Temp/msoclip1/03/clip_image001.png"></imagedata></shape>
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><img alt="" src="https://p-blog.csdn.net/images/p_blog_csdn_net/stephenxu111/timesten1.jpg"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 459.75pt; HEIGHT: 240pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/surat/LOCALS~1/Temp/msoclip1/03/clip_image001.png"></imagedata></shape>
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 459.75pt; HEIGHT: 240pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/surat/LOCALS~1/Temp/msoclip1/03/clip_image001.png"></imagedata></shape>
本地times ten和远端oracle之间有4种cache group:
² 只读(refresh是自动的)
² 同步(flush自动, refresh手动)
² 异步(在两边异步commit,所以效率较高,但可靠性稍低,而且支持在主oracle停机的时候本地提交)
² 用户管理
数据从times ten写到oracle叫flush或propagate,反过来叫load,refresh或autorefresh
另外也可以在times ten创建表和索引视图等,它一般以ODBC的形式提供接口,但直接生成index不允许用hash,只能在生成表的时候使用hash或主键的方式指定,如:
CREATE TABLE Customer
(custID INT NOT NULL PRIMARY KEY,
…
)
UNIQUE HASH ON custID PAGES = 30; /*hash的桶数是30*/
Times ten允许设置为无盘模式运行
RAM policy:In Use第一个连接到来时载入,InUse with RamGrace,always,manual等
永久数据区(表,索引)和临时数据区(锁,游标等)一旦载入就不能改变
总之,应用通过ODBC或TTClass连到times ten(瘦ODBC客户端,通过本地或远程,tcp/ip或共享内存的方式连到times ten服务器),times ten可以通过ODBC连到Oracle 10g,在windows平台,可以通过ODBC连到第三方ODBC管理器 (使用TTClass取代OLE DB/ADO之类的第三方中间件),times ten服务器是自动启动的独立过程(数据管理系统服务,开放一个1rr02的端口用于连接),应用程序->client dsn->server dsn
² 直接连接(最快,内存级,使用共享库连接,windows上是tten60.lib)
² 驱动管理器连接(windows上用系统的odbc32.lib库,这时其实可以连第三方ODBC)
² 非直接连接(c/s模式,主要用于应用驻留在与times ten data store不同的主机上,最慢,windows上用ttcl60.lib)
同时,生成TTClass(带源码,可以自己编译这个库)时也可以指定生成上面3种中的哪一种TTClass库
TTClass是ODBC的c++封装,用于高性能的应用
支持连接池技术(TTConnectionPool,用于多线程应用),应用日志功能(TTGlobal),预准备带参SQL语句(TTCmd,还负责其他具体的sql语句执行包括带和不带结果集的),ODBC连接器(TTConnection),错误报告(TTStatus),TTCatolog用来管理表﹑列和索引(只能读配置数据)
可用XLA实现表改变的通知功能(比如有客户端插入了数据到下载配置表)
TptbmAS证明了Timesten部署在应用服务器里面的可能性。
4 apache derby
Java实现的嵌入式数据库(就象eclipse,是由IBM捐献给开源社区),可以用来伴随J2EE使用
5 ExtremeDB
商业实时嵌入数据库,可以全内存操作,可以远程同步oracle,不提供源码