python3的json數據庫-TinyDB效率篇

安裝了這個TinyDB庫後,我突然想到一般來說python執行的速度並不算高,那這個庫寫文件速度如何呢?

測試代碼如下:

from tinydb import TinyDB
import time

# 創建數據庫對象
db = TinyDB('db.json')

milliseconds1 = int(time.time() * 1000)

db.insert({'type': 'apple', 'count': 7})

milliseconds2 = int(time.time() * 1000)

print('use time (ms)')
print(milliseconds2 - milliseconds1)

執行結果發現 

use time (ms)
10

看,一次簡單的插入,居然要10毫秒,這真是令人髮指的緩慢!

同樣的邏輯用php實現一下看看

$start_time = microtime(true);
$data = [
    "_default" => [
        "type" => 'apple',
        'count' => 7
    ]
];
file_put_contents("./db.json", json_encode($data));
$end_time = microtime(true);
echo 'use time(ms) ' . (($end_time - $start_time) * 1000);

執行結果  use time(ms) 0.18191337585449 ,這毫無疑問是php快很多,不過想想這個TinyDB庫肯定不是原生代碼,肯定是封裝了多層,不過即便是那種php封裝的json庫也還是比這個快。

然後再測試一下查數據的速度。

先往裏面插入1萬條數據,然後再查一條看看。

代碼如下:

from tinydb import TinyDB, Query
import time

# 創建數據庫對象
db = TinyDB('db.json')

for i in range(1, 10001):
    db.insert({'type': 'apple', 'count': i})

milliseconds1 = int(time.time() * 1000)

Fruit = Query()
db.search(Fruit.count == '800')

milliseconds2 = int(time.time() * 1000)

print('use time (ms)')
print(milliseconds2 - milliseconds1)

執行結果一看

use time (ms)
7

需要7毫秒

使用php驗證一下速度,代碼如下:

$start_time = microtime(true);
$content = file_get_contents("./db.json");
$content = json_decode($content, true);
foreach ($content['_default'] as $key => $value) {
    if ($value['count'] == '800') {
        break;
    }
}
$end_time = microtime(true);
echo 'use time(ms) ' . (($end_time - $start_time) * 1000);

執行結果  use time(ms) 3.3478736877441 

感覺還是php快啊!

當然了上面我用python創建1萬條數據的時候是循環插入的,可以不這樣做,這樣做很慢,可以採用另外的一個方法 insert_multiple 看這裏

就相當於先做一個多維數組,然後一次性插入多條。

還有這個 update_multiple 方法,按條件更新多條。

還有一個很不錯的 upsert 方法,有則修改,無則插入,這裏可以用一句老話來方便記憶: 有則改之,無則加勉

更多高級用法 請看 https://tinydb.readthedocs.io/en/latest/usage.html

總結下來,這個庫蠻好的,如果你不追求極致的效率,那你可以用這個庫,能幫你少寫不少代碼呢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章