内存数据库(sqllite)使用介绍

内存数据库(sqllite)使用介绍
内存数据库(sqllite)使用介绍

内存数据库(sqllite)使用介绍

数据库的发展

数据库技术的发展,已经成为先进信息技术的重要组成部分,是现代计算机信息系统和计算机应用系统的基础和核心。数据库技术最初产生于20世纪60年代中期,根据数据模型的发展,可以划分为三个阶段:第一代的网状、层次数据库系统;第二代的关系数据库系统;第三代的以面向对象模型为主要特征的数据库系统。

第一代数据库的代表是1969年IBM公司研制的层次模型的数据库管理系统IMS和70年代美国数据库系统语言协商CODASYL下属数据库任务组DBTG提议的网状模型。层次数据库的数据模型是有根的定向有序树,网状模型对应的是有向图。这两种数据库奠定了现代数据库发展的基础。这两种数据库具有如下共同点:1.支持三级模式(外模式、模式、内模式)。保证数据库系统具有数据与程序的物理独立性和一定的逻辑独立性;

2.用存取路径来表示数据之间的联系;

3.有独立的数据定义语言;

4.导航式的数据操纵语

第二代数据库的主要特征是支持关系数据模型(数据结构、关系操作、数据完整性)。

关系模型具有以下特点:1.关系模型的概念单一,实体和实体之间的连系用关系来表示;

2.以关系数学为基础;

3.数据的物理存储和存取路径对用户不透明;

4.关系数据库语言是

非过程化的。

第三代数据库产生于80年代,随着科学技术的不断进步,各个行业领域对数据库技术提出了更多的需求,关系型数据库已经不能完全满足需求,于是产生了第三代数据库。主要有以下特征:1.支持数据管理、对象管理和知识管理;2.保持和继承了第二代数据库系统的技术;3.对其它系统开放,支持数据库语言标准,支持标准网络协议,有良好的可移植性、可连接性、可扩展性和互操作性等。第三代数据库支持多种数据模型(比如关系模型和面向对象的模型),并和诸多新技术相结合(比如分布处理技术、并行计算技术、人工智能技术、多媒体技术、模糊技术),广泛应用于多个领域(商业管理、GIS、计划统计等),由此也衍生出多种新的数据库技术。

分布式数据库允许用户开发的应用程序把多个物理分开的、通过网络互联的数据库当作一个完整的数据库看待。并行数据库通过cluster 技术把一个大的事务分散到cluster中的多个节点去执行,提高了数据库的吞吐和容错性。多媒体数据库提供了一系列用来存储图像、音频和视频对象类型,更好地对多媒体数据进行存储、管理、查询。模糊数据库是存储、组织、管理和操纵模糊数据库的数据库,可以用于模糊知识处理。

内存数据库的起因,分类

一、雏形期

从上个世纪60年代末到80年代初。在这个时期中,出现了主存数据库的雏形。1969年IBM 公司研制了世界上最早的数据库管理系统------基于层次模型的数据库管理系统IMS,并作为商品化软件投入市场。在设计IMS时,IBM考虑到基于内存的数据管理方法,相应推出了IMS/VS Fast Path。Fast Path是一个支持内存驻留数据的商业化数据库,但它同时也可以很好地支持磁盘驻留数据。在这个产品中体现了主存数据库的主要设计思想,也就是将需要频繁

访问,要求高响应速度的数据直接存放在物理内存中访问和管理。在这个阶段中,包括网状数据库、关系数据库等其他各种数据库技术也都逐渐成型。

二、技术理论成熟期

1984年,D J DeWitt等人发表了《主存数据库系统的实现技术》一文。第一次提出了Main Memory Database(主存数据库)的概念。预言当时异常昂贵的计算机主存价格一定会下降,用户有可能将大容量的数据库全部保存在主存中,提出了AVL树、哈希算法、主存数据库恢复机制等主存数据库技术的关键理论,为主存数据库的发展指出了明确的方向。

1984年,D J DeWitt等人提出使用非易逝内存或预提交和成组提交技术作为主存数据库的提交处理方案,使用指针实现主存数据库的存取访问。

1985年,IBM推出了IBM 370上运行的OBE主存数据库

1986年,RB Hagman提出了使用检查点技术实现主存数据库的恢复机制。威斯康星大学提出了按区双向锁定模式解决主存数据库中的并发控制问题。并设计出MM-DBMS主存数据库。贝尔实验室推出了DALI主存数据库模型。

1987年,ACM SIGMOD会议中提出了以堆文件(HEAP FILE)作为主存数据库的数据存储结构。Southern Methodist大学设计出MARS主存数据库模型。

1988年普林斯顿大学设计出TPK主存数据库。

1990年普林斯顿大学又设计出System M主存数据库。

三、产品发展期和市场成长期

随着互联网的发展,越来越多的网络应用系统需要能够支持大用户量并发访问、高响应速度的的数据库系统,主存数据库市场成熟

半导体技术快速发展,半导体内存大规模生产,动态随机存取存储器(DRAM)的容量越来越大,而价格越来越低,这无疑为计算机内存的不断扩大提供了硬件基础,使得主存数据库的技术可行性逐步成熟

1994年美国OSE公司推出了第一个商业化的,开始实际应用的主存数据库产品Polyhedra 1998年德国SoftwareAG推出了Tamino Database。

1999年日本UBIT会社开发出XDB主存数据库产品。韩国Altibase推出Altibase

2000年奥地利的QuiLogic公司推出了SQL-IMDB

2001年美国McObject推出eXtremeDB。加拿大Empress公司推出EmpressDB

四、几种主存技术应用的比较

第一代:用户定制的主存数据库。通过应用程序来管理内存和数据;不支持SQL语句, 不提供本地存储, 没有数据库恢复技术;性能好但很难维护和在别的应用中不能使用;应用在实时领域比如工厂自动化生产。

第二代:简单功能的内存数据库。能够快速处理简单的查询;支持部分的SQL语句和简单的恢复技术;主要目的是能够快速处理大量事务;针对简单事务处理领域,尤其是交换机, 移动通信等。

第三代:通用的主存数据库。针对传统的商业关系型数据库领域,能够提供更高的性能、通用性以及稳定性;提供不同的接口来处理复杂的SQL语句和满足不同的应用领域;可以应用在计费、电子商务、在线安全领域,几乎包括磁盘数据库的所有应用领域。

五、目前几种常见的通用内存数据库

eXtremeDB:eXtremeDB实时数据库是McObject公司的一款特别为实时与嵌入式系统数据管理而设计的数据库,只有50K到130K的开销,速度达到微秒级。eXtremeDB完全驻留在主内存中,不使用文件系统(包括内存盘)。eXtremeDB采用了新的磁盘融合技术,将内存拓展到磁盘,将磁盘当做虚拟内存来用,实时性能保持微秒级的同时,数据管理量在32BIT下能达到20G。

Oracle TimesTen:Oracle TimesTen是Oracle从TimesTen公司收购的一个内存优化的关系数据库,它为应用程序提供了实时企业和行业(例如电信、资本市场和国防)所需的即时响应性和非常高的吞吐量。Oracle TimesTen可作为高速缓存或嵌入式数据库被部署在应用程序层中,它利用标准的SQL 接口对完全位于物理内存中的数据存储区进行操作。

SolidDB:Solid Information Technology 成立于1992 年,全球总部位于加州Cupertino,Solid数据管理平台将基于内存和磁盘的全事务处理数据库引擎、载体级高可用性及强大的数据复制功能紧密地融为一体。

Altibase:ALTIBASE公司从1999年就一直致力于内存数据库软件和其应用的开发,提供高性能和高可用性的软件解决方案。特别适合通信、网上银行、证券交易、实时应用和嵌入式系统领域。目前占据80%以上内存数据库市场,可以说是当今数据库软件技术的领导者。目前Altibase在国内成功案例也比较多,尤其是在电信行业,已经得到了广泛认可。

Sqllite 的介绍,以及几种内存数据库的比较

Berkeley DB与Sqlite对比(from https://www.360docs.net/doc/1d8509424.html,)

嵌入式数据库无需安装,体积小巧,速度又很快,在很多场合可以替代目前流行的MySQL, SQLServer等大中型数据库。本文介绍两种嵌入式数据库产品:Berkeley DB和SQLite,并着重讨论它们与Java之间的接口。

通常我们采用各种数据库产品来实现对数据的存储、检索等功能,例如,Oracle,SQL Server,MySQL等等。这些产品除提供基本的查询,删除,添加等功能外,也提供了很多高级特性,如触发器,存储过程,数据备份恢复,全文检索功能等。但实际上,很多的应用,仅仅利用到了这些数据库产品的基本特性而已。而且在一些小型应用上,或者某些特殊场合的应用,比如桌面程序,这些数据库产品就明显有一些臃肿。在这些情况下,嵌入式数据库的优势就特别明显了。

嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式, 而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十K。这不但对桌面程序的数据存储方案是一个很好的选择,也使得它们可以应用到一些移动设备上。同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。

下面介绍的是两个开放源代码的嵌入式数据库,Berkeley DB和SQLite。同时侧重介绍如何应用Java连接这两种嵌入式数据库。

一. Berkeley DB

1. 简介

Berkeley DB是一款健壮的,高速的工业级嵌入式数据库产品,你可以在它的官方主页(见参考链接一)上发现很多知名的公司都采用了这款嵌入式数据库。Berkeley DB的一个很重要的特点是就是高速存储。在高流量,高并发的情况下,Berkeley DB要比非嵌入式的数据

库表现得更加出色。所以在一些技术实现上,Berkeley DB被作为大型关系数据库的中间数据缓冲层,用来快速的保存数据,可能会在适当的时刻再导入到大型数据库中,进而应用大型数据库所提供的更为高级的特性。

Berkeley DB虽然是开源的产品,但对某些条件下的商业性应用,却不是免费的,而且价格颇为昂贵。这些商业条件排除了开源的情况,不发放分布版本的情况,等等。比如,如果你的程序是开放源代码的或者仅仅应用到单一的网站上,在这种情况下,Berkeley DB是免费的。

2. 获得Java与Berkeley DB的接口

Berkeley DB目前的版本是4.1.25,自带了Java接口。下载的压缩包中包含C和Java语言的源代码和编译配置文件。在Windows平台,可以用MS Visual C++ 6.0或MS https://www.360docs.net/doc/1d8509424.html,编译。用VC6编译的操作如下介绍:在源代码的build_win32路径下打开VC的工程文件,之后在Build 菜单中的Set Active Configuration选择db_java win32 release编译选项。在VC的Tools菜单Options选项中指定JNI.H等Java本地化接口编译时所需要头文件的位置。你会在JDK的include路径下找到这些头文件,例如加入的路径可能会是这样的:C:\jdk1.4\include和C:\jdk1.4\include\ win32。最后在Tools菜单中Options选项还要设置Javac.exe和Jar.exe的执行路径,这个设置会使VC开发环境也能调用Java编译器,从而在VC环境下直接完成对Java 接口类的编译和打包。在编译后,在release路径下的文件中找到db.jar, libdb41.dll, libdb_java41.dll,这三个文件组成了Berkeley DB的Java接口程序包。

3. 应用Java与Berkeley DB的接口

Berkeley DB并不是一个关系型的数据库。不能应用标准的SQL语句对数据库操作,对它的操作要调用专用的API实现。这些API提供了查询、插入、删除等功能。比如com.sleepycat.db.Db类代表数据库对象。Db类的put()方法完成的是插入功能,get()方法完成的是读出数据的功能。com.sleepycat.db.Dbc是Berkeley DB的游标类,提供了遍历数据库记录的功能。

Berkeley DB每一个记录都有一个键值和对应的数据值,而键值和数据必须是类com.sleepycat.db.Dbt的对象或其子类的对象。Dbt提供了一些方法可以将byte数组或Object 对象保存到Dbt的对象中去。比如,Dbt类中的set_data(byte[])或set_object (Object)方法。注意到目前Berkeley DB中的Java API命名方法并不符合Java的命名规范,比如set_data()方法应该命名为setData()方法。Berkeley DB许诺在下一个版本中会提供符合命名规范的Java API。

Berkeley DB对任何存入的数据都是直接原样存储到数据文件中去,无论其是二进制数据还是ASCII或Unicode等编码的文本。通常可以利用这一特性和Java串行化的概念方便的进行数据的存取。例如声明一个类

public class AccountInfo implements Serializable{

//帐户信息

public String loginName;

public String password;

public boolean auotLogin;

}

在这个AccountInfo类中仅仅包含了数据项的定义。我们完全可以将这个类看作数据库的表中字段定义。可以用Berkeley DB保存AccountInfo对象的串行化二进制数据,以此来保存这个对象中的变量值。在操作中,先对Dbt的对象调用set_object (AccountInfo)方法,而后把这个Dbt对象作为一条纪录保存到表中。当然,我们也可以应用继承Dbt类的方法来完成对数据的保存。

下面这段简单代码演示如何将数据存入到数据库中,然后再用游标对象浏览全部数据。

//注意,下面的程序的忽略了对异常处理,写入数据初始化等等一些代码,请在适当修改后再编

//译运行它

Db dbFile = null;

//生成Db对象

dbFile = new Db(null, 0);

//用BTree方式打开数据库,库文件是在c:/temp下的mydata.db文件,表名是employee //如果数据库不存在,则自动生成一个新的数据库。

dbFile.open(null,"c:\\temp\\mydata.db","employee",Db.DB_BTREE,

Db.DB_CREATE,0);

Dbt key = new Dbt();

Dbt data = new Dbt();

//向库文件中插入一条数据,如果已经存在,打印出错信息

if (dbFile.put(null,key, data, Db.DB_APPEND) == Db.DB_KEYEXIST) {

System.out.println("Key already exists.");

}

//关闭数据文件

dbFile.close(0);

//重新打开数据文件

dbFile = new Db(null, 0);

dbFile.open(null, "c:\\temp\\mydata.db", "employee", Db.DB_UNKNOWN,

0, 0644);

// 声明一个数据库游标Dbc对象iterator

Dbc iterator = dbFile.cursor(null, 0);

// 遍历整个表

Dbt key = new Dbt();

while (iterator.get(key, data, Db.DB_NEXT) == 0)

{

System.out.println("reading");

//关闭游标和数据文件

iterator.close();

dbFile.close(0);

在运行Berkeley DB的程序时勿必在系统环境变量PATH中设置libdb41.dll和libdb_java41.dll 所在的路径。

4. Berkeley DB的存储模式

Berkeley DB提供了四种存储数据的模式:Btree,Hash,Queue和Recno。在打开数据库的时候要指定一种存储模式,比如上例中open()方法中的参数Db.DB_BTREE就是指定以Btree模式打开数据库。

Btree模式是以排序的二叉树的方式存储,Hash是以线性哈希表的方式存储。Queue用逻辑记录号做为键值,以定长的数据为记录值。Recno方式也以逻辑记录号做为键值,但可以保存定长或变长的记录值。这里提到的逻辑记录号有两种,可变的和固定的。可变逻辑记录号会根据数据记录的增加与删除做相应的变化。比如在数据库中共有100条记录,如果删除第80条记录,那么第81条记录的逻辑记录号会自动变成80,以此类推,第100条记录逻辑记录号会变成99。固定的逻辑记录号则无论数据库如何操作都不会有变化。Queue模式下,逻辑记录号只能是固定方式。Recno模式则可通过配置来选择是采用那种类型的记录号作为键值。Btree模式也可以通过设置,将可变的逻辑记录号做为键值。

这几种存储模式各有优缺点,要根据具体的需求来选择。当键值不想用逻辑记录号时Btree 或Hash是必须的选择。Btree方式比较适合连续的顺序读取,比如,当键值是时间值,如果经常有从某一时间点开始连续读取后继的记录的操作,Btree是一种很好的选择。对随机的跳跃式读取,Hash模式则更为恰当。Queue和Recno都以记录号为键值,但前者适合先进先出的读取方式。Recno则通常是存取变长文本记录的理想存储模式。

5. Berkeley DB Environment的概念

Berkeley DB Environment为一组数据库同时提供参数设置。更为重要的是,如果要应用更高级的特性,必须要使用Environment功能,比如在想要对保存的数据进行加密存储时。

6. 更多特点

除了最基本的插入、查询、删除功能以外,Berkeley DB还提供了一些特性,比如Transaction,数据加密,同步加锁控制,错误日志等功能。下面的图片是Berkeley DB功能示意图。

回页首

二. SQLite

1. 简介

相信PHP的开发人员一定不会对SQLite感到陌生,因为在PHP5中已经集成了这个轻巧的内嵌式数据库产品。SQLite与Berkeley DB相比,在操作语句上更类似关系型数据库的产品。绝大多数标准的SQL92语句SQLite都能支持。

SQLite的版权允许无任何限制的应用,包括商业性的产品。在参考链接二上提供的SQLite 官方主站上可以下载到编译后的SQLite程序。但推荐应用CVS工具下载最新版本的SQLite 源代码。如果在*nux平台下,可直接用make编译。如果在Windows 平台,常用的有两种方法,一是应用在Windows平台下的Linux仿真程序,如MingW或Cygwin提供的make来编译。二是应用MS VC平台编译。后者设置略有麻烦,但可仿照参考链接五上提供的MS VC6工程文件的样例。应用到这个样例的时候,要注意的是由于SQLite源代码在不断更新,如果直接应用样例所提供的VC6工程文件编译会出现一些问题,读者要根据具体的情况稍微调整一下编译的设置。

2. 编译第三方Java接口

SQLite 源代码是C,而且官方网站上只提供了C和Tcl语言的接口。为了应用Java接口,要采用第三方的接口驱程,可在参考链接三中找到这个Java接口程序。这个接口提供了两种连接SQLite的方式:一是直接用JNI技术调用SQLite的C语言接口,这种方式要求开发人员要对SQLite本身的API也有一定的了解。在第二种方式中,接口程序实现了Java标准规范的JDBC接口,这样开发人员只要对JDBC有了解就可以了。

下面介绍在Windows系统MS VC6环境中编译SQLite Java接口(同时包括JNI和JDBC两个接口)的过程。如果你对C语言编译的设置很熟悉,可以跳这这段介绍。

第一步先把SQLite源代码编译成Lib静态库文件。具体的步骤可以直接应用下面参考链接中提供的MS VC6工作区文件,其中有一个编译SQLite到静态库的设置。编译成功后得到SQLite.lib文件。第二步要建立一个新的VC DLL项目,然后和上面介绍的Berkeley DB在编译Java本地化接口的设置一样,在VC的Tools菜单Options选项中指定JNI.H等JNI编译所要的头文件位置。同时还要指定sqlite.h头文件位置,这个文件是在生成SQLite静态库的时候自动生成的,可以在SQLite.lib文件所在的工作区目录下面找到它,例如加入的路径为C:\sqlite\msvc6。然后在Project菜单的setting选项设置Link到SQLite.lib库文件,并再次在Tools菜单中Options指定SQLite.lib的查找路径。注意有些情况下可能要设置予编译选项HAVE_SQLITE_COMPILE以便使用SQLite中VM的一些功能。编译成功后可得到Sqlite_jni.dll 文件。

第三方接口库中的Java代码包含JNI接口和多个版本的JDBC接口程序,可根据你的JRE的版本选择相应的JDBC程序。编译这些Java代码的过程这里就不做叙述了。

编译后的Java类包加上前面得到的Sqlite_jni.dll文件,组成了SQLite的Java接口库,在应用Java语言调用JDBC或JNI接口时,都是通过应用Java的本地化技术调用Sqlite_jni.dll文件,完成对SQLite数据库的操作。

3. 应用JNI直接调用SQLite功能

下面这段代码演示如何应用JNI接口操作SQLite。可以看到Database类的exec()方法是执行SQL语句的关键:

Database db = new Database();

try {

//打开数据库

db.open("c:\\temp\\mydata.slt", 0666);

db.interrupt();

db.busy_timeout(1000);

db.busy_handler(null);

db.exec("create table account (name varchar(10),gale boolean)"

,result);

db.exec("insert into account values('steve','m')", result);

db.exec("select * from account",result);

//关闭数据库

db.close();

} catch (Exception e) {

e.printStackTrace();

}

4. 应用JDBC连接SQLite

用"SQLite.JDBCDriver"作为JDBC的驱动程序类名。连接JDBC的URL格式为jdbc:sqlite:/path。这里的path为指定到SQLite数据库文件的路径,例如:

jdbc:sqlite://dirA/dirB/dbfile

jdbc:sqlite://DRIVE:/dirA/dirB/dbfile

jdbc:sqlite://COMPUTERNAME/shareA/dirB/dbfile

参考下面的应用JDBC连接SQLite的例程:

//声明JDBC驱动程序

Class clz = Class.forName("SQLite.JDBCDriver");

//连接数据库

Connection conn = DriverManager.getConnection("jdbc:sqlite:/c:/temp/e2.db");

Statement stmt = conn.createStatement();

//生成person表,包含名子和年龄字段

stmt.execute("create table person (name varchar(100),age int)");

//插入数据

stmt.execute("insert into person values('steve',25)");

//用SQL语句读出数据

result = stmt.executeQuery("select * from person");

while(result.next()){

System.out.println(result.getString(1));

System.out.println(result.getInt(2));

}

运行程序时要在Java.exe命令行加入选项java.library.path指定到Sqlite_jni.dll所在的路径。例如,如果Sqlite_jni.dll放在c:\sqliteNative 路径下面,运行类com.e2one.MyClass 的命令行将会是这样:java -Djava.library.path=c:\sqliteNative com.e2one.MyClass。

5. SQLite的特点

SQLite 是无数据类型的数据库。虽然在生成表结构的时候,要声明每个域的数据类型,但SQLite并不做任何检查。开发人员要靠自己的程序控制输入与读出数据的类型是正确的。这里有一个例外,就是当主键为整型值时,如果要插入一个非整型值时会产生异常。另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区别的。比如:

CREATE TABLE MyTable(a INTEGER, b TEXT);

INSERT INTO MyTable VALUES(0,0);

当执行下面的查询:

SELECT count(*) FROM MyTable WHERE a=='00';

会返回一条记录,因为字段a的类型是整型,而数字00与0是相等的。

而执行下面的查询则不会返回记录:

SELECT count(*) FROM MyTable WHERE b=='00';

因为字段b是字符类型,字符"00"与"0"是不相等的。

SQLite提供了对Transaction的支持。应用Transaction即保证了数据的完整性,也会提高运行速度,因为多条语句一起提交给数据库的速度会比一条一条的提交方式更快。

对二进制数据,SQLite不能直接保存。但可以先将二进制的数据转换成ASCII编码,然后再保存。Base64编码机制是最常见的把二进制数据转换成ASCII编码的手段。在SQLite的C语言代码encode.c中提供了Base64编码的功能。对Java而言,在参考链接六中提供的Apache 的XML RPC项目中可以找到一个Base64编码的例子。

上面介绍了两个比较常见的嵌入式数据库,Berkeley DB速度极快,可靠性高,但学习起来有一定难度。SQLite则简单易用,速度也很快,又可以应用标准的JDBC连接,但它功能却照Berkeley略有逊色,比如加密功能、二进制数据的处理等。

Sqllite的使用

接口(Interface)

接口由SQLite C API组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过它与SQLite交互的(我们通常用得较多的ODBC/JDBC最后也会转化为相应C API的调用)。

2.2、编译器(Compiler)

在编译器中,分词器(Tokenizer)和分析器(Parser)对SQL进行语法检查,然后把它转化为底层能更方便处理的分层的数据结构---语法树,然后把语法树传给代码生成器(code generator)进行处理。而代码生成器根据它生成一种针对SQLite的汇编代码,最后由虚拟机(Virtual Machine)执行。

2.3、虚拟机(Virtual Machine)

架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎(Virtual Database Engine,VDBE)。它和Java虚拟机相似,解释执行字节代码。VDBE的字节代码由128个操作码(opcodes)构成,它们主要集中在数据库操作。它的每一条指令都用来完成特定的数据库操作(比如打开一个表的游标)或者为这些操作栈空间的准备(比如压入参数)。总之,所有的这些指令都是为了满足SQL命令的要求(关于VM,后面会做详细介绍)。

2.4、后端(Back-End)

后端由B-树(B-tree),页缓存(page cache,pager)和操作系统接口(即系统调用)构成。B-tree 和page cache共同对数据进行管理。B-tree的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据。而pager的主要作用就是通过OS接口在B-tree和Disk

之间传递页面。

数据库的消失

比较热门的研究领域还有XML数据库技术,它主要处理关系数据库过去处理不了的半结构化数据,如文档数据,这跟传统的关系数据库是不一样的。数据库所管理的数据发生了根本的变化,它的基本标志就是从过去仅仅管理由键盘输入的数字、字符等简单数据,到今天必须管理由各种设备、装置、计算所产生的多种类型的复杂数据。例如,图形、图像、视频、音频、电子图书与档案、Web网页等等。这一变化给数据库技术带来了很多的挑战,需要我们研究许多新的问题。关系数据库已经无法胜任这种变化了的应用需求,可以说它使数据库技术的发展面临一个新的分水岭,我们必须寻求新的解决办法。

首先,数据库的一个基本问题就是要找到一个恰当的数据模型来表达它所管理的对象。关系数据库的模型可以简化为普通的表格,它对于表达键盘输入的数据十分到位。但是,如果我们用表格表达一本书,而书里面有文字、图形、图像、数学公式,还有很多特定领域特殊的内容,还要分成章节,这对关系数据库模型而言显然是件十分困难的事情,它处理不了这么复杂的数据内容与它们之间的结构。

第二,数据模型的变化意味着查询语言的变化。

第三,数据的变化,意味着后端对查询数据的处理要发生变化。过去的对象很简单,都是一行一行的纪录。现在一个对象除了一部电影、一幅图像、一个电视节目这些对象本身以外,还有很多关于它们的描述性的东西,即对象的元数据(对这些内容特征的描述)。比如一张照片,它的颜色、纹理等等,这使得数据本身呈现一种多维的趋势,数据库系统必须考虑这样的要求。第四,在存储方面,过去数据存储不太考虑10年、20年这样长期的存储。一般的数据用了一年两年之后,我们就采取备份的手段,把它倒到磁带上,变成离线的,再放到架子上,编目进行管理。现在则不同,一本书,一部档案,可能10年、20年以后还要用,用户只要有需要,都希望能把它在线地调出来使用。从存储容量的要求来看,现在的要求跟过去键盘输入时代的要求有天壤之别。如何在计算机里长期保存这样超大规模的数据,并且实现随时可用的在线访问,这就需要一个合理的存储系统,这显然不是仅仅增加磁盘阵列就能解决的问题。第五,是对数据的使用。传统的关系数据库保存的都是键盘输入的数据,对它的使用也很简单,就是查一条或者一组记录,然后在终端显示出来。今天,当我们把一张照片调出来,看照片要用特定的浏览器。我们把一本书调出来,需要各种索引服务。存储的对象和服务都产生了很大的变化,它会反过头来对数据库的支撑技术提出了很多的新要求。比如视频音频的索引技术,都会与现在关系数据库所处理的常规数据索引有很大的不同。不是我不明白,这世界变化快!

内存数据库介绍

常用内存数据库介绍(一) 博客分类: 内存数据库 数据结构Oracle企业应用网络应用设计模式 (注:部分资料直接来源于Internet) 1. 内存数据库简介 1.1 概念 一、什么是内存数据库 传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来进行数据的操作,由于对磁盘读写数据的操作一方面要进行磁头的机械移动,另一方面受到系统调用(通常通过CPU中断完成,受到CPU时钟周期的制约)时间的影响,当数据量很大,操作频繁且复杂时,就会暴露出很多问题。 近年来,内存容量不断提高,价格不断下跌,操作系统已经可以支持更大的地址空间(计算机进入了64位时代),同时对数据库系统实时响应能力要求日益提高,充分利用内存技术提升数据库性能成为一个热点。 在数据库技术中,目前主要有两种方法来使用大量的内存。一种是在传统的数据库中,增大缓冲池,将一个事务所涉及的数据都放在缓冲池中,组织成相应的数据结构来进行查询和更新处理,也就是常说的共享内存技术,这种方法优化的主要目标是最小化磁盘访问。另一种就是内存数据库 (MMDB:Main Memory Database,也叫主存数据库)技术,就是干脆重新设计一种数据库管理系统,对查询处理、并发控制与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存,这种技术近乎把整个数据库放进内存中,因而会产生一些根本性的变化。两种技术的区别如下表:

内存数据库系统带来的优越性能不仅仅在于对内存读写比对磁盘读写快上,更重要的是,从根本上抛弃了磁盘数据管理的许多传统方式,基于全部数据都在内存中管理进行了新的体系结构的设计,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,从而使数据处理速度一般比传统数据库的数据处理速度快很多,一般都在10倍以上,理想情况甚至可以达到1000倍。 而使用共享内存技术的实时系统和使用内存数据库相比有很多不足,由于优化的目标仍然集中在最小化磁盘访问上,很难满足完整的数据库管理的要求,设计的非标准化和软件的专用性造成可伸缩性、可用性和系统的效率都非常低,对于快速部署和简化维护都是不利的。 2. 内存数据库历史和发展 一、雏形期 从上个世纪60年代末到80年代初。在这个时期中,出现了主存数据库的雏形。1969年IBM公司研制了世界上最早的数据库管理系统------基于层次模型的数据库管理系统IMS,并作为商品化软件投入市场。在设计IMS时,IBM考虑到基于内存的数据管理方法,相应推出了IMS/VS Fast Path。Fast Path是一个支持内存驻留

地理信息数据库产品及应用服务研究

地理信息数据库产品及应用服务研究 发表时间:2020-02-28T15:24:55.907Z 来源:《建筑学研究前沿》2019年21期作者:蒲妍婷 [导读] 随着科技的发展,如何将各种数据进行融会贯通,可以迅速、科学的被查找,利用已经成为了时代发展不可忽视的探索问题 新疆天拓空间信息测绘有限公司 841000 摘要:随着科技的发展,如何将各种数据进行融会贯通,可以迅速、科学的被查找,利用已经成为了时代发展不可忽视的探索问题,而地理信息数据库则是为提供各种地理信息而形成的基础数据库,这种数据库的建设可以促进地理信息测量的准确性和各种信息服务的及时性,地理信息数据库产品及其应用服务的发展状况直接影响着这种数据库建设的作用发挥,本文对此展开研究。 关键词:地理信息数据库建设应用服务技术 引言: 机械化、信息化已经是信息化时代各行业发展的趋势,因此很多国家开始不断的重视信息化工程的建设,我国亦是如此,如何进行信息化数据库,让各行业的工作效率能够进一步提升?目前,在地理信息数据库建设方面,很多相关的新型产品不断被应用其中,提升了地理信息数据库的逐步完善,例如,地图数据库、国土资源数据库等,它们承载了社会建设、土地规划、社会经济等发展需要的重要信息,随着人们生活水平的提升,交通建设、水电建设、教育建设都需要不断的改革创新,而这些创举都离不开地理信息的支持,因此这就是地理数据库产品的存在价值。 ―、地理信息数据库的发展 地理信息库建设是全球化趋势,不论是发达国家还是发展中国家都需要这一工程来服务自身发展,但是相比而言,发达国家的经济水平和科学技术更为先进,因此他们的地理信息数据库建设步伐也相对领先,而我国的数字化地理数据库问世基本可以追溯到1994年,经过近十年的发展,截止到2002年,我国的地理信息数据库已基本成型,覆盖面日益广泛,例如,地图信息库、地理信息分项数据库、专题数据库等都得到了社会的广泛认可。 随着时代的进一步发展,我国相关部门对于地理信息数据库的建设力度不断加大,相关的技术支持和资金支持也日益提升,地理信息数据库产品已经被逐渐应用到人们生活的各个领域,对于人们生活质量提升、精神生活充实奠定了良好的基础,尤其是对于土地建设相关工程的辅助作用也是日益提升。更重要的是,现在的人们在旅游过程中也在尝试利用地理信息数据库带来的便利。此外,对于社会经济发展也起到了积极的促进作用。相信在未来,地理信息数据库产品的应用范围和自身价值将得到更广泛的发展。 二、地理信息数据库建设的技术需求和应用要点 地理信息数据库的积极作用已经毋庸置疑,但是想要其发挥进一步的积极作用还需要加大建设力度,而这些工作的前提就是研究建设过程中的特点和社会需求,下面就对地理信息数据库建设的技术需求和应用特点进行分析。 (一)地形要素的动态变增技术需求 地理环境的复杂性决定了地理信息数据库建设的难度,因此需要不断的挖掘先进的技术来促使这一工程的建设,其中地理要素的动态变增技术就十分关键,所谓地形要素的动态变增技术是针对不同地理环境,对不同区域进行相关数据库信息的采集和增量设置,从而用数据的新增、删除和变更来记录这种地形区域的变化,最终实现实时更新、数据可视化的效果,进一步促使地理信息数据集的建设与完善。 (二)地理信息数据产品的应用要点 地理信息数据是十分复杂的,涉及到复杂的数学公式和法则,按照时间、空间等参照记性数字化表示,通过各种数据的记录来反映不同的地理信息,例如,地理目标的定位、面积、长度等,实现某个区域的科学、准确可视性。让现实世界的各种地理标志进行数据化、比例缩小化等。地理信息数据库则是这些海量信息的综合平台,实现最大范围的某些地理信息的查询、利用,最终促使地理信息数据产品的形成和应用。 (三)地理信息数据库的设计 地图数据库的存储是能够在不影响数据基础结构的前提之下,将主要包括线划地图的数据库、数字高程模型数据库、正影像数据库以及地名地址数据库的建设,在基础地理信息数据库的建设中添加必要的制图数据,并且灵活地运用数据的支持实现高效地地图数据库的制图与更新。数据库的设计越是精准,涵盖的范围越是广泛,越能发挥它最初的设计的价值。现实中很多经济发展都需要依赖一定的地理信息数据,因此,地理信息数据库的设计一定要精准、科学,既能够最大范围的囊括各种地理信息还能够快速的被查询、应用才是未来发展必然要满足的条件。 三、地理信息数据库建设的应用服务 2017版国家基础地理信息数据库,包含2万4千多幅图,具有9大类地理要素、34个数据层、1.8亿个要素对象。相比2016版,新的数据库对全国的1亿8千多万个地理要素进行了变化核查,实测了1千多万个地理要素。这是地理信息数据库建设的成果体现,通过此信息数据库,人们可以迅速的捕捉关于居民、境界、植被、地理信息。 地理信息数据库的建设最终目的还是服务社会发展,因此它的应用服务特点和范围决定了它价值的发挥程度。地理信息数据库产品的应用促使了各种地理空间数据信息的广泛应用,尤其是工程建设、水利调查、地理灾害预防等方面更是离不开地理信息,因此地理信息数据库建设的应用是涉及到国家经济、社会、文化发展等各个领域的。 地理信息数据库产品可以有效的服务于社会发展,发挥巨大的商业价值和商业潜力,因此对于相关产品的研发、设计,也需要建立起严格的监管制度,确保地理信息数据的采集、整理和产品研发,并且这个过程中的数据保密性也是必然不能忽视的。一个严密、科学的产品才能服务于项目建设的最终形成,对于地理信息数据库建设亦是如此。 此外,地理信息数据库产品数量比较大,而且分类也十分复杂,因此为了发挥其价值应当对需求客户进行细分,针对其需求和应用研发更适合的产品,按照需求来研发各种终端产品,最终更好地服务社会发展,扩大自身的发展前景。在未来,随着社会的发展,地理信息数据库的建设的应用服务范围将会更广,应用价值也会更高,不论是地图数据建设还是各种地理信息的获取都将依靠这种庞大的数据库建

timesten双机热备

一. timesten to timesten 1.首先关了两机的防火墙 #iptables -Z #iptable -F 2.装jdk(好像也可以不装) 3..安装timesten. 3.同步两机时间 date 010*********(月日时分年) 4. 增加数据库用户 [timesten@flypig timesten]$ source ~timesten/.profile [timesten@flypig]$ttisql TT_tt70 Command> create user imdb identified by 'imdb'; Command> grant ddl,admin to imdb; Command> grant write to imdb; Command> grant SELECT to imdb; Command> quit 5. 增加用户DSN [timesten@flypig timesten]$mkdir –p /opt/TimesTen/imdb [timesten@flypig timesten]$vi /opt/TimesTen/tt70/info/sys.odbc.ini 在[ODBC Data Sources]下面增加: imdb=TimesTen 7.0 Driver 在最后面增加: [imdb] Driver=/opt/TimesTen/tt70/lib/libtten.so DataStore=/opt/TimesTen/imdb/imdb DatabaseCharacterSet=ZHS16GBK ConnectionCharacterSet=ZHS16GBK Authenticate=0 UID=imdb PWD=imdb #ipcs memory size(M),该内存大小必须比shmmax小,否则用户DSN会进不去#PermSize=5000 #Connections=2047 #permsize*20% #TempSize=1000 CkptFrequency=600 CkptLogVolume=256

内存数据库(sqllite)使用介绍

内存数据库(sqllite)使用介绍 数据库的发展 数据库技术的发展,已经成为先进信息技术的重要组成部分,是现代计算机信息系统和计算机应用系统的基础和核心。数据库技术最初产生于20世纪60年代中期,根据数据模型的发展,可以划分为三个阶段:第一代的网状、层次数据库系统;第二代的关系数据库系统;第三代的以面向对象模型为主要特征的数据库系统。 第一代数据库的代表是1969年IBM公司研制的层次模型的数据库管理系统IMS和70年代美国数据库系统语言协商CODASYL下属数据库任务组DBTG提议的网状模型。层次数据库的数据模型是有根的定向有序树,网状模型对应的是有向图。这两种数据库奠定了现代数据库发展的基础。这两种数据库具有如下共同点:1.支持三级模式(外模式、模式、内模式)。保证数据库系统具有数据与程序的物理独立性和一定的逻辑独立性; 2.用存取路径来表示数据之间的联系; 3.有独立的数据定义语言; 4.导航式的数据操纵语 言 第二代数据库的主要特征是支持关系数据模型(数据结构、关系操作、数据完整性)。 关系模型具有以下特点:1.关系模型的概念单一,实体和实体之间的连系用关系来表示; 2.以关系数学为基础; 3.数据的物理存储和存取路径对用户不透明; 4.关系数据库语言是 非过程化的。 第三代数据库产生于80年代,随着科学技术的不断进步,各个行业领域对数据库技术提出了更多的需求,关系型数据库已经不能完全满足需求,于是产生了第三代数据库。主要有以下特征:1.支持数据管理、对象管理和知识管理;2.保持和继承了第二代数据库系统的技术;3.对其它系统开放,支持数据库语言标准,支持标准网络协议,有良好的可移植性、可连接性、可扩展性和互操作性等。第三代数据库支持多种数据模型(比如关系模型和面向对象的模型),并和诸多新技术相结合(比如分布处理技术、并行计算技术、人工智能技术、多媒体技术、模糊技术),广泛应用于多个领域(商业管理、GIS、计划统计等),由此也衍生出多种新的数据库技术。 分布式数据库允许用户开发的应用程序把多个物理分开的、通过网络互联的数据库当作一个完整的数据库看待。并行数据库通过cluster 技术把一个大的事务分散到cluster中的多个节点去执行,提高了数据库的吞吐和容错性。多媒体数据库提供了一系列用来存储图像、音频和视频对象类型,更好地对多媒体数据进行存储、管理、查询。模糊数据库是存储、组织、管理和操纵模糊数据库的数据库,可以用于模糊知识处理。 内存数据库的起因,分类 一、雏形期 从上个世纪60年代末到80年代初。在这个时期中,出现了主存数据库的雏形。1969年IBM 公司研制了世界上最早的数据库管理系统------基于层次模型的数据库管理系统IMS,并作为商品化软件投入市场。在设计IMS时,IBM考虑到基于内存的数据管理方法,相应推出了IMS/VS Fast Path。Fast Path是一个支持内存驻留数据的商业化数据库,但它同时也可以很好地支持磁盘驻留数据。在这个产品中体现了主存数据库的主要设计思想,也就是将需要频繁

关系数据库、内存数据库、实时数据库的简单比较

关系数据库、内存数据库、实时数据库的简单比较 很多情况下,用户会将实时数据库与关系数据库混为一谈,实际上,这两类产品的设计理念及应用场合是完全不同的。 内存数据库就是将数据放在内存中直接操作的数据库,它利用内存的读写速度比磁盘快、内存是随机访问而磁盘是顺序访问这两个特点,将数据保存在内存中,在内存中模仿建立表结构和索引结构并针对内存特性进行优化,相比从磁盘上访问,内存数据库能够提高应用的性能。 而实时数据库不但利用了内存的特性,而且考虑到工控行业的应用特性,将关系数据库的表结构和表关系简化,以进行性能的优化,并针对工控行业的数据特性,对数据进行压缩处理。 关系数据库、实时数据库与内存数据库相比,有如下差别:

从以上的表格可以看出,内存数据库与关系数据库相比,速度快10-20倍左右,且具有与关系数据库类似的完整表结构,因此在电信业处理大量实时事务业务时经常用到,它也可以应用在工控行业,比如,在很多电力行业SCADA软件中,都包含了一个小型的内存数据库系统(但不是真正意义上的内存数据库),但是,在超大型SCADA软件中,它仍不能满足需求,因为它性能比实时数据库慢10倍,且不能解决历史数据存贮的问题,还存在因为掉电导致大量数据丢失的风险。 以上的比较,指标并不全面,也并不是说,实时数据库一定比关系数据库和内存数据库好,只能说,需要针对不同应用的不同需求,做出综合决策,选择最适合自己需要的数据库产品。 最后,列举一些典型的内存数据库产品: ■ Oracle TimesTen Oracle TimesTen是Oracle从TimesTen公司收购的一个内存优化的关系数据库,它为应用程序提供了实时企业和行业(例如电信、资本市场和国防)所需的即时响应性和非常高的吞吐量。Oracle TimesTen可作为高速缓存或嵌入式数据库被部署在应用程序层中,它利用标准的 SQL 接口对完全位于物理内存中的数据存储区进行操作。 ■ Altibase Altibase是一个在事务优先的环境中提供高性能和高可用性的软件解决方案。它提供高性能、容错能力和事务管理能力,特别适合通信、网上银行、证券交易、实时应用和嵌入式系统领域。Altibase能够最大限度地发挥数据库服务系统的潜力,增强数据服务器的处理能力。Altibase支持客户端/服务器架构或

TimesTen在LINUX下的安装和使用

Oracle TimesTen 内存数据库在Linux下的安装和使用 (依据TimesTen版本11.2.1) 作者:秦诺 thor.qin@https://www.360docs.net/doc/1d8509424.html, 2010年10月8日

内容目录 1 TimesTen简介 (3) 1.1 内存数据库 (3) 1.2 In-Memory Database Cache (4) 2 TimesTen的安装 (5) 2.1 创建数据库管理员用户 (5) 2.2 下载TimesTen安装包 (5) 2.3 用数据库管理员用户安装TimesTen (6) 3 配置和创建数据库 (9) 3.1 配置Oracle数据库的连接(In-Memory Database Cache) (9) 3.1.1 配置Instant Client (9) 3.2 在oracle数据库端配置缓存信息 (10) 3.2.1 创建独立的缓存用户表空间 (10) 3.2.2 创建TimesTen 架构 (11) 3.2.3 创建缓存管理员(数据库用户) (11) 3.2.4 授予缓存管理员必要的系统权限 (11) 3.2.5 授予缓存管理员表权限(需要被缓存的表) (11) 3.3 配置TimesTen需要的环境变量 (11) 3.4 配置ODBC数据源信息 (12) 3.4.1 服务器数据源的配置 (12) 3.4.2 客户端数据源的配置 (12) 3.5 创建TimesTen缓存数据库 (13) 3.5.1 添加一个ODBC信息 (14) 3.5.2 Linux上启动数据库之前需要完成的一些动作 (14) 3.5.3 启动数据库 (14) 3.5.4 在TimesTen 数据库中创建用户 (15) 3.5.5 关联Oracle 中的cacheadm和TimesTen中的cacheadm用户 (15) 3.5.6 创建缓存网格 (15) 3.5.7 启动缓存代理 (16) 3.5.8 创建缓存组 (16) 3.5.9 启动数据复制代理 (16) 3.5.10 加载数据到缓存中 (17) 4 使用Sql Developer访问TimesTen数据库 (17) 5 OCI编程需要注意的问题 (17) 5.1 Oracle数据库功能限制 (17) 5.2 附加的TimesTen OCI限制 (18) 5.3 附加的TimesTen OCI 区别 (18) 5.4 使用ttSrcScan工具 (19)

【内存数据库】内存数据库的原理及应用

内存数据库的原理及应用 摘要 近年来,数据库系统在各种领域中扮演了关键角色,但传统的基于磁盘的关系数据库系统却不能满足上述应用高性能、实时/近实时数据访问的要求,内存数据库系统则可以很好地满足各种应用系统的实时数据管理需求,本文主要阐述了内存数据库的基本概念,并对其和传统基于磁盘的数据库进行了比较,此外对其在内存中的数据管理方式有一定的介绍。 1.内存数据库概述以及内存数据库技术的发展 内存数据库,也称主存数据库,是一个较新的研究领域,目前对内存数据库尚无一定义。内存数据库的本质特征是其主拷贝或“工作版本”常驻内存。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。同时,内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多。 内存数据库与磁盘数据库之间主要区别在于:内存数据库主数据库常驻内存,体系结构设计的优化目标是提高内存和CPU使用效率由于事务处理无需进行磁盘访问,使用内存数据库的应用系统性能得到极大提高。 随着电子技术的快速发展,计算机内存已越来越便宜,这使得计算机上配置的内存容量变得越来越大。现在一些商用的系统已配置几GB甚至更多的主存,另外,随着计算机及操作系统从32位向64位的发展,使理论上计算机可配置内存总数达B。从前,利用虚拟内存或内存交换技术来使大于地址空间或大于物理内存的程序可以运行,这些技术在当时乃至现在都具有重要的意义,然而,现在的问题是如何充分利用大内存,使程序运行更快。 随着计算机应用领域不断扩大和应用程度不断加深,人们对数据库技术提出了新的更高的要求。主存数据库技术,是随着存储技术的发展和现代应用的高性能需求产

开源内存数据库的调研与分析

一、内存数据库具备的一些基本功能 1):数据的管理,内存数据库机制是支持永久数据的管理的,包括数据库的的定义、存储、维护等功能。 2):数据的操作,内存数据库支持对数据进行增,删,改,查,数据完整性校验等一些基本功能。 3):事务管理,内存数据库支持调度,进程间、线程间的一些并发等操作。 4):数据恢复备份机制,内存数据库支持在线备份和系统崩溃后的自动恢复。

二、FastDB FastDB是一个高效率的内存数据库系统,在磁盘上的数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射,这样取消了数据文件和缓冲池中的数据传输。再将整个文件数据读入内存,并且使用了高性能的锁工具实现了只读模式线程间、单个更改模式线程和多个只读模式线程间的并发执行。FastDB通过位图实现对内存进行分配,最小单位块是分配量子(16字节)。如此大大提高了数据引用的局部性(对象数据尽可能分配在连续的内存区域),最小化了修改页的数目和减少了事务提交时间。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作,恢复效率很高,在存储数据结构上可以采用T-tree结构(T-tree和A VL-tree相似,只是T-tree中每个节点中顺序存储了多个值),对于大量相似重复性数据的查询性能相当高;也可以采用Hash存储,这是用关键字段定位表中记录的最好办法(采用等号进行查询)。 影子根页算法概述:FastDB数据库中每条对象都具有唯一的标识符(OID),用作一个数组(对象索引)的下标,元素值表示对象的一个句柄,在FastDB数据库中存在两个索引(当前索引和影子索引),当某个对象第一次被修改时,它会创建一个副本,当前索引中的对象句柄被修改指向副本,影子索引仍然包含一个指向该对象原始版本的句柄。所有更改发生在副本上,FastDB在对象索引的一个特殊位图页上标记出哪个索引包含修改过的对象句柄。 当一个事务被提交时,FastDB首先检查对象索引的尺寸的大小,若增长了,还会重新为对象索引的影子副本重新分配内存,然后释放“旧对象”占用的内存,释放后,将修改过的所有位图页flush到磁盘上,然后FastDB将改变数据库头部中的当前对象索引指示符,以切换对象索引的角色。当前对象索引将变成影子索引之后,FastDB 把修改过的所有句柄从新的对象索引中复制到先前是影子的、现在已成为当前的对象索引中。此时,两个索引都得到了同步。 优点: 具备实时能力及便利的C++接口。FastDB针对应用程序通过控制读访问模式作了优化。通过降低数据传输的开销和非常有效的锁机制提供了高速的查询。对每一个使用数据库的应用数据库文件被影射到虚拟内存空间中。因此查询在应用的上下文中执行而不需要切换上下文以及数据传输。 fastdb中并发访问数据库的同步机制通过原子指令实现,几乎不增加查询的开销。fastdb假定整个数据库存在于RAM中,并且依据这个假定优化了查询算法和接口。此外,fastdb 没有数据库缓冲管理开销,不需要在数据库文件和缓冲池之间传输数据。 Fastdb支持事务、在线备份以及系统崩溃后的自动恢复。事务提交协议依据一个影子根页面算法来自动更新数据库。恢复可以执行得非常快,为临界应用提供了高可用性。此外,取消事务日志改进了整个系统的性能,并且使得可以更有效的利用系统资源。 fastdb是一个面向应用的数据库,数据库表通过应用程序的类信息来构造。fastdb支持自动的模式评估。

如何为数据库服务器配置存储和内存

服务器管理,本文介绍在设计数据库服务器系统地存储与内存时应该注意地一些基本原则. 随着服务器硬件地功能变得越来越强大,而价格一路急剧下跌,许多公司(尤其是小公司)发现如今购买数据库服务器面临众多选择.这意味着,经验相对欠缺地数据库管理员们也被要求设计功能越来越强大地系统.在为大型系统设计数据库系统时,能够买到有许多硬盘和充足内存地大型数据库服务器.以下是在设计系统时应当遵守地一些基本原则.文档来自于网络搜索 存储系统 人们在设计磁盘阵列时最常犯下地错误就是,只计算所需地闲置容量.闲置容量只是设计存储子系统时要考虑地一部分而已;另一个部分就是存储系统需要支持地输入输出操作次数.文档来自于网络搜索 应当遵守地一条基本原则就是,写操作频繁地数据库最好使用阵列,而读操作频繁地数据库通常最好使用阵列.原因在于,如果把数据写到阵列,性能会受到影响.由于把数据写到阵列上,存储系统必须在写数据之前计算出奇偶检验位,而算出奇偶检验位需要相当长地时间,这意味着写到阵列上地性能会降低.文档来自于网络搜索 由于这种性能影响,我们总是建议你应当把事务日志放到阵列上.事务日志是写操作始终很频繁地文件,不管数据库是以读操作为主地数据库,还是以写操作为主地数据库.数据库也应当放在阵列上,具体来说放在与事务日志文件所在阵列不同地另一个阵列上.文档来自于网络搜索 对每个磁盘阵列进行分区时,应当确保分区正确对齐.默认情况下,及以下版本没有正确对齐分区,这会导致磁盘子系统地性能达不到最理想水平.可以通过使用实用程序(中地)创建分区来解决这个问题.这样创建地每个分区其对齐偏移量应为;在默认情况下,创建地每个分区其对齐偏移量为. 在默认情况下创建地分区其对齐偏移量为.文档来自于网络搜索物理数据库构建 微软最近开始推荐使用地一项比较新地技术就是,针对两个至四个核心当中地每个核心,数据库应当有一个物理数据库文件.应当为数据库里面地每个文件组做到这一点.文档来自于网络搜索 如果你地服务器有两个四核,那么共有八个核心.我们假定数据库有两个文件组,一个名为,另一个名为.那么每个文件组都应当有两个至四个物理文件.这项技术让可以对磁盘输入输出进行优化.可能地话,你应当尽量分散文件,以便位于每个存储阵列上地文件尽可能少.文档来自于网络搜索 数据库地配置应有点不同.配置数据库时,建议针对每个核心,数据库应当有一个物理文件.这样系统就可以为数据库尽量加快输入输出操作.与用户数据库一样,放在每个磁盘阵列上地文件也应当尽可能少.文档来自于网络搜索 你在数据库里面应当始终至少有两个文件组.第一个文件组包括表,第二个组包括索引.你需要让它们位于不同地文件组,那样查询索引时,装入到表地操作不会受到影响,反之亦然.文档来自于网络搜索 系统内存 在过去,购买只安装了数内存地数据库服务器相当常见.那是因为内存地价格还很昂贵. 如今,内存价格相当便宜;只要你能承受得了,应当购买尽量多地内存.内存越多,数据库地运行速度几乎总是越快.例外情况就是,如果你安装地内存超过了数据库地大小.举例来说,如果你有大小地数据库,但安装了内存,那么为服务器添加更多内存对提升数据库地性能没有帮助,因为可能已经能把整个数据库装入到内存中.文档来自于网络搜索在决定为分配多大内存时,绝对不要让把所有内存都分配给它.因为操作系统需要内存

浅谈TimesTen内存数据库的结构_光环大数据培训

https://www.360docs.net/doc/1d8509424.html, 浅谈TimesTen内存数据库的结构_光环大数据培训 OracleTimesTenIn-MemoryDatabase(简称TimesTen或TT)是一种业界领 先的内存中关系数据库,2005年被oracle公司收购。TimesTen主要为电信、网络、证券交易等行业提供基础架构软件,并用这种软件进行事件管理、交易... 管理数据库存储HadoopOracle进程 朱亮云和恩墨技术专家,6年专职oracledba生涯先后服务于保险、金融、电信、百货等客户 OracleTimesTenIn-MemoryDatabase(简称TimesTen或TT)是一种业界领 先的内存中关系数据库,2005年被oracle公司收购。TimesTen主要为电信、网络、证券交易等行业提供基础架构软件,并用这种软件进行事件管理、交易和数 据的工作,支持的系统包括实时计费系统、股票交易系统、呼叫中心系统、航线 运营系统等。 TimesTen主要用于以下部署方式:1、用于独立的OLTP系统的内存数据库2、 用于Oracle物理数据库的内存缓存数据库3、在OracleExalytics的内存分析一般行业内,大多采用第一种和第二种方式使用TimesTen数据库。 文件结构 TimesTen数据库主要包括的文件有: 1、检查点文件主要用来记录和同步DataStore的内存数据,是内存在磁盘 上的一个镜像,类似于oracle数据库的数据文件。每个TimesTen实例有两个检 查点文件,在做检查点操作的时候会交替写入这两个文件,两个检查点文件之间 的存在一定的时间间隔。 在TimesTen数据库中,有两种类型的检查点:非阻塞检查点:非阻塞检查 点也被称为模糊检查点。这些检查点的频率可以通过应用程序进行调整。非阻塞 检查点不需要数据库上的任何锁,因此在检查点操作正在进行时,多个应用程序 可以在同一数据库上异步提交或回滚事务,它是一个不完全检查点,不必保证事 务的一致性。阻塞检查点:做该检查点操作时会加上数据库级别的锁,它是一个

KEGG数据库的使用说明

KEGG数据库的使用方法与介绍http://www.genome.jp/ KEGG的数据 KEGG中的pathway是根据相关知识手绘的,这里的手绘的意思可能是指人工以特定的语言格式来确定通路各组件的联系;基因组信息主要是从NCBI等数据库中得到的,除了有完整的基因序列外,还有没完成的草图;另外KEGG中有一个“专有名词”KO(KEGG Orthology),它是蛋白质(酶)的一个分类体系,序列高度相似,并且在同一条通路上有相似功能的蛋白质被归为一组,然后打上KO(或K)标签。下面就首先来讲一下KEGG orthology。 任找一个代谢通路图,在上方有pathway meue | payhway entry | Show(Hide) description | 这3个选项,点击pathway entry, 出现了一个页面,这个随时被连接出来的页面相信大家一定再熟悉不过了。在这个页面中的pathway map项中点击按钮状的链接Ortholog table 。就进入了Ortholog table如下的页面: 在这个表中,行与物种对应,3个字母都是相应物中的英文单词缩写,比如has表示Homo sapiens,mcc表示Macaca mulatta;列就表示相应的Ortholog 分类,比如K00844就表示生物体内的己糖激酶hexokinase这一类序列和功能相似的蛋白质类(酶类)。如上图has后有3101,3098,3099这3个条目,它表示在人类细胞中中存在3中不同的己糖激酶,它们分别由以上这3组数字代表的基因所编码,这3组数字应该是这3个基因的登录号。空白则表示在该物种中不存在这种酶。

Nature数据库检索指南

Nature数据库检索指南 一、数据库介绍: 《Nature》创刊于1869年,是世界上最早的国际性科技期刊。《Nature》网站涵盖的内容相当丰富,不仅提供1997年6月以来的《Nature》全文,而且包括其他众多姊妹刊物。所有可访问全文的刊物列表如下: EMBO reportsNatureNature Biotechnology Nature Cell BiologyNature Chemical BiologyNature Genetics Nature ImmunologyNature MaterialsNature Medicine Nature MethodsNature NeuroscienceNature Reviews Cancer Nature Reviews Drug DiscoveryNature Reviews Genetics Nature Reviews ImmunologyNature Reviews Microbiology Nature Reviews Molecular Cell BiologyNature Reviews Neuroscience Nature Structural & Molecular Biology Nature Structural Biology (2004年刊名改为Nature Structural & Molecular Biology) The EMBO Journal 二、检索方法: 该库有期刊浏览、检索和篇目检索功能,篇目检索包括简单查询和复杂查询两种方式。 ㈠期刊浏览与检索 登录到检索系统的首页,可以进行期刊浏览与检索。 1.按刊名浏览:将所有期刊按刊名顺序排列起来,用户可以按刊名逐卷逐期地直接阅读自己想看的期刊; 2.刊名检索:可以在检索条件输入框中输入刊名关键词,按刊名进行简单检索。然后再选择想看的期刊按卷期浏览。 3.二次检索:按上述的几种方式进行检索或浏览之后,在显示的期刊列表中可以进一步限制进行二次检索。 ㈡检索方式

法律数据库产品介绍

H EIN O NLINE 法律数据库产品介绍 The Modern Link to Legal History! ――法律历史与现代的链接! ●1300种全球核心法学期刊,大部分从创刊号收录至今●1500部法学经典学术专著 ●检索简单方便, PDF/文本轻松转换 ●法学研究者不可或缺的基本学术研究资源 William S. Hein & Co., Inc.公司从事法律出版及信息服务已有近80年的历史,在美国乃至全球均享有盛名,现为全球最大的法律期刊的提供商、订购商和法律图书馆界的服务商。 HeinOnline法律数据库(https://www.360docs.net/doc/1d8509424.html,)现有近1300种法学期刊,675卷国际法领域权威巨著,100000多个案例,1000 多部精品法学学术专著。自2000年进入市场以来,在全球法律文献市场取得了巨大的成功, 2002年曾获得过国际法律图书馆协会颁发的"最佳商业网站奖";2001年获得美国法律图书馆协会颁发的"最佳新产品奖",美国所有法学院均已订购。该数据库是法学教学、研究和学习的必备资料库。 网址:https://www.360docs.net/doc/1d8509424.html,

HeinOnline 数据库各文库内容简介 ?Law Journal Library 法学期刊库(核心文库!!!) 期刊种类:1300种。卷次:32124卷。页数:20717958页。 本库包含近1300种法律和法律相关期刊。经过出版社的授权,绝大部分期刊的收录都是从第一期开始直到当前期次。本文库堪称HeinOnline数据库中最核心的文库,所收录的期刊主要分为: ●美国律师协会期刊库(American Bar Association Journals) ●美国核心/被引用最多的法学期刊库(Core U.S./Most Cited Law Journals) ●刑事司法期刊库(Criminal Justice Journals) ●国际及非美国法学期刊库(International & Non-U.S. Law Journals) ●知识产权期刊库(Intellectual Property Journals) ●被引用最多的期刊库(Most-Cited Journals) ?American Law Institute Library 美国法学会库 文献种类:82种。卷次:4501卷。页数:824464页。 收录了美国法学会的年度报告、纪要、会议讲稿集粹、新闻通讯、《ALI法律报道》等法律文献资源。全部文献可回溯到该会的创立时期,是研究美国法学会最重要的文献资源。 ?Code of Federal Regulations 美国联邦法典文库 文献种类:70种。卷次:8074卷。页数:5002892页。 HeinOnline数据库对美国联邦法典文库的覆盖非常全面,收录的文献最早是从1938年开始的。 美国联邦法典文库具有多重浏览和检索功能。从联邦纪事文库模块也可以进入到该库的内容中来。 ?English Reports 英国报告文库 文献种类:14种。卷次:190卷。页数:242052页。 英国报告文库是案例文库,其中的页面是以图像格式为基础,再现了原始报告的再版版本(包含100000多个案例),其与索引、图表一起构成了本库的主要内容。除此之外,丰富的导航功能,例如案例定位功能、图表导航功能,以及高级检索功能,可以帮助您轻松找到需要的案例。 ?Federal Register Library 美国联邦纪事文库 文献种类:10种。卷次:21395卷。页数:4720426页。 本库中的联邦纪事文库覆盖全面,收录其中的文献最早发表于1936年。本库具有多重浏览与检索功能。收录其中的文献包括:开始于1938年的联邦规章法典、开始于1935年的美国行政指南以及开始于1965年的总统文件每周汇编。 ?Foreign & International Law Resources Database 国际法数据库(重点文库!)

Timesten重建用户,datastore

Timesten重建用户,datastore 一、实例背景: 在测试环境中需要在内存库上将bill用户下的所有对象全部删除,然后再从正式环境中将其bill用户下的对象导入测试环境的bill用户下。 二、操作总结(比较白话,没有直接写最终的操作方法,而是记录了所有错误经过) 1、沿袭操作ORACLE数据库的思想,在这种情况下,一般会首先DROP掉bill用户(drop 用户的同时,删除该用户下所有对象),然后重建bill用户,再从正式环境中将其bill 用户下的对象导入测试环境的bill用户下。 操作步骤: Command> drop user bill; 15167: Cannot drop a user that is currently connected 第1种报错:很明显,oracle也有这样的情况,当前有链接,不能drop,停下应用应该就能避免这个错了,还这么报错的话就不知道是谁连这个库了,直接杀session吧! 是不是要问怎么杀session,我当时也这么问自己的,很自然的就想当然一把,借鉴一下oracle的经验吧,从v$session系统视图里找出要杀的session,alter system kill session。。。其实压根不是这么回事,因为根本就没有v$session这么个视图,怎么办呢,timesten肯定不会杀不了session的,最笨的办法就是先把tt库停了,ttDaemonAdmin –stop,(停之前做个Command>call ttckpt;)然后再起来ttDaemonAdmin –start,这样以前的不管什么session也没了;可是这样太粗鲁了,咱们还是有温柔一点的方法的,ttxactadmin dsn 这条命令就能解决啦,是不是很难记,光记个起停就很烦了,其实执行下这个命令就知道这就是查出支持那个session的系统PID,查出来直接kill,既然是要找个pid,那ps –ef 足够了。 OK,经过一番努力session终于杀死了,重新drop下试试吧! Command> drop user bill; 15168: Cannot drop a user that owns database objects (TABLE BILL.A) The command failed. 第2种报错:看字面意思就是,不能删除有对象的用户,换句话说不就是删用户前要先把它的对象都删了,查看了下Timesten的文档对于drop user的描述: Description Before you can drop a user: ?The user must exist either internally or externally in the database. ?You must drop objects that the user owns. ?When replication is configured, this statement is replicated.

内存数据库与磁盘数据库比较

内存数据库(MMDB)与磁盘关系数据库(DRDB)比较一、传统数据库与实时数据库 传统数据库系统(Traditional Database System,TDBS)处理对永久数据的管理,实现事务对永久数据的存取,同时维护其完整性、一致性。所以传统的数据库具有ACID(Atomicity,Consistency,Isolation,Durability)特征,即原子性、一致性、隔离性和永久性。传统数据库管理系统的典型代表是关系型数据库RDBMS(Relational Database Management System),我们平常用到的商用数据库管理系统如Oracle, Informix, Sybase, SQL Server等都是RDBMS。RDBMS已发展了很多年,其技术成熟度已广为人接受,其可靠性、可用性已被广泛验证,并在传统的商务和管理事务型的应用领域获得了极大成功,然而它们在现代的(非传统)工程和时间关键型应用面前却显得软弱无力,其主要原因是其数据存取服务的实时性很难得到保障,由此导致了实时数据库系统(Real-time DataBase System)的产生和发展。 实时数据库系统就是其事务和数据都可以具有定时特性或显式的定时限制的数据库系统,系统的正确性不仅依赖于逻辑结果,而且还依赖于逻辑结果产生的时间。近年来,实时数据库系统已发展成现代数据库系统研究的重要方向之一,在数据库研究领域受到极大关注。实时数据库系统通常简称为实时数据库(Real-time Database,RTDB)。 二、磁盘数据库与内存数据库 正如前面所述,我们平常用到的商业关系数据库系统,其主要目标是保证数据存取的ACID特征,为各类商务及事务应用提供强大的数据管理与存取服务。但它们的数据服务的实时性很难得到保障,其根本原因在于: 传统数据库是磁盘数据库(Disk Resident Database,DRDB),即数据的主拷贝(Primary DB)在磁盘上,数据库管理系统为了向应用系统提供存取服务,将用户需要访问的数据装入主存中,即对数据的管理是“基于磁盘的缓存技术”。而我们知道,磁盘相对于主存来说是极其低速的存储介质,且磁盘存取速度还和

内存数据库

内存数据库 实时交易系统的催化剂 现在,支持实时应用程序(如证券交易系统)的基础架构软件已经面市。内存数据库(IMDB)是这种基础架构的核心部分。与IMDB 所替代的各种定制产品不同,基于IMDB技术的商用产品不仅仅具有高性能,还增加了消息处理接口、符合行业标准的API、事务处理、容错故障切换和恢复、事件发布和与后台RDBMS的连接。 今天,精简的开发团队有足够的能力处理应用程序级的更改。他们已不再需要在“应用程序底层”编写代码,而且与当今经过证实的可选商用方案相比,这也不再是一个审慎的策略。

内存数据库 实时交易系统的催化剂 现在,支持实时应用程序(如证券交易系统)的基础架构软件已经面市。内存数据库(IMDB)是这种基础架构的核心部分。与IMDB 所替代的各种定制产品不同,基于IMDB技术的商用产品不仅仅具有高性能,还增加了消息处理接口、符合行业标准的API、事务处理、容错故障切换和恢复、事件发布和与后台RDBMS的连接。 今天,精简的开发团队有足够的能力处理应用程序级的更改。他们已不再需要在“应用程序底层”编写代码,而且与当今经过证实的可选商用方案相比,这也不再是一个审慎的策略。 引言:对速度的需求永无止境 对于证券交易系统来说,持续的熊市并未减少交易处理量。当然,货币交易量大大减少了,这是因为美国市场在采用十进制最小报价单位之后平均价差变小了。但系统依旧忙于买卖盘传递、对盘和跟踪交易订单。事实上,纳斯达克报告的统计数据表明当前的股票交易量与2000年底股市动荡时期的交易量大致持平(参见图1)。 造成这种现象的原因是交易策略和习惯发生了某些重大改变,包括对冲基金的迅猛普及和程式交易的惊人增长。很多投资者采取短期买进卖出策略,这反映了股市的不稳定性。交易执行的速度和交易价格成为了最重要的问题。因此,处理投资者业务的交易系统的速度和 质量也成为了最重要的方面。

相关文档
最新文档