实时内存数据库-FastDB
FastDB是一个高效率的内存数据库系统,具有实时性能和方便的C++接口。FastDB并不支持客户端/服务器结构,所有使用FastDB数据库的应用程序都必须运行在同一台主机上。FastDB为具有主导读取访问模式的应用程序作了优化,通过消除数据传输的开销和使用高性能的锁工具实现了查询执行的高速度,数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射。所以查询在应用程序的任务中执行,不需要进行任务切换和数据传输。在FastDB中,通过原子指令来实现对数据库并发访问的同步,对查询处理几乎不增加任何开销。采用C++开发并在Apache协议授权。
Main Memory Relational Database Management System.
FastDB假设整个数据库都在当前内存中,并且在这个假设的基础上优化查询算法和结构。另外数据库缓存管理几乎不会给FastDB增加任何开销,同时FastDB也不需要在数据库文件和缓冲池中进行数据传送。这就是为什么FastDB比将所有数据放在缓冲池中的传统数据库明显速度快的原因。
相对于传统磁盘数据库,内存数据库通过将数据完全加载到内存,在内存中实现对数据的管理,在数据同步、数据传送、事务处理、并行操作等方面进行了相应的改进设计,使得内存数据库在处理数据上能够比磁盘数据库快得多
FastDB支持事务、在线备份和系统崩溃之后的自动恢复。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作。恢复操作执行起来非常快,给关键应用程序提供了高效率。另外,它还取消了事务日志,提高了系统的整体性能,并且能够更加有效地使用系统资源。
FastDB是面向应用程序的数据库,使用应用程序的类信息来构建数据库的表。FastDB支持自动系统赋值,只允许你在一个地方——你的应用程序的类中,改变它们的值。FastDB为从数据库中提取数据提供了一个灵活而方便的接口。使用类似于SQL的语言来书写查询语句。这些非原子字段、嵌套数组、用户自定义类型和方法、直接指向对象内部的指针等后关系性能,简化了数据库应用程序的设计,并且使得它们更加高效。
虽然FastDB的优化是基于整个数据库都存放在机器的物理内存的这个假设上的,我们依然可以将FastDB使用在那些大小超过系统物理内存的数据库上。最后标准操作系统的交换机制将会起作用。但是所有的FastDB的算法和结构的优化都是基于数据存放在内存中这个假设上的,所以数据交换的效率不会很高。
功能
1)内存数据库具备传统数据库的一些基本功能
A:数据的管理,内存数据库机制是支持永久数据的管理的,包括数据库的的定义、存储、维护等功能。
B:数据的操作,内存数据库支持对数据进行增,删,改,查,数据完整性校验等一些基本功能。
C:事务管理,内存数据库支持调度,进程间、线程间的一些并发等操作。
D:数据恢复备份机制,内存数据库支持在线备份和系统崩溃后的自动恢复。
2)特点
A:查询优化,与传统数据库管理系统咋红执行查询相比,当所有的数据存在于内存当中时,查询的数度是非常快的,但是FastDB还是进一步使用了索引(hash,T-tree)、反向指针和查询并行化进行了查询优化。
B:提供了一个灵活方便的应用程序语言接口,能够方便写出查询等语句。
Fastest query execution
Post-relational features
Tight integration with C++
Automatic scheme evaluation
Efficient log-less transactions
Zero time recovery
Fault tolerance
C, C++, Delphi/Kylix API
工作原理
FastDB是一个高效率的内存数据库系统,在磁盘上的数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射,这样取消了数据文件和缓冲池中的数据传输。再将整个文件数据读入内存,并且使用了高性能的锁工具实现了只读模式线程间、单个更改模式线程和多个只读模式线程间的并发执行。FastDB通过位图实现对内存进行分配,最小单位块是分配量子(16字节)。如此大大提高了数据引用的局部性(对象数据尽可能分配在连续的内存区域),最小化了修改页的数目和减少了事务提交时间。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作,恢复效率很高,在存储数据结构上可以采用T-tree结构(T-tree和AVL-tree相似,只是T-tree中每个节点中顺序存储了多个值),对于大量相似重复性数据的查询性能相当高;也可以采用Hash存储,这是用关键字段定位表中记录的最好办法(采用等号进行查询)。
影子根页算法概述:FastDB数据库中每条对象都具有唯一的标识符(OID),用作一个数组(对象索引)的下标,元素值表示对象的一个句柄,在FastDB数据库中存在两个索引(当前索引和影子索引),当某个对象第一次被修改时,它会创建一个副本,当前索引中的对象句柄被修改指向副本,影子索引仍然包含一个指向该对象原始版本的句柄。所有更改发生在副本上,FastDB在对象索引的一个特殊位图页上标记出哪个索引包含修改过的对象句柄。
当一个事务被提交时,FastDB首先检查对象索引的尺寸的大小,若增长了,还会重新为对象索引的影子副本重新分配内存,然后释放“旧对象”占用的内存,释放后,将修改过的所有位图页flush到磁盘上,然后FastDB将改变数据库头部中的当前对象索引指示符,以切换对象索引的角色。当前对象索引将变成影子索引之后,FastDB 把修改过的所有句柄从新的对象索引中复制到先前是影子的、现在已成为当前的对象索引中。此时,两个索引都得到了同步。
最新版本:3.7
项目主页:http://www.garret.ru/fastdb.html
Main Memory Relational Database Management System.
FastDB假设整个数据库都在当前内存中,并且在这个假设的基础上优化查询算法和结构。另外数据库缓存管理几乎不会给FastDB增加任何开销,同时FastDB也不需要在数据库文件和缓冲池中进行数据传送。这就是为什么FastDB比将所有数据放在缓冲池中的传统数据库明显速度快的原因。
相对于传统磁盘数据库,内存数据库通过将数据完全加载到内存,在内存中实现对数据的管理,在数据同步、数据传送、事务处理、并行操作等方面进行了相应的改进设计,使得内存数据库在处理数据上能够比磁盘数据库快得多
FastDB支持事务、在线备份和系统崩溃之后的自动恢复。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作。恢复操作执行起来非常快,给关键应用程序提供了高效率。另外,它还取消了事务日志,提高了系统的整体性能,并且能够更加有效地使用系统资源。
FastDB是面向应用程序的数据库,使用应用程序的类信息来构建数据库的表。FastDB支持自动系统赋值,只允许你在一个地方——你的应用程序的类中,改变它们的值。FastDB为从数据库中提取数据提供了一个灵活而方便的接口。使用类似于SQL的语言来书写查询语句。这些非原子字段、嵌套数组、用户自定义类型和方法、直接指向对象内部的指针等后关系性能,简化了数据库应用程序的设计,并且使得它们更加高效。
虽然FastDB的优化是基于整个数据库都存放在机器的物理内存的这个假设上的,我们依然可以将FastDB使用在那些大小超过系统物理内存的数据库上。最后标准操作系统的交换机制将会起作用。但是所有的FastDB的算法和结构的优化都是基于数据存放在内存中这个假设上的,所以数据交换的效率不会很高。
功能
1)内存数据库具备传统数据库的一些基本功能
A:数据的管理,内存数据库机制是支持永久数据的管理的,包括数据库的的定义、存储、维护等功能。
B:数据的操作,内存数据库支持对数据进行增,删,改,查,数据完整性校验等一些基本功能。
C:事务管理,内存数据库支持调度,进程间、线程间的一些并发等操作。
D:数据恢复备份机制,内存数据库支持在线备份和系统崩溃后的自动恢复。
2)特点
A:查询优化,与传统数据库管理系统咋红执行查询相比,当所有的数据存在于内存当中时,查询的数度是非常快的,但是FastDB还是进一步使用了索引(hash,T-tree)、反向指针和查询并行化进行了查询优化。
B:提供了一个灵活方便的应用程序语言接口,能够方便写出查询等语句。
Fastest query execution
Post-relational features
Tight integration with C++
Automatic scheme evaluation
Efficient log-less transactions
Zero time recovery
Fault tolerance
C, C++, Delphi/Kylix API
工作原理
FastDB是一个高效率的内存数据库系统,在磁盘上的数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射,这样取消了数据文件和缓冲池中的数据传输。再将整个文件数据读入内存,并且使用了高性能的锁工具实现了只读模式线程间、单个更改模式线程和多个只读模式线程间的并发执行。FastDB通过位图实现对内存进行分配,最小单位块是分配量子(16字节)。如此大大提高了数据引用的局部性(对象数据尽可能分配在连续的内存区域),最小化了修改页的数目和减少了事务提交时间。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作,恢复效率很高,在存储数据结构上可以采用T-tree结构(T-tree和AVL-tree相似,只是T-tree中每个节点中顺序存储了多个值),对于大量相似重复性数据的查询性能相当高;也可以采用Hash存储,这是用关键字段定位表中记录的最好办法(采用等号进行查询)。
影子根页算法概述:FastDB数据库中每条对象都具有唯一的标识符(OID),用作一个数组(对象索引)的下标,元素值表示对象的一个句柄,在FastDB数据库中存在两个索引(当前索引和影子索引),当某个对象第一次被修改时,它会创建一个副本,当前索引中的对象句柄被修改指向副本,影子索引仍然包含一个指向该对象原始版本的句柄。所有更改发生在副本上,FastDB在对象索引的一个特殊位图页上标记出哪个索引包含修改过的对象句柄。
当一个事务被提交时,FastDB首先检查对象索引的尺寸的大小,若增长了,还会重新为对象索引的影子副本重新分配内存,然后释放“旧对象”占用的内存,释放后,将修改过的所有位图页flush到磁盘上,然后FastDB将改变数据库头部中的当前对象索引指示符,以切换对象索引的角色。当前对象索引将变成影子索引之后,FastDB 把修改过的所有句柄从新的对象索引中复制到先前是影子的、现在已成为当前的对象索引中。此时,两个索引都得到了同步。
最新版本:3.7
项目主页:http://www.garret.ru/fastdb.html