Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1091027
  • 博文数量: 187
  • 博客积分: 1156
  • 博客等级: 少尉
  • 技术积分: 2163
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-16 15:01
个人简介

go!go!go!

文章分类

全部博文(187)

文章存档

2024年(1)

2023年(11)

2022年(13)

2021年(15)

2020年(38)

2019年(3)

2018年(6)

2016年(1)

2015年(16)

2014年(13)

2013年(24)

2012年(46)

分类: SQLite/嵌入式数据库

2013-02-26 16:56:45

1.选bdb的理由

业务场景是:1个writer进程,多个reader进程,writer实时写数据到db文件中,其他reader实时读取db

存储结构:key值采用的是以时间戳,可以说是有序的,故采用btree 

bdb的优点正好满足需求:

   (1).直接嵌入应用程序,没有client-server的开销;

   (2).关键还是稳定,对大数据的存储并发访问的稳定口碑很好

   (3).被oracle收购了,相关的文档非常完善,靠谱

2.使用bdb中的注意事项:

    由于bdb中没有database manager 这个东西,在读写db文件中,是通过其api直接调用的,就拿简单的对于最简单的1写1读,数据同步、加锁是怎么处理的呢?bdb中采用“ENV”来模拟一个database manager,所有试图访问该db的程序,都应该在使用该环境后,再尝试对db写、读,查找等操作。


3.示例

下面是writer的写db的示例:


  1.     dbenv = bsddb.db.DBEnv()
  2.     dbenv.open(file_path, bsddb.db.DB_CREATE |bsddb.db.DB_INIT_CDB| bsddb.db.DB_INIT_MPOOL)
  3.     db = bsddb.db.DB(dbenv)
  4.     filename = file_path + '/'+ 'tag.db'
  5.     db.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 0660)
  6.     db['test_key1'] = 'test_data1'
  7.     db['test_key2'] = 'test_data2'
  8.     db.sync()
  9.     db.close()
  10.     dbenv.close()
      


注意:writer进程中必须要声明bsddb.db.DB_INIT_CDB

该变量是并发访问时必须加上的,详情可参见:


reader的示例代码:



  1. ddb.db.DBEnv()
  2. dbenv.open(file_path, bsddb.db.DB_CREATE |bsddb.db.DB_INIT_MPOOL)
  3. db = bsddb.db.DB(dbenv)
  4. filename = file_path + '/'+ 'tag.db'
  5. db.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_RDONLY, 0660)

  6. print db.get('test_key1')
  7. print db.get('test_key2')

  8. cur=db.cursor()
  9. cur.set_range(prefix+'metadatatag')

  10. firstTag = cur.next()

  11. db.close()
  12. dbenv.close()
读者的环境变量中就不用再加bsddb.db.DB_INIT_CDB 了,否则会出现死锁的问题


参考:

python中对bdb api接口移植的参考手册:


Berkeley DB Concurrent Data Store Applications


python_使用Berkeley DB数据库

http://blog.csdn.net/xiaocaiju/article/details/6992043

python模块之bsddb: bdb高性能嵌入式数据库 1.基础知识

http://blog.csdn.net/zhaoweikid/article/details/1665741







   

    

阅读(10131) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~