首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库连接与原始TCP连接

数据库连接与原始TCP连接
EN

Database Administration用户
提问于 2018-12-27 16:21:46
回答 2查看 4.3K关注 0票数 4

关于数据库客户端与数据库的交互方式,我有一些基本问题

  1. 数据库是否同时支持来自客户端的单个数据库连接上的多个事务?若否,原因为何?(由于多路复用将节省每个连接的资源开销&当需要同时执行数千个同时查询时,连接池是一个争用源,这肯定避免了多路复用)
  2. 数据库客户端级别连接与物理原始TCP连接之间的关系如何?是一对一的多路一对一吗?如果没有多路复用,为什么不?
  3. 如果多路复用,数据库服务器是否从其末端(或)多个逻辑连接维护单个逻辑连接?

PS:我知道其中的一些细节会因数据库的不同而有所不同,但总的来说,它想知道流行的实现,如Postgres、Mysql、Oracle、SQL server和DB2如何实现这些

EN

回答 2

Database Administration用户

发布于 2018-12-27 16:48:39

数据库是否同时支持来自客户端的单个数据库连接上的多个事务?

对于Server,没有。

若否,原因为何?(因为多路复用将节省每个连接的资源开销)

这将使网络协议变得非常复杂,该协议必须在多个客户端平台上实现,从而可能产生错误和性能问题。

由多个连接引起的资源开销很小,并且通过连接池在很大程度上减轻了资源开销,其中一组长期存在的连接在客户机程序中的所有线程之间共享。

票数 11
EN

Database Administration用户

发布于 2018-12-27 18:27:58

您在Q1中暗示的并行性被夸大了。即使你可以并行地做事情,这个系统也会因为很多原因而陷入困境:

  • 碰到一些资源的砖墙: CPU / Network /磁盘I/O /等。
  • 将有“关键部分”和其他联锁,以防止相互踩在一起。对于“少数”连接/事务/等等,这不是什么大问题。但即使在几十年前,这个系统也开始明显地在自身问题上步履蹒跚。
  • 一些多线程应用程序碰到了一个算法砖墙。排序是一个典型的例子。也许您可以启动100个线程(并获得近100倍的加速比)来计算大列表中的项,但是如果需要对结果集进行排序,则应用程序将无法在该阶段获得接近100倍加速的任何信息。然后,您必须将所有数据放入一个单独的流中进行传递!

如果您停止执行必要的要求,那么数据库的设计就更容易了:单独的客户端不能互相踩在一起。然后,在单个客户端中,更容易一次只做一件事。

学习接吻的知识。

至于TCP层--你有机会设计一个路由器来实现你的建议。你可以赚几百万。但是它属于低级别,而不是在数据库引擎中。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/225859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档