winston 发表于 2009-8-19 11:39:52

Berkeley DB怎么在单个文件里创建多个表的例子

来自:http://blog.vckbase.com/BastEt/archive/2009/08/18/38140.html

int main(int argc,char *argv[])
{
DB_ENV *dbenv;
int ret = db_env_create(&dbenv, 0);
dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0);
ret = dbenv->open(dbenv, "d:\\test\\", DB_CREATE|DB_INIT_LOG| DB_INIT_MPOOL, 0);

{
DB *dbp1=NULL;
ret = db_create(&dbp1, dbenv, 0);
int flags = DB_CREATE;
ret = dbp1->open(dbp1, NULL, "kingstock.db", "test1", DB_BTREE, flags, 0);
dbp1->close(dbp1,0);
}

{
DB *dbp2=NULL;
ret = db_create(&dbp2, dbenv, 0);
int flags = DB_CREATE;
ret = dbp2->open(dbp2, NULL, "kingstock.db", "test2", DB_BTREE, flags, 0);
dbp2->close(dbp2,0);
}

dbenv->close(dbenv,0);
return 0;
}

winston 发表于 2009-8-19 11:40:13

Berkeley DB怎么在单个文件里创建多个表的例子

#include <sys/types.h>

#include <errno.h>
#include <iostream>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#pragma comment(lib,"libdb47.lib")
#include <db.h>


int main(int argc,char *argv[])
{
DB_ENV *dbenv;
int ret = db_env_create(&dbenv, 0);
dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0);
ret = dbenv->open(dbenv, "d:\\test\\", DB_CREATE|DB_INIT_LOG| DB_INIT_MPOOL, 0);

{
DB *dbp1=NULL;
ret = db_create(&dbp1, dbenv, 0);
int flags = DB_CREATE;
ret = dbp1->open(dbp1, NULL, "kingstock.db", "test1", DB_BTREE, flags, 0);

for(int i=0;i<40960;i++)
{
DBT key, data;
memset(&key,0,sizeof(key));
memset(&data,0,sizeof(data));
key.data=&i;
key.size=4;

data.data=&i;
data.size=4;

dbp1->put(dbp1,NULL,&key,&data,NULL);
}

dbp1->close(dbp1,0);
}

{
DB *dbp2=NULL;
ret = db_create(&dbp2, dbenv, 0);
int flags = DB_CREATE;
ret = dbp2->open(dbp2, NULL, "kingstock.db", "test2", DB_BTREE, flags, 0);

for(int i=0;i<40960;i++)
{
DBT key, data;
memset(&key,0,sizeof(key));
memset(&data,0,sizeof(data));
key.data=&i;
key.size=4;

data.data=&i;
data.size=4;

dbp2->put(dbp2,NULL,&key,&data,NULL);
}

dbp2->close(dbp2,0);
}

dbenv->close(dbenv,0);
return 0;
}

winston 发表于 2009-8-19 11:40:55

下面是遍历

下面是遍历,速度非常的快,我存几万条简单的记录基本上是瞬间完成
int main(int argc,char *argv[])
{
DB_ENV *dbenv;
int ret = db_env_create(&dbenv, 0);
dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0);
ret = dbenv->open(dbenv, "d:\\test\\", DB_CREATE|DB_INIT_LOG| DB_INIT_MPOOL, 0);

{
DB *dbp1=NULL;
ret = db_create(&dbp1, dbenv, 0);
int flags = DB_CREATE;
ret = dbp1->open(dbp1, NULL, "kingstock.db", "test1", DB_BTREE, flags, 0);

DBC *cursorp;
DBT key, data;
dbp1->cursor(dbp1, NULL, &cursorp, 0);
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
while ((ret = cursorp->get(cursorp, &key, &data, DB_NEXT)) == 0)
{
int *pkey=(int *)key.data;
printf("Table 1:%d\n",*pkey);
}
cursorp->close(cursorp);


dbp1->close(dbp1,0);
}

{
DB *dbp2=NULL;
ret = db_create(&dbp2, dbenv, 0);
int flags = DB_CREATE;
ret = dbp2->open(dbp2, NULL, "kingstock.db", "test2", DB_BTREE, flags, 0);

DBC *cursorp;
DBT key, data;
dbp2->cursor(dbp2, NULL, &cursorp, 0);
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
while ((ret = cursorp->get(cursorp, &key, &data, DB_NEXT)) == 0)
{
int *pkey=(int *)key.data;
printf("Table 1:%d\n",*pkey);
}
cursorp->close(cursorp);

dbp2->close(dbp2,0);
}

dbenv->close(dbenv,0);
return 0;
}

modern 发表于 2009-8-19 13:02:37

我们公司数据库底层也是基于Berkeley DB,呵呵

thinke365 发表于 2010-3-6 16:32:49

原帖由 modern 于 2009-8-19 13:02 发表 http://www.acejoy.com/bbs/images/common/back.gif
我们公司数据库底层也是基于Berkeley DB,呵呵
为什么不是用mysql?
页: [1]
查看完整版本: Berkeley DB怎么在单个文件里创建多个表的例子