溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中l(wèi)eveldb的示例分析

發(fā)布時(shí)間:2021-07-24 09:27:43 來(lái)源:億速云 閱讀:233 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下python中l(wèi)eveldb的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體如下。

leveldb 是google實(shí)現(xiàn)的一種非常高效的key-value數(shù)據(jù)庫(kù)。key-value數(shù)據(jù)庫(kù)中,redis是比較知名且好用的,但它是一個(gè)內(nèi)存數(shù)據(jù)庫(kù),而leveldb只需要少量的內(nèi)存,但速度依然很快,美中不足的是,沒(méi)有網(wǎng)絡(luò)服務(wù)封裝,這樣一來(lái)就只能單機(jī)使用,如果你實(shí)力足夠強(qiáng),也可以自己封裝一個(gè)。

python版本的leveldb安裝很簡(jiǎn)單,pip install leveldb

接下來(lái)重點(diǎn)介紹使用方法。

一 、 讀寫

def single_operate(): 
 db = leveldb.LevelDB('./data') 
 db.Put('foo','東升') 
 print db.Get('foo') 
 db.Delete('foo') 
 print db.Get('foo')

新建數(shù)據(jù)庫(kù)很方便,如果這個(gè)目錄已經(jīng)存在就會(huì)直接打開,沒(méi)有的話就會(huì)新建。示例中給出了添加,刪除,和獲取的方法,注意,是沒(méi)有修改操作的。

二 、 遍歷

如何遍歷數(shù)據(jù)呢,也非常方便,你可以指定開始的key和結(jié)束的key,也可以指定順序,是否帶value

def test_iter(): 
 db = leveldb.LevelDB('./data') 
 for i in xrange(10): 
  db.Put(str(i), 'string_%s' % i) 
 print list(db.RangeIter(key_from = '2', key_to = '5')) 
 print list(db.RangeIter(key_from = '2', key_to = '5',reverse=True))
def iter_key_values(): 
 db = leveldb.LevelDB('./data') 
 for i in xrange(10): 
  db.Put(str(i), 'string_%s' % i) 
 keys = list(db.RangeIter(include_value = False)) 
 print keys 
 
 keys_values = list(db.RangeIter()) 
 print keys_values

三、 批量操作

如果我對(duì)數(shù)據(jù)庫(kù)有一大批操作,每一次都和數(shù)據(jù)庫(kù)進(jìn)行交互,其實(shí)挺浪費(fèi)性能的,因此像mongodb,redis都提供了批量操作的方法,leveldb也是如此。下面是一個(gè)清空數(shù)據(jù)庫(kù)的例子

def clear_db(): 
 db = leveldb.LevelDB('./data') 
 b = leveldb.WriteBatch() 
 for k in db.RangeIter(include_value = False, reverse = True): 
  b.Delete(k) 
 db.Write(b)

b.Delete(k)并沒(méi)有真正的刪除數(shù)據(jù),而是在db.Write(b)時(shí)執(zhí)行所有的操作

四、 快照

創(chuàng)建快照非常簡(jiǎn)單,美中不足的是,再次加載數(shù)據(jù)庫(kù)以后,沒(méi)有方法找到之前創(chuàng)建的快照,難道已關(guān)閉這些快照就都不見了,這這樣的快照還有什么意思呢,也許只有python版本的快照是這樣的吧

def test_snapshot(): 
 db = leveldb.LevelDB('./data') 
 db.Put('foo','s1') 
 s1 = db.CreateSnapshot() 
 db.Put('foo','s2') 
 s2 = db.CreateSnapshot() 
 
 print db.Get('foo') 
 print s1.Get('foo') 
 print s2.Get('foo')

以上是“python中l(wèi)eveldb的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI