zoukankan      html  css  js  c++  java
  • python模块之bsddb: bdb高性能嵌入式数据库 1.基础知识

    http://blog.chinaunix.net/uid-23145525-id-3499930.html


    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

    该变量是并发访问时必须加上的,详情可参见:http://docs.oracle.com/cd/E17076_02/html/programmer_reference/cam.html


    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接口移植的参考手册:

    http://www.jcea.es/programacion/pybsddb_doc/4.8.4/db.html


    Berkeley DB Concurrent Data Store Applications

    http://docs.oracle.com/cd/E17076_02/html/programmer_reference/cam.html


    python_使用Berkeley DB数据库

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

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

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

  • 相关阅读:
    php-instanceof运算符
    windows10-seaslog安装笔记
    [类和对象]1 封装 调用成员函数
    [C++] 拓展属性
    [C++] 引用详解
    [C++] Const详解
    ROS 常用
    win10 ubuntu16双系统安装教程
    [0] OpenCV_Notes
    Ubuntu16.04安装openCV的问题集合
  • 原文地址:https://www.cnblogs.com/riskyer/p/3281439.html
Copyright © 2011-2022 走看看