当前位置: 首页 > 工具软件 > FastDB > 使用案例 >

Fastdb安装与使用

后烨煜
2023-12-01

环境: 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 #######

 

 类似资料: