安裝了這個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
總結下來,這個庫蠻好的,如果你不追求極致的效率,那你可以用這個庫,能幫你少寫不少代碼呢。