gpt4 book ai didi

.net - 当从 .NET 中访问 PostgreSQL 时,是否存在阻止 Npgsql 提供多个同时读取器的内在限制?

转载 作者:行者123 更新时间:2023-11-29 14:25:10 25 4
gpt4 key购买 nike

有许多 Internet 资源(Stackoverflow 或其他)表明 Npgsql 不支持 SQLServer 所支持的 MARS(多个事件阅读器)。这是 PostgreSQL 的内在限制吗?或者它更多地与 Npgsql 的设计有关?
换句话说,是否可以通过将此功能贡献给 Npgsql 来解决这个问题,还是这种努力注定要失败?
(我知道 PostgreSQL 社区根据“为什么人们甚至需要这样的东西,PostgreSQL 允许更好地制定 SQL 语句来完全缓解需求”提出了一个令人信服的案例。我们只是说这是关于关心系统现有的几万条SQL语句,一条一条重写显然不是一种选择)

最佳答案

真正的问题是在幕后发生了什么来支持像 MARS 这样的功能。

在线路层面上,Npgsql 和 PostgreSQL 之间的通信非常简单:有一个 TCP 套接字,Npgsql 向 PG 发送查询,PG 响应该查询的整个结果集 - 单次往返。

MARS 的各种模型使得 Npgsql 每次获取 X 行,而不是获取整个结果; Npgsql 会在内存中缓冲 X 行,并在用户使用完这些行后进行新的往返。这将允许 MARS,但代价是为每个单个查询引入大量新的网络往返:您现在有 N 次往返,而不是一次往返,其中 N 是行数除以 X。这里的性能影响相当大.行缓冲也有内存开销。

另一种可能性是让 Npgsql 读取整个结果集并将其缓冲在内存中,因此每个查询都会立即被消耗,从而允许执行其他查询。这里的缺点显然是缓冲整个结果集的潜在巨大内存开销。

所以 MARS 是绝对有可能的,问题是它是如何实现的,以及你为它付出的代价是什么。我时不时地从开发人员那里收到从 SQL Server 移植代码的请求,但老实说,人们并没有经常要求它。

请注意,最后一个选项可能与我们正在为下一个主要版本探索的一些性能更改更相关。但还不确定。

关于.net - 当从 .NET 中访问 PostgreSQL 时,是否存在阻止 Npgsql 提供多个同时读取器的内在限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58620842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com