Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当从.NET中访问PostgreSQL时,是否存在阻止Npgsql同时提供多个读卡器的内在限制?_.net_Postgresql_Npgsql - Fatal编程技术网

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

当从.NET中访问PostgreSQL时,是否存在阻止Npgsql同时提供多个读卡器的内在限制?,.net,postgresql,npgsql,.net,Postgresql,Npgsql,有许多Internet源(Stackoverflow或其他)表明Npgsql不支持SQLServer支持的MARS(多个活动读卡器)。这是PostgreSQL固有的限制吗?或者它更多地与Npgsql的设计有关? 换句话说,是否可以通过向Npgsql提供此功能来解决这个问题,或者这项工作注定要失败? (我知道PostgreSQL社区提出了一个令人信服的理由,即“为什么人们甚至需要这样的东西,PostgreSQL允许更好地表述SQL语句,以完全缓解这种需要。”。让我们只说,这是关于照顾系统与数以

有许多Internet源(Stackoverflow或其他)表明Npgsql不支持SQLServer支持的MARS(多个活动读卡器)。这是PostgreSQL固有的限制吗?或者它更多地与Npgsql的设计有关?
换句话说,是否可以通过向Npgsql提供此功能来解决这个问题,或者这项工作注定要失败?

(我知道PostgreSQL社区提出了一个令人信服的理由,即“为什么人们甚至需要这样的东西,PostgreSQL允许更好地表述SQL语句,以完全缓解这种需要。”。让我们只说,这是关于照顾系统与数以万计的现有SQL语句,并重写他们一个接一个显然不是一个选项)

真正的问题是在引擎盖下发生了什么,以支持一个功能,如火星

在有线级别上,Npgsql和PostgreSQL之间的通信非常简单:有一个TCP套接字,Npgsql向PG发送一个查询,PG使用该查询的整个结果集进行响应-单往返

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

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

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


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

真正的问题是引擎盖下会发生什么来支持火星这样的功能

在有线级别上,Npgsql和PostgreSQL之间的通信非常简单:有一个TCP套接字,Npgsql向PG发送一个查询,PG使用该查询的整个结果集进行响应-单往返

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

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

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


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

“一个接一个地重写它们显然不是一种选择”——这绝对是一种选择;这不是你积极想要的选择;坦白地说,如果您使用SQL Server启用了MARS,那么您的代码中已经犯了一些根本错误。关于npgsql的一个有趣的问题,但我从来没有看到过。谢谢你评论我可能做错了什么。我不认为这一切都是针对个人的,因为它确实不是我的代码。不过,这是我试图解决的问题。我同意,只要在一旁等待,这个功能就永远不会出现在Npgsql中。我的问题是,作为一种贡献,它在技术上是否可行,而不是作为一种希望,让社区参与其中。“一个接一个地重写它们显然不是一种选择”——这绝对是一种选择;这不是你积极想要的选择;坦白地说,如果您使用SQL Server启用了MARS,那么您的代码中已经犯了一些根本错误。关于npgsql的一个有趣的问题,但我从来没有看到过。谢谢你评论我可能做错了什么。我不认为这一切都是针对个人的,因为它确实不是我的代码。不过,这是我试图解决的问题。我同意,只要在一旁等待,这个功能就永远不会出现在Npgsql中。我的问题是,作为一种贡献,而不是作为社会的愿望,这在技术上是否可行。