您好,登錄后才能下訂單哦!
本文主要介紹python如何連接mongodb副本集及讀寫分離配置,mongodb副本集數據同步延遲測試。
一、python連接mongodb副本集
1.連接副本集
在新版的驅動中直接使用MongoClient連接
如下:
from pymongo import MongoClient conn = MongoClient(['192.168.3.11:27017', '192.168.3.12:27017', '192.168.3.13:27017'])
2.讀寫分離配置
from pymongo import ReadPreference db = conn.get_database('hnrtest', read_preference=ReadPreference.SECONDARY_PREFERRED)
副本集ReadPreference有5個選項:
PRIMARY:默認選項,從primary節點讀取數據
PRIMARY_PREFERRED:優先從primary節點讀取,如果沒有primary節點,則從集群中可用的secondary節點讀取
SECONDARY:從secondary節點讀取數據
SECONDARY_PREFERRED:優先從secondary節點讀取,如果沒有可用的secondary節點,則從primary節點讀取
NEAREST:從集群中可用的節點讀取數據
二、測試mongodb延遲腳本
1.原理
往集群中插入一批數據,然后從secondary節點讀取,直到讀到數據總數與插入的總數相等。
2.腳本內容
#!/usr/bin/python # -*- coding: utf-8 -*- import pymongo from pymongo import MongoClient from pymongo import ReadPreference import time import argparse # 定義執行時長裝飾器函數 def warps(*args): def deco(func): def _deco(*args, **kwargs): # 記錄開始時間 start = time.clock() # 回調原函數 func(*args, **kwargs) # 記錄結束時間 end = time.clock() # 計算執行時長 delat = end - start # 轉換成ms輸出 print("delay:%sms" % (int(delat*1000))) return _deco return deco # 連接副本集 conn = MongoClient(['192.168.3.11:27017', '192.168.3.12:27017', '192.168.3.13:27017']) # 讀寫分離 db = conn.get_database('hnrtest', read_preference=ReadPreference.SECONDARY_PREFERRED) # 定義連接的集合 collection = db.student # 創建插入數據函數 def data_insert(num): try: for i in range(1, num): collection.insert({"name": "student"+str(i), "age": (i % 100), "city": "FuZhou"}) except Exception as e: print("insert data:", e) # 創建查詢數據函數,引用裝飾器函數 @warps() def data_select(num): try: count = collection.find().count() while count != num - 1: count = collection.find().count() except Exception as e: print("select data:", e) # 創建刪除數據函數 def data_delete(): try: collection.remove({}) except Exception as e: print("delete data:", e) # 創建計算延遲時長函數 def data_delay(num): data_insert(num) data_select(num) if __name__ == '__main__': # 定義腳本需要傳入插入的數據量,默認值為1000,通過-n傳入參數 parser = argparse.ArgumentParser(description='insert data to mongodb number') parser.add_argument('-n', action='store', dest='num', type=int, required=False, default=1000) given_args = parser.parse_args() num = given_args.num data_delete() data_delay(num)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。