berkeley db 保存到磁盘

Posted

技术标签:

【中文标题】berkeley db 保存到磁盘【英文标题】:berkeley db save into disk 【发布时间】:2016-04-29 20:57:47 【问题描述】:

我是berkeley db的新手,当我以这种方式创建数据库时:

DB *dbp;

db_create(&dbp, NULL, 0);


dbp->put(dbp, NULL, &key, &data, 0);

我是否将数据存储到磁盘中?如果是这样,数据库文件在哪里?据我所知,只有当我使用DB_ENV->open() 创建数据库环境并指定参数char *db_home 时,我才会存储到真实文件中,对吗?非常感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

来自伯克利数据库规范;

要打开数据库,您必须首先使用 db_create() 函数来初始化数据库句柄。一旦初始化了数据库句柄,就可以使用它的 open() 方法打开数据库。 请注意默认情况下,如果数据库尚不存在,DB 不会创建它们。要覆盖此行为,请在 open() 上指定 DB_CREATE 标志强>方法。

#include <db.h> 

//...

DB *dbp;           /* DB structure handle */
u_int32_t flags;   /* database open flags */
int ret;           /* function return value */

/* Initialize the structure. This
 * database is not opened in an environment, 
 * so the environment pointer is NULL. */
ret = db_create(&dbp, NULL, 0);
if (ret != 0) 
  /* Error handling goes here */


/* Database open flags */
flags = DB_CREATE;    /* If the database does not exist, 
                       * create it.*/

/* open the database */
ret = dbp->open(dbp,        /* DB structure pointer */
                NULL,       /* Transaction pointer */
                "my_db.db", /* On-disk file that holds the database. */
                NULL,       /* Optional logical database name */
                DB_BTREE,   /* Database access method */
                flags,      /* Open flags */
                0);         /* File mode (using defaults) */
if (ret != 0) 
  /* Error handling goes here */

https://docs.oracle.com/cd/E17076_05/html/gsg/C/databases.html#DBOpen

【讨论】:

我要补充一点,打桩的答案说明了一个重要概念:它捕获返回码并处理错误。 @HuangJie,如果你这样做了,你会从 put 函数中看到一个错误,它会告诉你 至少 它不起作用,并且可能有引导你先打开数据库。

以上是关于berkeley db 保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章

berkeley db java edition怎样存储数据库?

Berkeley DB基础教程

Berkeley DB JE JDB 文件不断增加

关于Berkeley DB

Java Berkeley DB 读取性能与 100M 文档

在 Berkeley DB Core 和 Berkeley DB JE 之间进行选择