Fastdb安装与使用

环境: CentOS 6.4 32位

注意:

64位运行有问题,运行最后会报 segmentation fault,所以最后采用32位操作系统。

1.1 安装
(1) 安装需要的依赖

yum install gcc make gcc-c++ wget
(2) 下载源码

wget http://www.garret.ru/fastdb-3.76.tar.gz
(3) 解压

tar -xvf fastdb-3.76.tar.gz
(4) 切换到目录

cd fastdb
(5) 配置安装目录 /opt/fastdb

./configure --prefix=/opt/fastdb
(6) 编译

make -j16
(7) 安装

make install
(8) 注意事项

Linux下运行程序提示:

Incompatibility between headers and library

fastdb会假设绝大多数的Linux版是64-bit,如果你的机子是32-bit的,必须将config.h文件的如下内容注释掉:

// #if !defined(_WIN32) || defined(_WIN64) // most unixes are now 64-bit, while 32-bit windows is still quite popular
 
// #define LARGE_DATABASE_SUPPORT
 
// #endif
然后重新编译和安装即可。

1.2 配置
需要配置库的路径,程序才能正常找到库文件。

(1) 打开文件

vi /etc/ld.so.conf.d/fastcb_libs.conf
(2) 添加 fast 动态库路径

/opt/fastdb/lib
(3) 应用立即生效

sudo /sbin/ldconfig
(4) 查看是否生效

ldconfig -v | grep "fastdb"

2.1 简单实例

(1) 代码

#include "fastdb.h"
#include <stdio.h>
 
USE_FASTDB_NAMESPACE
 
class Record
{
public:
    Record(){}
    ~Record(){}
public:
    int4 id;           // id 作为主键唯一标识
    int4 value;        // value 作为保存值
    
    TYPE_DESCRIPTOR( ( KEY( id, HASHED  ),
                       FIELD( value ) ) );
};
 
// 创建 Record 数据表
REGISTER(Record);
 
const int g_Records = 5;
 
//! 插入数据
void insertRecord()
{
    printf("####### insertRecord #######\n");
    for ( int4 i = 1; i < g_Records; i++ )
    { 
        Record rec;
        rec.id = i;
        rec.value = i * i;
      
        printf("%d---%d\n", rec.id, rec.value);
           
        // 插入数据
        insert( rec );
    }
}
 
//! 更新数据
void updateRecord()
{
    printf("####### updateRecord #######\n");
   
    dbCursor<Record> cursorWrite(dbCursorForUpdate);  // 写游标对象 dbCursorForUpdate
    int n = cursorWrite.select();                     // 查询
         
    // 存在记录, 进行加1更新
    if(0 < n)
    {
        do
        {
            cursorWrite->value = cursorWrite->value + 1;
            cursorWrite.update();
 
        }while(cursorWrite.next());  // next() 游标向后滚
   }
    
}
 
//! 删除某条记录
void removeRecord(const int id)
{
    printf("####### removeRecord #######\n");
   
    dbQuery q;                                        // 查询语句
    dbCursor<Record> cursorWrite(dbCursorForUpdate);  // 写游标对象 dbCursorForUpdate
   
    q = "id =", id;
    int n = cursorWrite.select(q);   // 查询
         
    // 存在记录
    if(0 < n)
    {
        do
        {
            cursorWrite.removeAllSelected();
         
        }while(cursorWrite.next());  // next() 游标向后滚
    }
}
 
//! 删除所有数据
void removeAllRecord()
{
    printf("####### removeAllRecord #######\n");
   
    dbCursor<Record> cursorWrite(dbCursorForUpdate);  // 写游标对象 dbCursorForUpdate
    cursorWrite.removeAll();                          // 这里进行清除, 不清除会进行累加
}
 
//! 查询数据
void selectRecord()
{
   printf("####### selectRecord #######\n");
   
    dbCursor<Record> cursorRead;  // 只读游标对象
    int n = cursorRead.select();  // 查询
         
    // 存在记录
    if(0 < n)
    {
        do
        {
            printf("%d---%d---%d\n", n, cursorRead->id, cursorRead->value);
 
        }while(cursorRead.next());  // next() 游标向后滚
    }
   
}
 
int main(int argc, char* argv[])
{
    dbDatabase db;
 
    // 打开数据库 testpar
    if (db.open(_T("testpar")))
    {
        // 插入数据
        insertRecord();
        // 提交
        db.commit();
      
        // 查询数据
        selectRecord();
      
        // 更新数据加1
        updateRecord();
        // 提交
        db.commit();
     
        // 查询数据
        selectRecord();
      
        // 删除数据
        removeRecord(1);
        // 提交
        db.commit();
      
        // 查询数据
        selectRecord();
      
        // 删除所有数据
        removeAllRecord();
        // 提交
        db.commit();
      
        // 查询数据
        selectRecord();
      
        // 关闭数据库
        db.close();
    }
    
   return 0;
}

(2) 编译

g++ example.cpp -o example -I/opt/fastdb/include/fastdb -L/opt/fastdb/lib -lfastdb

(3) 运行结果

如果运行有问题,请查看注意事项

[root@livecd example]# ./example 
####### insertRecord #######
1---1
2---4
3---9
4---16
####### selectRecord #######
4---1---1
4---2---4
4---3---9
4---4---16
####### updateRecord #######
####### selectRecord #######
4---1---2
4---2---5
4---3---10
4---4---17
####### removeRecord #######
####### selectRecord #######
3---2---5
3---3---10
3---4---17
####### removeAllRecord #######
####### selectRecord #######

 

概述FastDB是一个高效率的内存数据库系统,具有实时性能和方便的C++接口。 FastDB并不支持客户端/服务器结构,所有使用FastDB数据库的应用程序都必须运行在同一台主机上。FastDB为具有主导读取访问模式的应用程序作了优化。通过消除数据传输的开销和使用高性能的锁工具实现了查询执行的高速度。数据库文件和使用该数据库的每一个应用程序占用的虚拟内存空间相映射。所以查询在应用程序的任务中执行,不需要进行任务切换和数据传输。在FastDB中,通过原子指令来实现对数据库并发访问的同步,对查询处理几乎不增加任何开销。FastDB假设整个数据库都在当前内存中,并且在这个假设的基础上优化查询算法和结构。另外,数据库缓存管理几乎不会给FastDB增加任何开销,同时FastDB也不需要在数据库文件和缓冲池中进行数据传送。这就是为什么FastDB比将所有数据放在缓冲池中的传统数据库明显速度快的原因。   FastDB支持事务、在线备份和系统崩溃之后的自动恢复。事务提交协议基于一个影子根页算法,对数据库执行原子更新操作。恢复操作执行起来非常快,给关键应用程序提供了高效率。另外,它还取消了事务日志,提高了系统的整体性能,并且能够更加有效地使用系统资源。   FastDB是面向应用程序的数据库,使用应用程序的类信息来构建数据库的表。FastDB支持自动系统赋值,只允许你在一个地方——你的应用程序的类中,改变它们的值。FastDB为从数据库中提取数据提供了一个灵活而方便的接口。使用类似于SQL的语言来书写查询语句。这些非原子字段、嵌套数组、用户自定义类型和方法、直接指向对象内部的指针等后关系性能,简化了数据库应用程序的设计,并且使得它们更加高效。   虽然FastDB的优化是基于整个数据库都存放在机器的物理内存的这个假设上的,我们依然可以将FastDB使用在那些大小超过系统物理内存的数据库上。最后,标准操作系统的交换机制将会起作用。但是所有的FastDB的算法和结构的优化都是基于数据存放在内存中这个假设上的,所以数据交换的效率不会很高。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值