Python中的Berkeley DB(1):Hello Berkeley DB
Python中的Berkeley DB(1):Hello Berkeley DB
什麼是Berkeley DB1
Berkeley DB(後文簡稱BDB)是一個高效能的嵌入式資料庫程式設計庫(引擎),它可以用來儲存任意型別的鍵/值對 (Key/Value Pair),而且可以為一個鍵儲存多個資料。BDB可以支援數千的併發執行緒同時運算元據庫,支援最大256TB的資料。
BDB提供諸如C語言,C++,Java,Perl,Python,Tcl等多種程式語言的API,並且廣泛支援大多數類Unix作業系統和Windows作業系統以及實時作業系統(如 VxWorks)。
- 1991年,Berkeley DB的第一個版發行(Linux系統也在這一年誕生),其最初的開發目的是以新的HASH訪問演算法來代替舊的hsearch函式和大量的dbm實現,該版本還包含了B+樹資料訪問演算法。
- 1992年,BSD UNIX第4.4發行版中包含了Berkeley DB1.85版。基本上認為這是Berkeley DB的第一個正式版。
- 1996年,Sleepycat軟體公司成立,提供對Berkeley DB的商業支援。
- 2006年,Sleepycat被Oracle收購,當時最新版本是4.7.25。
為什麼是Berkeley DB
從功能來看,BDB似乎非常單一,同其它Key/Value類資料庫系統類似,它只具有很少的資料操作能力,在當前各種No-SQL系統百花齊放的時代,你可能會覺得功能如此簡單的資料庫系統並不會有太多的用武之地,不過讀完下面的介紹,你可能會對BDB另眼相看了。
優異的效能2
BDB和應用執行在同一程式空間,直接使用原生態的API存取資料,因此它具有其它資料庫系統無法比擬的效能,不要不相信,它跑起來甩出Redis幾條大街!至於MySQL、Oracle這些RDBMS系統,更不好意思和Berkeley在一起談效能了,MySQL5.1版之前的資料事務儲存引擎使用的是BDB,Google Accounts選用的BDB作為儲存引擎。
輕量化和跨平臺
BDB被Oracle收購後,其使用許可變更為AGPL3,但它仍然是一個Freeware,你可以從Oracle網站上下載3它的原始碼,在任何一個你喜歡或需要的平臺上編譯執行,它還有Java版本(Berkeley DB Java Edition),讓你更方便地跨平臺部署你的應用,此外,Python語言也內建了對BDB的繫結(binding),可以讓你無需在本地安裝BDB的情況下無障礙地使用,本文後續部分便為你介紹如何在Python中方便地使用BDB。需要注意的是,Python 2.7版本中的binding庫pybsddb為V4.8,為了方便大家測試我們會基於這個版本,如果你需要使用到最新的功能特性請參考該專案的新主頁。4
Hello Berkeley DB
本節我們用一個類似Hello world的入門案例來講一講如何在Python中呼叫BDB binding。
我們假設你安裝了原始的Python 2.7.X系列Python執行環境,開啟Windows命令列或Linux終端,輸入python啟動Python語言解析器,輸入import bsddb
。
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>import bsddb
如果系統未提示錯誤,意味著匯入bsddb包正常,那麼可以進行下一步操作了。
此時我們還可以輸入print bsddb.db.DB_VERSION_STRING
檢視BDB版本號。
>>>print bsddb.db.DB_VERSION_STRING
Berkeley DB 4.7.25: (May 15, 2008)
下面我們建立一個新的資料庫(注意BDB中沒有資料表的概念,一個Key/Value對組成的集合對應一個磁碟檔案)。
>>> mydb = bsddb.db.DB()
>>> mydb.open('mydb.db',dbtype = bsddb.db.DB_HASH, flags = bsddb.db.DB_CREATE)
上面的程式碼中,使用bsddb.db.DB()建立一個DB例項,然後使用DB中的open方法開啟一個資料庫,設計dbtype引數為DB_HASH表明這個庫的結構為雜湊表型別,設定flags引數為DB_CREATE表明如果資料檔案不存在則新建一個空的資料檔案。
TIPS:執行了mydb.open後會在當前作業系統路徑下新建一個mydb.db的資料檔案。如果你開啟命令列沒有改變當前路徑的話預設會在使用者主目錄下(Windows為 C:\Users\你的使用者名稱,Linux系統為~)
現在你就可以使用這個已經開啟的DB例項儲存第一個資料了,使用DB的put方法儲存一個Key/Value對,如mydb.put(“author”,”evancsss”),其中Key為author,Value為evancss。執行完put方法後,我們使用close()方法關閉資料庫,並退出Python以驗證資料是否已在磁碟上持久化儲存。
>>> mydb.put("author","evancss")
>>> mydb.put("title","Berkeley DB in Python")
>>> mydb.close()
>>> exit()
現在我們要讀取剛剛建立的資料庫,重新進入Python解析器並開始使用BDB,這次我們使用from * import *的語法來簡化我們的操作:
>>> from bsddb import db
>>> mydb = db.DB()
>>> mydb.open('mydb.db')
>>> print mydb.items()
[('title', 'Berkeley DB in Python'), ('author', 'evancss')]
哇塞,一切順利,我們用一個簡單的items()方法取出了剛剛新增的兩條資料。
待續……
第二篇:Berkeley DB的資料結構
第三篇:高階特性與執行緒安全
第四篇:使用Berkeley DB進行URL去重
第五篇:使用Berkeley DB作為緩衝佇列
第六篇: 新版Berkeley DB的特性
參考文件
相關文章
- Berkeley DB for JavaJava
- Oracle Berkeley DBOracle
- MySQL不再支援Berkeley DB 轉而新增外掛(轉)MySql
- 甲骨文把Berkeley DB的協議更換為AGPL,Web開發者估計要不淡定了協議Web
- 取代Python多程式!高效能分散式執行框架 - Berkeley RayPython分散式框架
- python中的一個現象,db.commit和db.commit()PythonMIT
- Berkeley vLLM:算力減半、吞吐增十倍
- db2中的SYSIBM.SYSDUMMY1DB2IBM
- UC Berkeley EECS是如何培養計算機學生的計算機
- 名校AI課推薦 | UC Berkeley《人工智慧導論》AI人工智慧
- db2 9.5中db2diag.log 的位置DB2
- Python Uses ibm_db connect to DB2PythonIBMDB2
- UC Berkeley提出新型分散式執行框架Ray:有望取代Spark分散式框架Spark
- 檢視DB buffer 中的物件物件
- Google投資Berkeley County資料中心 投資總額達到12億美元Go
- DB2建立DB linkDB2
- 【Mongodb】db.stats() 與 db.serverStats() 與 db.collection.stats()MongoDBServer
- UC Berkeley新研究:通過深度學習建模注意點取樣陣列深度學習陣列
- DB2執行計劃(1)DB2
- db2 錯誤小結-1DB2
- Initianization Parameter (1) : DB_BLOCK_SIZEBloC
- db_name和db_unique_name的區別
- DB2 db2look的使用方法DB2
- awr中DB CPU過低的原因分析
- DB SECURITY
- db2中模擬ORACLE中的truncate操作DB2Oracle
- DB_NAME DB_UNIQUE_NAME 和 SID 的理解
- db_block_checksum & db_block_checking 的區別BloC
- 【DB2學習】db2profile的指令碼DB2指令碼
- Oracle中DB_NAME,SID,DB_DOMAIN,SERVICE_NAME等之間的區別OracleAI
- DB2:ksh: db2: not found.DB2
- DB_BLOCK_SIZE and DB_CACHE_SIZE in OracleBloCOracle
- Oracle修改(db_name,db_unique_name, servie_names,db_domain)方法OracleAI
- Python基礎1 Hello World!Python
- DB2在滲透中的應用DB2
- DB2中的混合XML儲存QMDB2XML
- db2move和幾個常用的db2命令DB2
- DB_NAME&TANCE_NAME&DB_UNIQUE_NAME&ORACLE_SID&GLOBAL_NAME&DB_DOMAIN&SERVICE_NAMEOracleAI