溫馨提示×

溫馨提示×

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

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

利用python測試mongodb副本集數(shù)據(jù)同步延遲

發(fā)布時間:2020-07-25 05:53:46 來源:網(wǎng)絡(luò) 閱讀:4168 作者:hnr1017 欄目:MongoDB數(shù)據(jù)庫

本文主要介紹python如何連接mongodb副本集及讀寫分離配置,mongodb副本集數(shù)據(jù)同步延遲測試。


一、python連接mongodb副本集

1.連接副本集

在新版的驅(qū)動中直接使用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)

副本集ReadPreference5個選項(xiàng):

PRIMARY:默認(rèn)選項(xiàng),從primary節(jié)點(diǎn)讀取數(shù)據(jù)

PRIMARY_PREFERRED:優(yōu)先從primary節(jié)點(diǎn)讀取,如果沒有primary節(jié)點(diǎn),則從集群中可用的secondary節(jié)點(diǎn)讀取

SECONDARY:從secondary節(jié)點(diǎn)讀取數(shù)據(jù)

SECONDARY_PREFERRED:優(yōu)先從secondary節(jié)點(diǎn)讀取,如果沒有可用的secondary節(jié)點(diǎn),則從primary節(jié)點(diǎn)讀取

NEAREST:從集群中可用的節(jié)點(diǎn)讀取數(shù)據(jù)

 

二、測試mongodb延遲腳本

1.原理

往集群中插入一批數(shù)據(jù),然后從secondary節(jié)點(diǎn)讀取,直到讀到數(shù)據(jù)總數(shù)與插入的總數(shù)相等。

2.腳本內(nèi)容

#!/usr/bin/python
# -*- coding: utf-8 -*-
import pymongo
from pymongo import MongoClient
from pymongo import ReadPreference
import time
import argparse
# 定義執(zhí)行時長裝飾器函數(shù)


def warps(*args):
    def deco(func):
        def _deco(*args, **kwargs):
            # 記錄開始時間
            start = time.clock()
            # 回調(diào)原函數(shù)
            func(*args, **kwargs)
            # 記錄結(jié)束時間
            end = time.clock()
            # 計算執(zhí)行時長
            delat = end - start
            # 轉(zhuǎn)換成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
# 創(chuàng)建插入數(shù)據(jù)函數(shù)


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)
# 創(chuàng)建查詢數(shù)據(jù)函數(shù),引用裝飾器函數(shù)


@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)
# 創(chuàng)建刪除數(shù)據(jù)函數(shù)


def data_delete():
    try:
        collection.remove({})
    except Exception as e:
        print("delete data:", e)
# 創(chuàng)建計算延遲時長函數(shù)


def data_delay(num):
    data_insert(num)
    data_select(num)

if __name__ == '__main__':
    # 定義腳本需要傳入插入的數(shù)據(jù)量,默認(rèn)值為1000,通過-n傳入?yún)?shù)
    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)
向AI問一下細(xì)節(jié)

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

AI