热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mongodb副本集和分片示例详解

前言因为之前没用过mongo,所以最近的开发踩了不少坑,现在熟练了不少。mongo在许多地方用起来还有许多不如意的地方,比如不知道如何加行锁,虽然mongo本身可以加写锁,多写的时候保证原子性,但不能向mysql在事务中selectforupdat

前言

因为之前没用过mongo,所以最近的开发踩了不少坑,现在熟练了不少。

mongo在许多地方用起来还有许多不如意的地方,比如不知道如何加行锁,虽然mongo本身可以加写锁, 多写的时候保证原子性,但不能向mysql在事务中select ... for update 这样加锁, 这样可以在应用代码中添加逻辑并且保证该对应行不被读取或修改。

还好的是Mongodb4.0是支持事务的(看网上貌似3.6就支持了,但得自己开启)。刚好前端时间有些业务需求需要用到事务来保证数据的准确性,因为一个动作内有多条出入和修改的操作,如果中途报错需要回滚。

连接mongo的shell后使用db.version() 来查看mongodb的版本

Python只用mongo事务

在python中使用使用pymongo 来操作数据库

import pymongo
mc = pymongo.MongoClient('mongodb://localhost:27018', cOnnect=False, maxPoolSize=2000)
with mc.start_session() as session:
 with session.start_transaction():
  mc['test']['test'].insert_one({'a': 1}, session=session)
  mc['test']['test'].delete_one({'a': 1}, session=session)
  ...

但在实际使用中却报了个错

MongoError: Transaction numbers are only allowed on a replica set member or mongos.

上网搜索后很多解决方法都是npm安装一个什么包,然后用它启动mongo。

其实根据英文的意思也差不多能明白是怎么回事,网上搜索后发现了根本原因:事务只支持副本集和切片。而我这开发环境是直接mongod启的

副本集

副本集搭建

启动两个mongodb服务(一个master,一个slave)

# 1
/usr/local/mongodb/mongodb4.0.10/bin/mongod \

--bind_ip=0.0.0.0 --port=27018
--logpath=/var/log/mongodb/mongodb_4_0_10.log \

--dbpath=/data/mongo_4.0.10_db \

--replSet rs0 --fork
# 2
/usr/local/mongodb/mongodb4.0.10/bin/mongod \

--bind_ip=0.0.0.0 --port=27019 \

--logpath=/var/log/mongodb/mongodb_4_0_10-2.log \

--dbpath=/data/mongo_4.0.10_db-2 \

--replSet rs0 --fork

在mongo shell中执行

# 启动一个新的副本集
rs.initiate()
# 添加一个副本集
rs.add("localhost.localdomain:27019")

这样的的话就可以使用mongodb的事务了

单节点也是支持事务的,我多加一个slave节点只是为了测试一下

slave节点读

默认slave节点是不能读的,在Mongo客户端使用命令db.setSlaveOk() 来开启slave节点读,

这样的可以读写分离(master写,slave读),关于slave读对副本集间的同步的影响我没有实践就不写了,网上有资料介绍。

master选举

http://www.mongoing.com/archives/295

分片

分片集群我没有搭建,这里有个文章写的比较不错,分片加副本集搭建,这样既分流的数据也保证了数据的备份。等有时间自己搭建我在详细记录这里的坑

https://www.ddpool.cn/article/167276.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。


推荐阅读
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • 尽管存在唯一列,仍显示“当前选择不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用”的消息。 ... [详细]
  • Liferay Portal 中 AutoEscape 构造函数的应用与实例代码解析 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • 本文介绍了一种专为清洁工人设计的自定义文本烟花效果。通过该功能,用户可以输入特定的感谢或祝福语句,系统将生成绚丽的烟花动画,以表达对清洁工人的敬意和感激之情。该特效不仅美观,还能增强用户的互动体验,提升公共场合的氛围。 ... [详细]
  • 利用C#技术实现Word文档的动态生成与编辑
    本文通过一个简单的示例,介绍了如何使用C#语言实现Word文档的动态生成与编辑功能。文章详细阐述了在项目中引用Word动态库的方法,并通过具体代码示例展示了如何创建和操作Word表格。此内容旨在为初学者提供参考和学习资料,欢迎读者提出宝贵意见和建议。 ... [详细]
  • 在 Android 开发中,通过合理利用系统通知服务,可以显著提升应用的用户交互体验。针对 Android 8.0 及以上版本,开发者需首先创建并注册通知渠道。本文将详细介绍如何在应用中实现这一功能,包括初始化通知管理器、创建通知渠道以及发送通知的具体步骤,帮助开发者更好地理解和应用这些技术细节。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解
    PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • 本文详细探讨了如何有效解决Oracle数据库中常见的ORA-01578和ORA-26040错误。这些错误通常与数据块损坏有关,严重影响数据库的稳定性和数据完整性。文章不仅提供了详细的故障诊断步骤,还介绍了多种修复方法,包括使用RMAN工具、手动修复数据块以及预防措施,以帮助数据库管理员高效应对这些问题。 ... [详细]
  • 多种实现 Windows 定时自动执行任务的专业技巧与方案
    在Windows系统中,实现定时自动执行任务有多种专业技巧和方案。常见的方法包括:使用Windows任务计划程序、开发Windows服务以及利用SQL Server Agent作业。这些方法被广泛应用于各种自动化场景,多数技术人员对此都有所了解。 ... [详细]
author-avatar
mobiledu2502860217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有