Npsql is much faster than ODBC ?

Started by Peter Caiover 18 years ago17 messagesgeneral
Jump to latest
#1Peter Cai
newptcai@gmail.com

Hi all,

Recently I found my C/S program becomes slow. So I analysed the tcp
traffic between my program and the Postgresql database. I found there
are occasionally tcp re-transmission and that's why my porgram slow
down.

But when I changed to npsql, the tcp traffic was cut off to only 1/4
and there are much fewer re-transmission. I am not sure it's the
problem of odbc or it's because that I am using odbc correctly.

#2Ilan Volow
listboy@clarux.com
In reply to: Peter Cai (#1)
Re: Npsql is much faster than ODBC ?

I've never used Npsql and I'm not a C# developer (so take this
response with more than a few grains of salt) but from what I
remember reading somewhere, Npsql implements postgres protocols
natively, with the protocol handling done directly in C# and getting
the raw data without going through any other software layers (such as
other interfaces that wrap libpq). There are several layers of
software between an application speaking ODBC and a PostgreSQL
server, and you'll probably get a speed hit going through each of
those layers.

-- Ilan

On Nov 5, 2007, at 10:42 AM, 一首诗 wrote:

Hi all,

Recently I found my C/S program becomes slow. So I analysed the tcp
traffic between my program and the Postgresql database. I found there
are occasionally tcp re-transmission and that's why my porgram slow
down.

But when I changed to npsql, the tcp traffic was cut off to only 1/4
and there are much fewer re-transmission. I am not sure it's the
problem of odbc or it's because that I am using odbc correctly.

---------------------------(end of
broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org/

Ilan Volow
"Implicit code is inherently evil, and here's the reason why:"

#3Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Cai (#1)
Re: Npsql is much faster than ODBC ?

????????? wrote:

Hi all,

Recently I found my C/S program becomes slow. So I analysed the tcp
traffic between my program and the Postgresql database. I found there
are occasionally tcp re-transmission and that's why my porgram slow
down.

But when I changed to npsql, the tcp traffic was cut off to only 1/4
and there are much fewer re-transmission. I am not sure it's the
problem of odbc or it's because that I am using odbc correctly.

FYI there's another Postgres ODBC driver that is said to have better
performance.

https://projects.commandprompt.com/public/odbcng

(Yes, my company maintains it)

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

#4Rainer Bauer
usenet@munnin.com
In reply to: Peter Cai (#1)
Re: Npsql is much faster than ODBC ?

Alvaro Herrera wrote:

FYI there's another Postgres ODBC driver that is said to have better
performance.

https://projects.commandprompt.com/public/odbcng

(Yes, my company maintains it)

psqlodbc is licenced under LGPL, but ODBCng uses the GPL.

That means that commercial software cannot use the ODBCng driver. Are there
any plans to release it under LGPL licence?

Rainer

#5Joshua D. Drake
jd@commandprompt.com
In reply to: Rainer Bauer (#4)
Re: Npsql is much faster than ODBC ?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, 06 Nov 2007 22:03:52 +0100
Rainer Bauer <usenet@munnin.com> wrote:

Alvaro Herrera wrote:

FYI there's another Postgres ODBC driver that is said to have better
performance.

https://projects.commandprompt.com/public/odbcng

(Yes, my company maintains it)

psqlodbc is licenced under LGPL, but ODBCng uses the GPL.

That means that commercial software cannot use the ODBCng driver. Are
there any plans to release it under LGPL licence?

The only time this would be an issue is if you tried to embed the
driver. Other than that, you are more than welcome to use closed source
software against the ODBCng driver.

Joshua D. Drake

Rainer

---------------------------(end of
broadcast)--------------------------- TIP 3: Have you checked our
extensive FAQ?

http://www.postgresql.org/docs/faq

- --

=== The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 24x7/Emergency: +1.800.492.2240
PostgreSQL solutions since 1997 http://www.commandprompt.com/
UNIQUE NOT NULL
Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
PostgreSQL Replication: http://www.commandprompt.com/products/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHMRG8ATb/zqfZUUQRAib0AJ9kti8nA36Q6slwtDS6/wJ5u80AVACdFXnD
HW8SjKOz/hDbCpmd0FFiO34=
=JHH/
-----END PGP SIGNATURE-----

#6Rainer Bauer
usenet@munnin.com
In reply to: Peter Cai (#1)
Re: Npsql is much faster than ODBC ?

"Joshua D. Drake" wrote:

psqlodbc is licenced under LGPL, but ODBCng uses the GPL.

That means that commercial software cannot use the ODBCng driver. Are
there any plans to release it under LGPL licence?

The only time this would be an issue is if you tried to embed the
driver. Other than that, you are more than welcome to use closed source
software against the ODBCng driver.

That's nice to hear. But I respect licences as they are and the ODBCng driver
is licenced under the GPL.

So is this an _official_ statement from CommandPrompt that the driver can be
used in commercial applications? If so then either this should be stated on
the drivers' page (or the licence should be changed to LGPL).

Rainer

#7Joshua D. Drake
jd@commandprompt.com
In reply to: Rainer Bauer (#6)
Re: Npsql is much faster than ODBC ?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Wed, 07 Nov 2007 02:40:08 +0100
Rainer Bauer <usenet@munnin.com> wrote:

That's nice to hear. But I respect licences as they are and the
ODBCng driver is licenced under the GPL.

So is this an _official_ statement from CommandPrompt that the driver
can be used in commercial applications? If so then either this should
be stated on the drivers' page (or the licence should be changed to
LGPL).

The official statement is, you can use it in commercial applications as
long as you don't violate the GPL.

Sincerely,

Joshua D. Drake

- --

=== The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 24x7/Emergency: +1.800.492.2240
PostgreSQL solutions since 1997 http://www.commandprompt.com/
UNIQUE NOT NULL
Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
PostgreSQL Replication: http://www.commandprompt.com/products/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHMRrEATb/zqfZUUQRAoSHAJ4nfRd578obPDtvXgLY2L4LiJvyeACgqN84
CCBwO5pCIOO2NIQiiHcq80U=
=Z1yA
-----END PGP SIGNATURE-----

#8Andrej Ricnik-Bay
andrej.groups@gmail.com
In reply to: Rainer Bauer (#6)
Re: Npsql is much faster than ODBC ?

On Nov 7, 2007 2:40 PM, Rainer Bauer <usenet@munnin.com> wrote:

That's nice to hear. But I respect licences as they are and the ODBCng driver
is licenced under the GPL.

That doesn't mean that you're not allowed to use it with commercial
applications; it just means that you need to be happy to provide the
source for it on request.

Rainer

Cheers,
Andrej

--
Please don't top post, and don't use HTML e-Mail :} Make your quotes concise.

http://www.american.edu/econ/notes/htmlmail.htm

#9Peter Cai
newptcai@gmail.com
In reply to: Alvaro Herrera (#3)
Re: Npsql is much faster than ODBC ?

Thanks. I have tried your program. But it seems that it has trouble with
EUC_CN.
It returns unrecoginzed value of empty columns.

BTW: I've solved this problem. Every one using odbc on windows shuold read
this mail:

psqlODBC with Visual Studio 2005 and Connection Pooling for
newbies<http://archives.postgresql.org/pgsql-odbc/2005-12/msg00274.php&gt;

On Nov 7, 2007 4:48 AM, Alvaro Herrera <alvherre@commandprompt.com> wrote:

????????? wrote:

Hi all,

Recently I found my C/S program becomes slow. So I analysed the tcp
traffic between my program and the Postgresql database. I found there
are occasionally tcp re-transmission and that's why my porgram slow
down.

But when I changed to npsql, the tcp traffic was cut off to only 1/4
and there are much fewer re-transmission. I am not sure it's the
problem of odbc or it's because that I am using odbc correctly.

FYI there's another Postgres ODBC driver that is said to have better
performance.

https://projects.commandprompt.com/public/odbcng

(Yes, my company maintains it)

--
Alvaro Herrera
http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

--
古希腊有一种哲人,穿着很宽的袍子走来走去。他们会划优美的曲线,其中包含了自己全部的心胸。他们的朋友也是智者,只有智者们互相之间才能明白彼此的曲线彼此的心胸。

#10Rainer Bauer
usenet@munnin.com
In reply to: Peter Cai (#1)
Re: Npsql is much faster than ODBC ?

"Andrej Ricnik-Bay" wrote:

On Nov 7, 2007 2:40 PM, Rainer Bauer <usenet@munnin.com> wrote:

That's nice to hear. But I respect licences as they are and the ODBCng driver
is licenced under the GPL.

That doesn't mean that you're not allowed to use it with commercial
applications; it just means that you need to be happy to provide the
source for it on request.

Which is exactly the reason why the LGPL licence was created. So that any
software can link against a library without the restrictions of the GPL.

Rainer

#11Sam Mason
sam@samason.me.uk
In reply to: Alvaro Herrera (#3)
odbcng

On Tue, Nov 06, 2007 at 05:48:12PM -0300, Alvaro Herrera wrote:

FYI there's another Postgres ODBC driver that is said to have better
performance.

https://projects.commandprompt.com/public/odbcng

(Yes, my company maintains it)

Are there any known issues when calling it from VB? I've got a VB (MS
Access) client that uses PG as its backend and it seems to die horribly
when doing any sort of query that returns a text column. This happens
through either DAO or ADO; though DAO gives the error "the size of a
field is too long", ADO just segfaults.

For example, the following code doesn't work for me. Looks like the
sort of thing that that should get lots of test coverage so maybe it's
something on my system.

Public Sub test()
Dim con As ADODB.Connection, rs As ADODB.Recordset

Set con = New ADODB.Connection
con.Open "DSN=badgerstudy"

Set rs = con.Execute("SELECT 1, 'foo'::TEXT, 'bar'")

While Not rs.EOF
rs.MoveNext
Wend
End Sub

Thanks,
Sam

#12Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Rainer Bauer (#10)
Re: Npsql is much faster than ODBC ?

Rainer Bauer wrote:

"Andrej Ricnik-Bay" wrote:

On Nov 7, 2007 2:40 PM, Rainer Bauer <usenet@munnin.com> wrote:

That's nice to hear. But I respect licences as they are and the ODBCng driver
is licenced under the GPL.

That doesn't mean that you're not allowed to use it with commercial
applications; it just means that you need to be happy to provide the
source for it on request.

Which is exactly the reason why the LGPL licence was created. So that any
software can link against a library without the restrictions of the GPL.

Keep in mind, though, that the ODBC driver is not linked to your app.
It is only loaded on demand at run time, and can be replaced by any
other ODBC driver. So AFAIU your application is "shielded" from GPL.
IANAL of course. Saith the GPL:

These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.
[...]
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#13Andrei Kovalevski
andyk@commandprompt.com
In reply to: Sam Mason (#11)
Re: odbcng

Hello,

This query works for me on Access 2003. Which versions of Access and
ODBCng you have?
We can communicate via odbcng@lists.commandprompt.com
<mailto:odbcng@lists.commandprompt.com>. I'll try to help you with any
problems.

Sam Mason wrote:

On Tue, Nov 06, 2007 at 05:48:12PM -0300, Alvaro Herrera wrote:

FYI there's another Postgres ODBC driver that is said to have better
performance.

https://projects.commandprompt.com/public/odbcng

(Yes, my company maintains it)

Are there any known issues when calling it from VB? I've got a VB (MS
Access) client that uses PG as its backend and it seems to die horribly
when doing any sort of query that returns a text column. This happens
through either DAO or ADO; though DAO gives the error "the size of a
field is too long", ADO just segfaults.

For example, the following code doesn't work for me. Looks like the
sort of thing that that should get lots of test coverage so maybe it's
something on my system.

Public Sub test()
Dim con As ADODB.Connection, rs As ADODB.Recordset

Set con = New ADODB.Connection
con.Open "DSN=badgerstudy"

Set rs = con.Execute("SELECT 1, 'foo'::TEXT, 'bar'")

While Not rs.EOF
rs.MoveNext
Wend
End Sub

Thanks,
Sam

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Thanks,
Andrei.

#14Rainer Bauer
usenet@munnin.com
In reply to: Peter Cai (#1)
Re: Npsql is much faster than ODBC ?

Alvaro Herrera wrote:

Rainer Bauer wrote:

"Andrej Ricnik-Bay" wrote:

On Nov 7, 2007 2:40 PM, Rainer Bauer <usenet@munnin.com> wrote:

That's nice to hear. But I respect licences as they are and the ODBCng driver
is licenced under the GPL.

That doesn't mean that you're not allowed to use it with commercial
applications; it just means that you need to be happy to provide the
source for it on request.

Which is exactly the reason why the LGPL licence was created. So that any
software can link against a library without the restrictions of the GPL.

Keep in mind, though, that the ODBC driver is not linked to your app.
It is only loaded on demand at run time, and can be replaced by any
other ODBC driver. So AFAIU your application is "shielded" from GPL.
IANAL of course.

Neither am I.

However, the GPL FAQ has an entry specially for this case:
<http://www.gnu.org/licenses/gpl-faq.html#NFUseGPLPlugins&gt;

"If the program dynamically links plug-ins, and they make function calls to
each other and share data structures, we believe they form a single program,
which must be treated as an extension of both the main program and the
plug-ins. In order to use the GPL-covered plug-ins, the main program must be
released under the GPL or a GPL-compatible free software license, and that the
terms of the GPL must be followed when the main program is distributed for use
with these plug-ins."

The way I read this section is that linking to a GPL ODBC driver would imply
that I have to release my program under a GPL (compatible) licence.

This was one of the reasons why I added Postgres support to my program instead
of MySQL [1]In the meantime I am of course glad that I made this decision. I have not only learned a lot more about databases, but especially that Postgres is superior to MySQL ;-). They altered the licence for their drivers from LGPL to GPL so
that you have to purchase a commercial licence.

Rainer

[1]: In the meantime I am of course glad that I made this decision. I have not only learned a lot more about databases, but especially that Postgres is superior to MySQL ;-)
only learned a lot more about databases, but especially that Postgres is
superior to MySQL ;-)

#15Greg Smith
gsmith@gregsmith.com
In reply to: Rainer Bauer (#14)
Re: Npsql is much faster than ODBC ?

On Wed, 7 Nov 2007, Rainer Bauer wrote:

The way I read this section is that linking to a GPL ODBC driver would imply
that I have to release my program under a GPL (compatible) licence.

What you actually link against is the ODBC implementation for your
platform. If you're on something UNIX-ish, you're probably linking
against unixODBC, which is available under the LGPL presumably to avoid
this issue.

--
* Greg Smith gsmith@gregsmith.com http://www.gregsmith.com Baltimore, MD

#16Andrei Kovalevski
andyk@commandprompt.com
In reply to: Rainer Bauer (#14)
Re: Npsql is much faster than ODBC ?

Rainer Bauer wrote:

Alvaro Herrera wrote:

Rainer Bauer wrote:

"Andrej Ricnik-Bay" wrote:

On Nov 7, 2007 2:40 PM, Rainer Bauer <usenet@munnin.com> wrote:

That's nice to hear. But I respect licences as they are and the ODBCng driver
is licenced under the GPL.

That doesn't mean that you're not allowed to use it with commercial
applications; it just means that you need to be happy to provide the
source for it on request.

Which is exactly the reason why the LGPL licence was created. So that any
software can link against a library without the restrictions of the GPL.

Keep in mind, though, that the ODBC driver is not linked to your app.
It is only loaded on demand at run time, and can be replaced by any
other ODBC driver. So AFAIU your application is "shielded" from GPL.
IANAL of course.

Neither am I.

However, the GPL FAQ has an entry specially for this case:
<http://www.gnu.org/licenses/gpl-faq.html#NFUseGPLPlugins&gt;

"If the program dynamically links plug-ins, and they make function calls to
each other and share data structures, we believe they form a single program,
which must be treated as an extension of both the main program and the
plug-ins. In order to use the GPL-covered plug-ins, the main program must be
released under the GPL or a GPL-compatible free software license, and that the
terms of the GPL must be followed when the main program is distributed for use
with these plug-ins."

ODBC drivers are loaded by ODBC driver manager - which is also
dinamically linked library. Application calls functions from Driver
Manager, and then manager goes farther to the driver's level of
abstraction. Driver has no information about the parent application, and
can't call any functions from it. Driver is not a plug-in, and
application doesn't have to worry about its existance.

The way I read this section is that linking to a GPL ODBC driver would imply
that I have to release my program under a GPL (compatible) licence.

This was one of the reasons why I added Postgres support to my program instead
of MySQL [1]. They altered the licence for their drivers from LGPL to GPL so
that you have to purchase a commercial licence.

Rainer

[1] In the meantime I am of course glad that I made this decision. I have not
only learned a lot more about databases, but especially that Postgres is
superior to MySQL ;-)

Thanks,
Andrei.

#17Rainer Bauer
usenet@munnin.com
In reply to: Peter Cai (#1)
Re: Npsql is much faster than ODBC ?

Greg Smith wrote:

On Wed, 7 Nov 2007, Rainer Bauer wrote:

The way I read this section is that linking to a GPL ODBC driver would imply
that I have to release my program under a GPL (compatible) licence.

What you actually link against is the ODBC implementation for your
platform. If you're on something UNIX-ish, you're probably linking
against unixODBC, which is available under the LGPL presumably to avoid
this issue.

My program runs under MS Windows only. Which means the Microsoft ODBC "driver
manager" is closed source.

I have found the original announcement from CommandPrompt and it seems that
this topic was already discussed before:
<http://archives.postgresql.org/pgsql-odbc/2005-04/msg00084.php&gt;

Rainer