加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 系统 > 正文

巧用python测试mongodb副本集数据同步延迟

发布时间:2023-11-03 14:51:43 所属栏目:系统 来源:
导读:本文主要介绍python如何连接mongodb副本集及读写分离配置,mongodb副本集数据同步延迟测试。

一、python连接mongodb副本集

1.连接副本集

在新版的驱动中直接使用MongoClient连接

如下:

from pym
本文主要介绍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)
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章