找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 6379|回复: 4

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

[复制链接]
发表于 2009-8-19 11:39:52 | 显示全部楼层 |阅读模式
来自:http://blog.vckbase.com/BastEt/archive/2009/08/18/38140.html
  1. int main(int argc,char *argv[])
  2. {
  3. DB_ENV *dbenv;
  4. int ret = db_env_create(&dbenv, 0);
  5. dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0);
  6. ret = dbenv->open(dbenv, "d:\\test\", DB_CREATE|DB_INIT_LOG| DB_INIT_MPOOL, 0);
  7. {
  8. DB *dbp1=NULL;
  9. ret = db_create(&dbp1, dbenv, 0);
  10. int flags = DB_CREATE;
  11. ret = dbp1->open(dbp1, NULL, "kingstock.db", "test1", DB_BTREE, flags, 0);
  12. dbp1->close(dbp1,0);
  13. }
  14. {
  15. DB *dbp2=NULL;
  16. ret = db_create(&dbp2, dbenv, 0);
  17. int flags = DB_CREATE;
  18. ret = dbp2->open(dbp2, NULL, "kingstock.db", "test2", DB_BTREE, flags, 0);
  19. dbp2->close(dbp2,0);
  20. }
  21. dbenv->close(dbenv,0);
  22. return 0;
  23. }
复制代码
 楼主| 发表于 2009-8-19 11:40:13 | 显示全部楼层

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

  1. #include <sys/types.h>
  2. #include <errno.h>
  3. #include <iostream>
  4. #include <stddef.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #pragma comment(lib,"libdb47.lib")
  9. #include <db.h>
  10. int main(int argc,char *argv[])
  11. {
  12. DB_ENV *dbenv;
  13. int ret = db_env_create(&dbenv, 0);
  14. dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0);
  15. ret = dbenv->open(dbenv, "d:\\test\", DB_CREATE|DB_INIT_LOG| DB_INIT_MPOOL, 0);
  16. {
  17. DB *dbp1=NULL;
  18. ret = db_create(&dbp1, dbenv, 0);
  19. int flags = DB_CREATE;
  20. ret = dbp1->open(dbp1, NULL, "kingstock.db", "test1", DB_BTREE, flags, 0);
  21. for(int i=0;i<40960;i++)
  22. {
  23. DBT key, data;
  24. memset(&key,0,sizeof(key));
  25. memset(&data,0,sizeof(data));
  26. key.data=&i;
  27. key.size=4;
  28. data.data=&i;
  29. data.size=4;
  30. dbp1->put(dbp1,NULL,&key,&data,NULL);
  31. }
  32. dbp1->close(dbp1,0);
  33. }
  34. {
  35. DB *dbp2=NULL;
  36. ret = db_create(&dbp2, dbenv, 0);
  37. int flags = DB_CREATE;
  38. ret = dbp2->open(dbp2, NULL, "kingstock.db", "test2", DB_BTREE, flags, 0);
  39. for(int i=0;i<40960;i++)
  40. {
  41. DBT key, data;
  42. memset(&key,0,sizeof(key));
  43. memset(&data,0,sizeof(data));
  44. key.data=&i;
  45. key.size=4;
  46. data.data=&i;
  47. data.size=4;
  48. dbp2->put(dbp2,NULL,&key,&data,NULL);
  49. }
  50. dbp2->close(dbp2,0);
  51. }
  52. dbenv->close(dbenv,0);
  53. return 0;
  54. }
复制代码
 楼主| 发表于 2009-8-19 11:40:55 | 显示全部楼层

下面是遍历

下面是遍历,速度非常的快,我存几万条简单的记录基本上是瞬间完成
  1. int main(int argc,char *argv[])
  2. {
  3. DB_ENV *dbenv;
  4. int ret = db_env_create(&dbenv, 0);
  5. dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0);
  6. ret = dbenv->open(dbenv, "d:\\test\", DB_CREATE|DB_INIT_LOG| DB_INIT_MPOOL, 0);
  7. {
  8. DB *dbp1=NULL;
  9. ret = db_create(&dbp1, dbenv, 0);
  10. int flags = DB_CREATE;
  11. ret = dbp1->open(dbp1, NULL, "kingstock.db", "test1", DB_BTREE, flags, 0);
  12. DBC *cursorp;
  13. DBT key, data;
  14. dbp1->cursor(dbp1, NULL, &cursorp, 0);
  15. memset(&key, 0, sizeof(DBT));
  16. memset(&data, 0, sizeof(DBT));
  17. while ((ret = cursorp->get(cursorp, &key, &data, DB_NEXT)) == 0)
  18. {
  19. int *pkey=(int *)key.data;
  20. printf("Table 1:%d\n",*pkey);
  21. }
  22. cursorp->close(cursorp);
  23. dbp1->close(dbp1,0);
  24. }
  25. {
  26. DB *dbp2=NULL;
  27. ret = db_create(&dbp2, dbenv, 0);
  28. int flags = DB_CREATE;
  29. ret = dbp2->open(dbp2, NULL, "kingstock.db", "test2", DB_BTREE, flags, 0);
  30. DBC *cursorp;
  31. DBT key, data;
  32. dbp2->cursor(dbp2, NULL, &cursorp, 0);
  33. memset(&key, 0, sizeof(DBT));
  34. memset(&data, 0, sizeof(DBT));
  35. while ((ret = cursorp->get(cursorp, &key, &data, DB_NEXT)) == 0)
  36. {
  37. int *pkey=(int *)key.data;
  38. printf("Table 1:%d\n",*pkey);
  39. }
  40. cursorp->close(cursorp);
  41. dbp2->close(dbp2,0);
  42. }
  43. dbenv->close(dbenv,0);
  44. return 0;
  45. }
复制代码
发表于 2009-8-19 13:02:37 | 显示全部楼层
我们公司数据库底层也是基于Berkeley DB,呵呵
发表于 2010-3-6 16:32:49 | 显示全部楼层
原帖由 modern 于 2009-8-19 13:02 发表
我们公司数据库底层也是基于Berkeley DB,呵呵
为什么不是用mysql?
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-27 06:15 , Processed in 0.020193 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表