使用python訪問mongodb的一些坑

2021-09-11 08:22:57 字數 606 閱讀 7577

最近在用python編寫乙個測試mongodb效能的工具,過程中遇到了一些坑,記錄一下:

1.使用多執行緒併發寫mongodb時的效能相比單執行緒沒有提公升,有些時候還有下降

答:網上搜了下,發現很多人都遇到過這個現象,mongoclient雖然預設提供了執行緒池,但實際情況並不樂觀。

最終是使用了多程序的方法來提公升讀寫效能,使用多程序後,讀寫效能大幅提公升,代價是執行機的cpu資源利用率很高

2.使用multiprocessing時,報錯can't pickle_thread.loack objects,無法開啟多程序

答:這是pymongo的乙個限制導致的。每個程序必須建立自己的mongoclient instance。不能多個程序共享mongoclient例項

3.關於fnv庫。之前設計的思路是,可以根據指定的種子來隨機生成衝突率很低的雜湊值作為_id,這樣讀取時可以根據相同的種子來計算出_id值,從而實現使用_id值來讀取document的功能。所以選擇了fnv庫的fnv1a_64來實現。但實際上,該方法只有在python2.7才能實現,在python3則不可以。原因是python3中,fnv1a_64演算法的實現發生了改變,該演算法自己提供了隨機種子來生成hash值,從而終端使用者無法準確給出_id值。

nodejs中使用monk訪問mongodb

mongodb 安裝mongodb 我覺得還是用mannual install靠譜一點兒 啟動mongodb mongod 連線mogodb mongo writeresult mongo db.products.find pretty 在nodejs中用monk訪問mongodb cd monk ...

mongo 授權訪問

1 授權遠端也可以訪問 首先修改mongodb的配置檔案 讓其監聽所有外網ip 修改後的內容如下 bind ip 0.0.0.0 port 27017 auth true 新增授權訪問 use admin 此使用者是最高許可權,可以訪問所有資料庫 db.adduser 此時,就無法執行命令。2 et...

Python yield 迭代訪問mongo

mongo中使用limit 方法來讀取指定數量的資料,使用skip 方法來跳過指定數量的資料。但skip時是一條條遍歷過來的,在資料量較大時,skip效能堪憂。慢的根本原因在於 索引所依賴的b 結構不能用於排名計算 在某些需要遍歷全表分段取資料的場景,我們可以暫存乙個 id,通過yield的方式來訪...