首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在一个请求中建立多个数据库连接是不好的做法?

在一个请求中建立多个数据库连接是不好的做法,原因如下:

  1. 资源消耗:建立数据库连接需要消耗一定的资源,包括内存、CPU、网络带宽等。如果在一个请求中建立多个连接,会导致资源的浪费和过度消耗,从而影响系统的性能和稳定性。
  2. 并发控制:数据库系统通常支持并发控制,即多个用户可以同时访问数据库。但是,如果在一个请求中建立多个连接,会导致并发控制的困难,从而影响数据的一致性和完整性。
  3. 维护困难:如果在一个请求中建立多个连接,会导致代码的可读性和可维护性降低。因为每个连接都需要单独管理和关闭,这会使得代码变得复杂和难以维护。
  4. 数据库性能:数据库系统通常会限制并发连接的数量,以保证系统的稳定性和性能。如果在一个请求中建立多个连接,会导致数据库系统的性能下降,从而影响整个系统的性能。

因此,为了提高系统的性能和稳定性,建议在一个请求中尽量避免建立多个数据库连接。如果需要同时访问多个数据库,可以考虑使用连接池等技术来复用连接,以减少资源消耗和并发控制的困难。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么深度学习,AlphaGo Zero一个巨大飞跃?

AlphaGo ZeroDeepMind自动操作系统最新化身。有人可能会认为,围棋击败人类世界冠军很难。...由于无法表达更复杂复合概念,围棋的人类语言可能低效。AlphaGo Zero似乎能够做到,以一种同时满足多个目标的方式来执行它动作。...通常做法通过执行各种数据操作来增加数据,但是AlphaGo Zero情况下,自动化似乎能够选择更丰富训练数据。...在这两种情况下,你都有两个训练互相馈送网络。 每个人都应该想到一个重要问题:“AlphaGo Zero算法有多普遍?”DeepMind曾公开表示,他们将把这项技术应用于药物研发领域。...然而,许多真实世界环境,我们仍然可以建立精确虚拟世界。当然,这里所发现策略迭代方法似乎适用于这些虚拟世界。强化学习已经应用于虚拟世界(例如电子游戏和战略游戏)

88580

【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群

数据库连接线程池缓存 如果,每一个数据库操作请求都需要创建和销毁连接的话,对数据库来说,无疑也是一种巨大开销。...但是,访问量比较大,机器比较多情况下,这种用法很可能会导致“数据库连接数耗尽”,因为建立连接并不回收,最终达到数据库max_connections(最大连接数)。...建立数据库连接池服务,有很多实现方式,PHP的话,我推荐使用swoole(PHP一个网络通讯拓展)来实现。 3....Web系统规模比较小时候,这种做法看似完美。但是,一旦Web系统规模变大,例如当我有100台Web服务器时候。那样这些磁盘文件,将会有100份,这个资源浪费,也不好维护。...先将修改请求生效cache,让外界查询显示正常,然后将这些sql修改放入到一个队列存储起来,队列满或者每隔一段时间,合并为一个请求数据库更新数据库

864100

亿级Web系统搭建:单机到分布式集群

数据库连接线程池缓存 如果,每一个数据库操作请求都需要创建和销毁连接的话,对数据库来说,无疑也是一种巨大开销。...但是,访问量比较大,机器比较多情况下,这种用法很可能会导致“数据库连接数耗尽”,因为建立连接并不回收,最终达到数据库max_connections(最大连接数)。...建立数据库连接池服务,有很多实现方式,PHP的话,我推荐使用swoole(PHP一个网络通讯拓展)来实现。 3....Web系统规模比较小时候,这种做法看似完美。但是,一旦Web系统规模变大,例如当我有100台Web服务器时候。那样这些磁盘文件,将会有100份,这个资源浪费,也不好维护。...先将修改请求生效cache,让外界查询显示正常,然后将这些sql修改放入到一个队列存储起来,队列满或者每隔一段时间,合并为一个请求数据库更新数据库。 ?

1.3K61

微服务和集群搭建(流程讲解)

数据库连接线程池缓存   如果,每一个数据库操作请求都需要创建和销毁连接的话,对数据库来说,无疑也是一种巨大开销。...但是,访问量比较大,机器比较多情况下,这种用法很可能会导致“数据库连接数耗尽”,因为建立连接并不回收,最终达到数据库max_connections(最大连接数)。...四、 Web服务器和数据库之间建立缓存   实际上,解决大访问量问题,不能仅仅着眼于数据库层面。根据“二八定律”,80%请求只关注20%热点数据上。...先将修改请求生效cache,让外界查询显示正常,然后将这些sql修改放入到一个队列存储起来,队列满或者每隔一段时间,合并为一个请求数据库更新数据库。...一、 核心集中与节点分散   有玩过大型网游同学都会知道,网游有很多个,一般都是按照地域来分,例如广东专区,北京专区。如果一个广东玩家,去北京专区玩,那么他会感觉明显比广东专区卡。

2.1K10

亿级Web系统搭建:单机到分布式集群

数据库连接线程池缓存 如果,每一个数据库操作请求都需要创建和销毁连接的话,对数据库来说,无疑也是一种巨大开销。...但是,访问量比较大,机器比较多情况下,这种用法很可能会导致“数据库连接数耗尽”,因为建立连接并不回收,最终达到数据库max_connections(最大连接数)。...建立数据库连接池服务,有很多实现方式,PHP的话,我推荐使用swoole(PHP一个网络通讯拓展)来实现。 3....Web系统规模比较小时候,这种做法看似完美。但是,一旦Web系统规模变大,例如当我有100台Web服务器时候。那样这些磁盘文件,将会有100份,这个资源浪费,也不好维护。...先将修改请求生效cache,让外界查询显示正常,然后将这些sql修改放入到一个队列存储起来,队列满或者每隔一段时间,合并为一个请求数据库更新数据库。 ?

1K71

分布式 web 集群搭建 -- 存储篇

MySQL 数据库内部缓存使用 建立适当索引 对于 MySQL 优化,最简单做法就是建立索引,表数据量较大时可以起到快速检索数据作用。...建立数据库连接池服务,有很多实现方式,PHP的话,可以使用swoole(PHP一个网络通讯拓展)来实现。...最好做法服务搭建之初就设计为分库分表存储模式,从根本上杜绝中后期风险。... Web 服务器和数据库之间建立缓存 二八定律出现在生活方方面面, web 系统搭建时候也符合这一原理,80% 请求只关注 20% 热点数据上。...先将修改请求生效cache,让外界查询显示正常,然后将这些sql修改放入到一个队列存储起来,队列满或者每隔一段时间,合并为一个请求数据库更新数据库

66510

Redis 7 个错误用法

但是,较旧版本确实允许这种做法为什么不设置密码不是一个做法?没有密码,服务器将会暴露给别人。...最后,KEYS 一个同步命令,因此建立所有这些键响应(特别是如果它们大键)将需要一段时间,更不用说通过网络传输所花费时间了。...Redis 哈希数据结构允许您在一个键下设置一系列键 / 值对 -HGETALL 一个简单命令,可让您一次检索哈希所有内容。很好,因为大多数情况下,您最多要处理三位数个数字段。...5.每个连接一个请求 许多数据库使用 REST 概念作为主要接口,将 POST HTTP 请求发送到相对应端口。数据库获取信息,返回对应状态码,并关闭连接。...让我们换一种说法:如果您有一个 99 个节点集群,并且您单个键一秒钟内可以收到一百万个请求,那么所有这些请求将全部发送到一个节点,而不会分散到其他 98 个节点上。

86720

Java业务系统怎么和MySQL交互

肯定不止,用Java开发Web系统部署Tomcat,Tomcat本身就有多个线程并发处理接收到大量请求: 若Tomcat多个线程并发处理多个请求时,都去抢夺一个连接访问MySQL,那效率肯定很低...: 若Tomcat上百个线程,每个线程每次访问MySQL时,都基于MySQL驱动去创建一个数据库连接,然后执行SQL语句,然后执行完后再销毁该连接。...这样并发频繁创建数据库连接,又频繁销毁数据库连接操作可不好,因为每次建立一个数据库连接都很耗时,好不容易建好连接,执行完SQL,还把它给销毁,下次又得重新建立数据库连接,效率肯定低下: ​ 所以得使用一个数据库连接池...:一个池子里维护多个数据库连接,让多个线程使用池中不同数据库连接去执行SQL,执行完SQL后,不是销毁数据库连接,而是将连接放回池,后续复用。...很多系统要与MySQL建立大量连接,那MySQL必然也得维护与系统之间各个连接,所以MySQL架构体系一个环节,就是连接池。 MySQL本身连接池就维护了与系统之间多个数据库连接

1K30

DDIA 读书分享 第六章 :分区索引和分区均衡

但我们常常会根据名字对用户进行查询,为了加快查询,于是需要基于 name 字段,建立次级索引。 关系型和文档型数据库,次级索引很常见。 KV 存储,为了降低实现复杂度,一般不支持。...次级索引会对每个数据条目建立一个索引条目,这给数据库实现带来了一些问题: 当数据库已有数据时,建立索引,何时针对存量数据构建索引。...为什么说这种策略不好呢?因为他不能应对机器数量变化,如果要增删节点,就会有大量数据需要发生迁移,否则,就不能保证数据 hash(key) mod N 标号机器上。...客户端可以连接集群任意一个节点,如该节点恰有该分区,则处理后返回;否则,根据路由信息,将其路由合适节点。 由一个专门路由层来记录。...但对于关系型数据库产品,尤其支持 大规模并行处理(MPP, Massively parallel processing)数仓,一个查询语句执行层要复杂多,可能会: Stage:由多个阶段组成。

15820

JDBC秒变C3P0连接池——再加连接解耦

那么最好做法,准备出一个空间,此空间里专门保存着全部数据库连接,以后用户用数据库操作时候不用再重新加载驱动、连接数据库之类,而直接从此空间中取走连接,关闭时候直接把连接放回到此空间之中。      ...假设汽车搬运东西连接,那么我可不可以每一次将连接搬运多个呢?而不是jdbc那样,一次只搬运一个连接,然后就把汽车扔掉?这时候,使用连接池。...原理:   连接池基本思想系统初始化时候,将数据库连接作为对象存储在内存,当用户需要访问数据库时,并非建立一个连接,而是从连接池中取出一个建立空闲连接对象。...为什么要用到连接池     数据库连接基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量连接,当需要建立数据库连接时,只需从“缓冲池”取出一个,使用完毕之后再放回去。...最大连接数:连接池能申请最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列,这会影响以后数据库操作 如果最小连接数与最大连接数相差很大:那么最先连接请求将会获利,之后超过最小连接数量连接请求等价于建立一个数据库连接

62230

MongoDB优缺点及设计拙劣之处

在这里,重要要有正确索引和足够大RAM来从MongoDB性能获益。 可扩展和可靠 MongoDB可使用分片进行高度扩展。nosql数据库,水平可扩展一个很大加分。...文本搜索 如果您正在建立一个需要在所有数据搜索网站,文本搜索至关重要。例如,具有文本搜索启用数据库电子商务网站对用户来说可以更有利可图。...不幸MongoDB不支持事务。因此,如果您需要为每个用户请求更新多个文档或集合,请勿使用MongoDB。它可能导致数据损坏,因为没有ACID保证。回滚必须由您应用程序处理。...Join(连接) MongoDBJoin两个文档也不简单。虽然MongoDB 3.2支持左外连接(查找),但还不成熟。如果您应用程序需要在单个查询多个集合中提取数据,则可能无法进行。...如果最终索引错误或复合索引顺序不正确,MongoDB可能最慢数据库之一。 如果你有很多需要过滤和排序字段,你可能需要在一个集合上建立很多索引,这当然不是很好。

6.2K90

最近学习了 HTTP 连接

,对客户端不透明,HttpClient为了缓解这一问题,某个连接使用前会检测这个连接是否过时,如果过时则连接失效,但是这种做法会为每个请求 // 增加一定额外开销,因此有一个定时任务专门回收长时间不活动而被判定为失效连接...这种做法,即使每次请求量都很小,但是客户端和服务端每次建立TCP连接和关闭TCP连接都是相对比较费时过程,严重影响客户端和服务端性能。...针对HTTP1.0改进了什么,只是连接这块,HTTP1.1支持一个TCP连接上传送多个HTTP请求和响应,减少了建立和关闭连接消耗延迟,一定程度上弥补了HTTP1.0每次请求都要创建连接缺点,这就是长连接...首先我们需要明确一个点,连接池中连接数量太多不好、太少也不好: 比如qps=100,因为上游请求速率不可能恒定不变100个请求/秒,可能前1秒900个请求,后9秒100个请求,平均下来qps=100...,当连接数太多时候,可能出现场景高流量下建立连接--->低流量下释放部分连接--->高流量下重新建立连接情况,相当于虽然使用了连接池,但是因为流量不均匀反复建立连接、释放链接 线程数太少当然也是不好

1.4K10

Java 几种线程池,你之前用对了吗

为什么要使用线程池 虽然大家应该都已经很清楚了,但还是说一下。其实归根结底最主要一个原因就是为了提高性能。 线程池和数据库连接同样道理,数据库连接池是为了减少连接建立和释放带来性能开销。...以 web 项目为例,有以下两种情况: 1、每次过来一个请求,都要在服务端创建一个新线程来处理请求请求处理完成销毁线程; 2、每次过来一个请求,服务端在线程池中直接拿过一个空闲线程来处理这个请求,处理完成后还给线程池...除了性能这个最重要原因外,线程池使用可以帮助我们更合理使用系统资源。还是以 web 项目为例,如果我们服务端不使用线程池,而是无节制一个请求创建一个线程,系统资源将会很快被耗尽。...这样做其实有利有弊,好我们不用关心那么多参数,只需要简单指定一两个参数就可以;不好,这样一来又屏蔽了很多细节,如果有些参数使用默认,而开发者又不了解原理情况下,可能会造成 OOM 等问题。...2、newSingleThreadExecutor 建立一个只有一个线程线程池,如果有超过一个任务进来,只有一个可以执行,其余都会放到等待队列,如果有空闲线程,则在等待队列获取,遵循先进先出原则

37300

Redis为什么这么快?Redis单线程还是多线程?

Redis基于内存运行高性能 K-V 数据库,官方提供测试报告单机可以支持约10w/sQPS 二、Redis为什么这么快?...多路I/O复用模型利用 select、poll、epoll 可以同时监察多个 I/O 事件能力,空闲时候,会把当前线程阻塞掉,当有一个多个流有 I/O 事件时,就从阻塞态唤醒,然后程序就会轮询一遍所有的流...这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。...这里我们强调单线程,指的是网络请求模块使用一个线程来处理,即一个线程处理所有网络请求,其他模块仍用了多个线程。 那为什么使用单线程呢?...如图,一次redis请求,要建立连接,然后获取操作命令,然后执行命令,最后将响应结果写到socket上。

68860

Java面试题汇总---整理版(附答案)

TCP连接建立一个三次握手过程,目的是为了通信双方确认开始序号,以便后续通信有序进行。...主要步骤如下: 1)连接开始时,连接建立方发送SYN包,并包含了自己初始序号a; 2)连接接受方收到SYN包后会回复一个SYN包,其中包含对上一个a包回应信息ACK,回应序号为下一个希望收到包序号...NIO比BIO改善之处把一些无效连接了启动线程之前,减少了这部分资源浪费(因为我们都知道每创建一个线程,就要为这个线程分配一定内存空间)。...AIO比NIO进一步改善之处将一些暂时可能无效请求了启动线程之前,比如在NIO处理方式,当一个请求来的话,开启线程进行处理,但这个请求所需要资源还没有就绪,此时必须等待后端应用资源,这时线程就被阻塞了...10,为什么要用线程池? 线程池指在初始化一个多线程应用程序过程创建一个线程集合,然后需要执行新任务时重用这些线程而不是新建一个线程。

67110

为什么基于网络分布式系统不靠谱?

甚至,你都不知道你请求是否已被送达处理。 应对这种情况惯常做法——超时(timeout)。即,设定一个时限,到点后,我们便认为这个请求废了。...故障检测 很多系统里,我们需要自动检测故障节点,并据此做出一些决策: 负载均衡器需要停止对故障节点流量分发。 单主模型分布式数据库,如果主节点故障,需要选出一个从节点顶上。...类似的,计算机网络,数据包延迟大小也通常和排队相关,且有很多环节可能会造成排队: 多个进程可能会把一个进程打死 去程网络排队。...虚拟化环境,由于多个虚拟机共用物理机,因此经常会整体让出 CPU 一段时间情况。让出 CPU 等待期间,不能处理任何外部请求,又会进一步给网络请求排队时延增加变数。 TCP 流控。...设想你使用电路网络传输一个网页,你需要为它预留带宽,如果你预留过低,则传输速度会很慢;如果你预留过高,则可能电路都没法建立(带宽余量不够,就没法建立连接),如果建立了,也会浪费带宽。

19120

【面经分享,附答案】字节 系统架构,二面凉经,后端,秋招提前批,220718

Redis 每个数据库都对应一个 redisDb 结构,其中有一个字典属性 dict,key 保存数据库键,每个键都是一个字符串对象,value 保存这个 key 对应值,每个值可以是任意一种...Redis 对象 7)数据库索引原理 8)TCP 状态机,详细介绍 9)HTTP 1/2/3 介绍 HTTP 1.0:短连接 HTTP 1.1:长连接、管道机制(允许并发请求,不能并发响应,存在响应队头阻塞问题...;客户端调用 connect 请求建立连接。...两个阶段都是阻塞;优势不在于处理单个连接可以更快,而在于可以同时监听多个连接 16)介绍下红黑树,插入过程说一下呢 17)以 TCP 连接过程为例,介绍下 Socket 编程过程中用到 API(同上...hard 大概率就是前面答得不好 长风破浪会有时,我小牛肉,小伙伴们下篇文章再见

41920

网页打开时都发生了什么?我被吓着了

● PageCache 这个最快了,直接在内存缓存了现有网页DOM结构和渲染结果,这就是你为什么点前进后退时候会这么快。   ...,专门缓存这些数据库对象,据《淘宝技术这10年》称可以减少99.5%数据库访问。   ...小米路由器和搜狗合作预取引擎其实就相当于路由器上加一层缓存款顺便智能预取一下。为什么在这里另起一段专门谈小米呢?难不成小米水军?...可以Http Header中看到,具体就不细说了。   未来协议:SPDY   上面的都是传统做法,下面讲一个未来技术。...SPDY主要有下面的特点:   ● 一个TCP连接上并行多个HTTP连接,减少连接建立时间。   ● 请求优先级(目前还没看到具体实现)。

1.7K60

从输入URL到页面加载完过程中都发生了什么事情

●PageCache 这个最快了,直接在内存缓存了现有网页dom结构和渲染结果,这就是你为什么点前进后退时候会这么快。...,专门缓存这些数据库对象,据《淘宝技术这10年》称可以减少99.5%数据库访问。...小米路由器和搜狗合作预取引擎其实就相当于是路由器上加一层缓存款顺便智能预取一下。博主为什么在这里另起一段专门谈小米呢,难不成小米水军?...可以Http Header中看到,具体就不细说了。 未来协议 SPDY 上面的都是传统做法,下面讲一个未来技术。...SPDY主要有下面的特点: ●一个TCP连接上并行多个HTTP连接,减少连接建立时间 ●请求优先级(目前还没看到具体实现) ●HTTP头部压缩,上文提到HTTP压缩对HTTP body压缩,并没有对头部压缩

1.4K100

Redis 关键知识

存储层 索引模块 内存键值数据库一般都会用哈希表作为索引,因为键值都是存储在内存,内存随机访问性能高,可以与哈希表O(1)操作复杂度相匹配。 2....一个,多线程数据访问存在竞争,需要加锁,会带来额外开销,特别是如果设计不好,锁粒度控制不好,系统吞吐率没有因为线程增加而增加。 另外一个,多线程会降低系统代码易调试性和可维护性。...RDB Redis 提供了两个命令来生成RDB文件,分别是save和bgsave, 一个主线程执行,一个创建子进程执行。默认bgsave方式,毕竟要不能阻塞主线程。...通知: 让从库执行replicaof,与新主库建立连接,通知客户端,与新主库连接。 哨兵如何组成集群呢?...哨兵启动时候,只是跟主库建立连接,并不感知其他哨兵存在,他通过订阅主库"__sentinel__:hello" 频道,哨兵与主库建立连接时,就会把自己IP和端口发布到这个频道上,所有哨兵都订阅这个频道

37020

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券