爬虫工作量由小到大的思维转变---<第四十三章 Scrapy Redis mysql数据连通问题(2)>

前言:

接上一章的爬虫工作量由小到大的思维转变---<第四十一章 Scrapy Redis 转mysql数据连通问题>-CSDN博客

这一章主要是讲关于多机连上sql要注意的问题!

正文:

会遇到哪些问题:

  1. 数据重复写入:当多个Scrapy-Redis实例同时运行并将数据写入同一个MySQL数据库时,可能会导致数据重复写入的问题。这是因为Scrapy-Redis使用分布式爬取的原理,多个实例可能会同时获取相同的URL并产生重复的数据。为了解决这个问题,可以在Scrapy-Redis中添加去重处理,例如使用请求指纹(request fingerprint)进行去重。

  2. 数据冲突和并发性问题:在多台机器同时向同一个MySQL数据库写入数据时,可能会出现数据冲突和并发性问题。这是因为多个机器同时写入数据时,可能会对同一个数据库表进行操作,导致数据的一致性和完整性问题。为了解决这个问题,可以考虑使用数据库事务(database transaction)、加锁机制或者分布式锁来确保数据的一致性和并发性。

  3. 数据同步延迟:由于网络延迟等原因,当多台机器同时写入MySQL数据库时,数据同步可能会有一定的延迟。这意味着数据在一个机器上写入后,需要一定的时间才能在其他机器上同步更新。为了解决这个问题,可以使用异步写入或者定时任务等方法来确保数据同步并保持一致性。

  4. 数据库连接数限制:当多台机器同时连接到同一个MySQL数据库时,可能会遇到数据库连接数限制的问题。MySQL服务器通常有默认的最大连接数限制,如果超过了这个限制,可能会导致连接被拒绝或无法正常连接。为了解决这个问题,可以根据需求调整MySQL服务器的最大连接数配置,或者使用连接池来管理连接和提高连接的复用性。

 在使用Scrapy-Redis在多台电脑上向同一个MySQL数据库写入数据时,需要注意数据重复写入、数据冲突和并发性问题、数据同步延迟以及数据库连接数限制等可能遇到的问题。根据实际需求,可以使用去重处理、事务或锁机制、异步写入或定时任务、调整最大连接数等方法来解决这些问题。保证数据的一致性、完整性和高可用性是在多台机器上同时写入MySQL时需要特别关注的问题。

用一个最简单的方式解决一些棘手的问题:

from sqlalchemy import create_engineengine = create_engine("mysql+pymysql://用户名:密码@localhost(或者ip地址):3306/数据库名",pool_size=10,  # 连接池大小max_overflow=20,  # 允许超出连接池大小的最大连接数pool_timeout=30,  # 获取连接的最大等待时间(秒)pool_recycle=1800,  # 连接回收时间(秒)
)

在通过pymysql和SQLAlchemy进行多并发写入时,使用如上所示的设置有以下好处:

  1. Connection Pool(连接池):通过设置pool_size参数,可以指定连接池的大小。连接池允许维护多个数据库连接,这样在并发写入时可以重用数据库连接,避免频繁的建立和关闭连接,提高性能和效率。

  2. Max Overflow(超出连接池大小的最大连接数):通过设置max_overflow参数,可以允许连接池中的连接数量超过pool_size的大小。当并发写入的请求数量超过连接池大小时,可以创建额外的连接以满足更高的并发需求,避免请求被阻塞或排队等待。

  3. Pool Timeout(获取连接的最大等待时间):通过设置pool_timeout参数,可以指定获取数据库连接的最大等待时间。如果连接池中的连接已被其他连接占用完,并且在超过指定的等待时间后仍然没有可用连接,则新的请求将放弃等待并抛出适当的异常或错误。

  4. Pool Recycle(连接回收时间):通过设置pool_recycle参数,在连接周期内保持连接的最大时间。这有助于防止连接变得过期或无效,因为在一段时间后连接将被回收并重新创建,以避免潜在的性能问题。

通过合理设置连接池和其他参数,可以优化代码在多并发写入场景下的数据库连接和资源管理。这些设置可以提高数据库的性能和可扩展性,同时避免与数据库的连接问题相关的错误和延迟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直播相关——腾讯直播SDK(一)

梳理了下项目中使用的腾讯直播SDK相关,为再接入一套声网RTC SDK做些准备工作。 1.sdk集成 dependencies {implementation com.tencent.liteav:LiteAVSDK_Professional:latest.release }初始化与摄像头推流相关 初始化与摄像头推流相关 2.给 SDK 配置 License 授…

寒假刷代码随想录

数组 二分 在循环中 始终坚持根据查找区间的定义来做边界处理。 第一种写法,我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right] (这个很重要非常重要)。 区间的定义这就决定了二分法的代码应该如何写&#xff0…

JMeter HTTP请求的详细指南,还不知道的快来看

HTTP请求简介 在JMeter中,服务器名称和它的路径对于检查请求是否到达了正确的目的地非常重要。默认情况下,HTTP协议与请求一起被遵循,如果需要,可以转换为HTTPS。如果需要,用户参数可以包含在特定页面的请求中。如果&a…

MySQL查询缓存

MySQL查询缓存 MySQL在查询的时候首先会查询缓存,如果缓存命中的话就直接返回结果,不需要解析sql语句,也不会生成执行计划,更不会执行;如果没有命中缓存,则再进行SQL解析以及进行查询,并将结果返…

机器学习系列-2 线性回归训练损失

机器学习系列-2 线性回归&训练损失 学习内容来自:谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1 线性回归: 举例:蝉(昆虫物种&…

安装配置sqoop

一、了解Sqoop 1、Sqoop产生的原因 A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。 B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。 以上是sqoop产生的主要原因,也因此Sqoop主要用于hadoop与关系型数据库之…

java下载网络文件

/*** 下载文件** param urlStr* param response* throws Exception*/ GetMapping("/downLoadFile") public void downLoadFile(String urlStr, HttpServletResponse response) throws Exception{// 定义一个URL对象,就是你想下载的图片的URL地址URL url …

【C++】类和对象2:this指针

前言 今天来学习this指针 引入 我们用一个日期Date类来举个例子 class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout <<_year<< "-" <<_month << "-"<…

深度学习:数据驱动的人工智能革命

文章目录 每日一句正能量前言什么是深度学习推动AI发展不同阶段的“三大驱动 ”1、技术驱动&#xff1a;算法和计算力是主要驱动力2、计算力的三驾马车&#xff1a;芯片、超级计算机、云计算3、数据驱动&#xff1a;描绘个性化画像&#xff1b; 后记 每日一句正能量 一般青年的…

自然语言处理(02/10):自然语言处理任务和应用程序

一、描述 在广阔的人工智能领域&#xff0c;自然语言处理 &#xff08;NLP&#xff09; 是一个迷人而充满活力的领域。NLP 弥合了计算机和人类语言之间的鸿沟&#xff0c;使机器能够理解、解释和生成类似人类的文本。这项变革性技术具有深远的影响&#xff0c;影响着我们日常生…

telnet笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、场景二、介绍1.测试端口2.访问百度3. 简单的爬虫 前言 最近telnet命令用的比较多&#xff0c;所以记录一下。 一、场景 ping应该是大家最常用的命令&…

深入理解Istio服务网格数据平面Envoy

一、服务网格概述(service mesh) 在传统的微服务架构中&#xff0c;服务间的调用&#xff0c;业务代码需要考虑认证、熔断、服务发现等非业务能力&#xff0c;在某种程度上&#xff0c;表现出了一定的耦合性 服务网格追求高级别的服务流量治理能力&#xff0c;认证、熔断、服…

macOS的设置与常用软件(含IntelliJ IDEA 2023.3.2 Ultimate安装,SIP的关闭与开启)

目录 1 系统设置1.1 触控板1.2 键盘 2 软件篇2.1 [科学上网](https://justmysocks5.net/members/)2.1 [安装Chrome浏览器](https://www.google.cn/chrome/index.html)2.2 [安装utools](https://www.u.tools)2.3 [安装搜狗输入法](https://shurufa.sogou.com/)2.4 [安装snipaste…

一、Redis之NoSQL

1.1 什么是NoSQL NoSQL&#xff08;Not Only SQL&#xff09;即不仅仅是SQL&#xff0c;泛指非关系型的数据库&#xff0c;它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;非关系数据库产…

微服务架构中的关键组件:Dubbo、Nacos、Feign 和 Eureka

在构建微服务架构时&#xff0c;服务发现、配置管理和服务调用是不可或缺的组成部分。本文将详细介绍三个在这些领域中广泛使用的开源项目&#xff1a;Dubbo、Nacos 和 Eureka&#xff0c;它们各自的特点、区别以及适用的场景。 Dubbo Dubbo 是一个由阿里巴巴开源的高性能、轻…

【Git】03 图形化工具

文章目录 一、右击菜单二、打开仓库三、可视化所有分支历史四、总结 一、右击菜单 二、打开仓库 三、可视化所有分支历史 四、总结 图形化工具了解一下&#xff0c;要懂得在哪里能找到。

Vue工程引入Element-ui

npm 安装ELement-ui npm i element-ui -S 于package.json中发现有“element-ui”版本号即可 引入 Element 在 main.js 中写入以下内容&#xff1a; import element-ui/lib/theme-chalk/index.css; import ElementUI from element-ui;Vue.use(ElementUI);之后根据自己的需求设计…

数据库指定某个列的某个值优先排序

有时候接到这么一个需求&#xff0c;就是指定某个商品某个品牌优先展示&#xff0c;那么数据库SQL该怎么实现呢&#xff1f; 比如商品表&#xff08;goods&#xff09;&#xff0c;有个品牌字段&#xff08;brand&#xff09;&#xff0c;公司要求优先展示【华为】品牌的商品&…

代码随想录二刷——栈与队列day11

文章目录 前言栈与队列知识点 一、 20. 有效的括号二、1047. 删除字符串中的所有相邻重复项三、150. 逆波兰表达式求值总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0…

质量管理 了解

定义 质量管理就是在一定的技术经济条件下&#xff0c;为保证和提高产品质量所进行的一系列经营管理活动的总称。该管理活动包括质量管理体系的制定&#xff0c;质量的控制&#xff0c;质量的验收与评定等相关内容。 国际标准和国家标准的定义&#xff1a;质量管理是“在质量方…