#1 2020-08-23 16:48:15

rdevine
Member
Registered: 2014-02-20
Posts: 52

UniDAC vs. ZEOS

I'll soon be requiring multi-database connectivity and have been mulling over buying UniDAC. However, today I saw Arnaud's post on Praxis about Zeos 7.3 and am wondering if I should use it instead. I've seen a number of impressive benchmarks on this forum for Zeos, but am interested in any thoughts anyone has on pros/cons of each, use in production etc. I use Delphi 10.4 on the client and am planning to use FPC on Linux servers, but also some Delphi/Windows server implementations.

Also can anyone point me to a full list of the different databases that Zeos can connect to?

Thanks in advance, Bob

Offline

#2 2020-08-23 17:00:35

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 14,706
Website

Re: UniDAC vs. ZEOS

It may be a message for the Zeos forum...

But in short, Zeos 7.3 has excellent database support, and when used with ZDBC - i.e. a its direct layer, as we do from our mORMot ORM - its performance is higher than any DB.pas based alternatives.
From our tests, UniDAC is not the fastest DB layer on Delphi - FireDAC is faster.
It has excellent FPC compatibility, whereas UniDac is behind in terms of FPC compatibility - see https://forums.devart.com/viewtopic.php?t=38418
Zeos support is excellent, and reactivity to bug is awesome.
And you will favor Open Source, so I would definitively advice for it!

Offline

#3 2020-08-23 17:25:40

rdevine
Member
Registered: 2014-02-20
Posts: 52

Re: UniDAC vs. ZEOS

Thanks Arnaud - I've found the Zeos forum and there's a section for each database.

Offline

#4 2020-08-23 20:02:47

miab3
Member
From: Poland
Registered: 2014-10-01
Posts: 188

Re: UniDAC vs. ZEOS

My mORMot test ZEOS 7.3.1-beta(r6794):

Running tests using Synopse mORMot framework 1.18.6120, compiled with Delphi 10.3 Rio 32 bit, 
against SQLite 3.32.3, at 2020-08-22 10:06:44.

Insertion speed
			Direct	Batch	Trans	Batch Trans
SQLite3 (file full)	57	3673	44854	100088
SQLite3 (file off)	170	9388	55474	154444
SQLite3 (file off exc)	17131	154078	59035	187998
SQLite3 (mem)		47988	194084	60323	195312
ZEOS SQlite3		60	1712	45028	85298
ZEOS SQlite3 (ext full)	59	1679	43910	87870
ZEOS SQlite3 (ext off)	172	4776	54249	132717
ZEOS SQlite3 (ext off exc)22476	133482	57722	158127
ZEOS SQlite3 (mem)	32905	152035	57723	163489
FireDAC SQlite3		12600	20444	32986	113527
UniDAC SQlite3		57	1508	19522	29991
UniDAC MSSQL2012	1719	3466	2657	3578
ZEOS ODBC_W MSSQL2012	2457	6583	2875	39812
ZEOS ODBC_A MSSQL2012	2442	6840	2755	42044
ZEOS OleDB MSSQL2012	2149	7126	2693	49881
ZEOS Firebird		6082	58115	23456	59133
FireDAC Firebird	2868	51529	18351	52435
ZEOS Oracle		959	72558	2804	73417
UniDAC Oracle		850	2337	1478	2492
ZEOS PostgreSQL		1094	51655	2400	65758
FireDAC PostgreSQL	1025	20381	2247	20433
UniDAC PostgreSQL	605	12792	1008	14087
ZEOS MySQL		2735	34247	2968	35395
FireDAC MySQL		1490	18926	1590	18641
UniDAC MySQL		2584	16702	2725	17510

Read speed
			By one	All Virtual	All Direct
SQLite3 (file full)	13260	387116	388742
SQLite3 (file off)	13064	384674	390411
SQLite3 (file off exc)	62165	390137	391818
SQLite3 (mem)		63194	393483	392958
ZEOS SQlite3		51602	201914	354660
ZEOS SQlite3 (ext full)	51111	205651	357628
ZEOS SQlite3 (ext off)	51452	200561	356887
ZEOS SQlite3 (ext off exc)50995	204918	358166
ZEOS SQlite3 (mem)	51076	204006	360126
FireDAC SQlite3		5350	83886	112329
UniDAC SQlite3		1788	67379	90958
UniDAC MSSQL2012	2226	104929	171479
ZEOS ODBC_W MSSQL2012	1341	153477	247108
ZEOS ODBC_A MSSQL2012	1346	144167	222588
ZEOS OleDB MSSQL2012	2636	175530	289905
ZEOS Firebird		23214	88181	127730
FireDAC Firebird	1767	61012	76456
ZEOS Oracle		2809	125432	189609
UniDAC Oracle		948	29461	35956
ZEOS PostgreSQL		2406	131960	199425
FireDAC PostgreSQL	571	41093	45755
UniDAC PostgreSQL	357	54935	68092
ZEOS MySQL		2892	129886	190665
FireDAC MySQL		1141	64495	78387
UniDAC MySQL		1964	88198	125533

Michal

Offline

#5 2020-08-24 12:07:50

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 14,706
Website

Re: UniDAC vs. ZEOS

Thanks for the fresh numbers!
big_smile

Just a question: why didn't you include the SynOracle, SynPostgresql, SynOleDB and SynODBC numbers? It could be interesting to include the info with SynDB direct access units.

Offline

#6 2020-08-24 17:47:14

miab3
Member
From: Poland
Registered: 2014-10-01
Posts: 188

Re: UniDAC vs. ZEOS

I added your Oracle and MS SQL ODBC:

ZEOS 7.3.1-beta r6794

Running tests using Synopse mORMot framework 1.18.6120, compiled with Delphi 10.3 Rio 32 bit, 
against SQLite 3.32.3, at 2020-08-24 19:33:45.

Insertion speed
 			Direct	Batch	Trans	Batch Trans
SQLite3 (file full)	57	3646	44789	97700
SQLite3 (file off)	170	11578	27377	155588
SQLite3 (file off exc)	16888	157683	58480	191277
SQLite3 (mem)		46195	198522	59941	197145
ZEOS SQlite3		60	1660	43845	87499
ZEOS SQlite3 (ext full)	58	1628	44118	90632
ZEOS SQlite3 (ext off)	174	4473	54512	131731
ZEOS SQlite3 (ext off exc)22245	136701	58764	156040
ZEOS SQlite3 (mem)	32491	150412	59484	160235
FireDAC SQlite3		12494	19610	34184	113996
UniDAC SQlite3		56	1347	19816	29838
ODBC MSSQL2012		1382	17591	2598	20006
UniDAC MSSQL2012	1881	3541	2465	3601
ZEOS ODBC_W MSSQL2012	2277	6538	2804	42316
ZEOS ODBC_A MSSQL2012	2208	6960	2794	39255
ZEOS OleDB MSSQL2012	2282	6694	2750	51200
ZEOS Firebird		6211	59468	23598	59409
FireDAC Firebird	2820	52188	18095	52417
Oracle			955	87844	2188	85212
ZEOS Oracle		1018	71001	2829	72592
UniDAC Oracle		916	2385	1554	2487
ZEOS PostgreSQL		1188	62489	2280	66534
FireDAC PostgreSQL	1065	19857	2042	20140
UniDAC PostgreSQL	718	12282	1018	14139
ZEOS MySQL		1900	20478	2781	38369
FireDAC MySQL		1439	17536	1405	19688
UniDAC MySQL		2608	14585	2729	17461

Read speed
 			By one	All Virtual	All Direct
SQLite3 (file full)	13162	373245	387626
SQLite3 (file off)	12853	386518	388379
SQLite3 (file off exc)	61397	373078	373915
SQLite3 (mem)		62231	384644	390228
ZEOS SQlite3		52050	206270	361402
ZEOS SQlite3 (ext full)	52119	206041	361376
ZEOS SQlite3 (ext off)	51974	201832	352485
ZEOS SQlite3 (ext off exc)51414	207555	364404
ZEOS SQlite3 (mem)	52343	207236	362266
FireDAC SQlite3		5477	82961	112183
UniDAC SQlite3		1771	67471	90114
ODBC MSSQL2012		2638	112120	191982
UniDAC MSSQL2012	2100	108466	176317
ZEOS ODBC_W MSSQL2012	1358	155545	240870
ZEOS ODBC_A MSSQL2012	1405	143587	212992
ZEOS OleDB MSSQL2012	2765	174770	290900
ZEOS Firebird		23713	87050	124051
FireDAC Firebird	1790	61260	75922
Oracle			2424	129553	185583
ZEOS Oracle		2771	125495	193438
UniDAC Oracle		957	29406	35844
ZEOS PostgreSQL		2432	138458	197855
FireDAC PostgreSQL	524	40292	46180
UniDAC PostgreSQL	375	52796	67601
ZEOS MySQL		2705	137245	210375
FireDAC MySQL		1271	67206	76494
UniDAC MySQL		2149	87882	126033

Michal

Offline

#7 2020-08-24 18:39:28

ab
Administrator
From: France
Registered: 2010-06-21
Posts: 14,706
Website

Re: UniDAC vs. ZEOS

Thanks for the additional numbers!
cool

Offline

#8 2020-09-13 14:57:56

EgonHugeist
Member
From: Germany
Registered: 2013-02-15
Posts: 190

Re: UniDAC vs. ZEOS

ab wrote:

Thanks for the fresh numbers!
big_smile

Just a question: why didn't you include the SynOracle, SynPostgresql, SynOleDB and SynODBC numbers? It could be interesting to include the info with SynDB direct access units.

SynPostgresql can not be tested, it permanently fails: Performance tests are not comparable and only the default Port is supported..

Last edited by EgonHugeist (2020-09-13 14:59:33)

Offline

#9 2020-09-13 20:30:39

mpv
Member
From: Ukraine
Registered: 2012-03-24
Posts: 1,571
Website

Re: UniDAC vs. ZEOS

SynDBPostgres accept Postgres connection URL in DatabaseName parameter, port can be specified there as postgresql://localhost:5433

Offline

#10 2020-09-15 18:17:37

EgonHugeist
Member
From: Germany
Registered: 2013-02-15
Posts: 190

Re: UniDAC vs. ZEOS

@Pavel, did you ever test it? Maybay it's a lack of my knowledge, but i'm not able to.. Thus using DatabaseName := '127.0.0.1:5438' fails same as using '//localhost:5438' as you suggest. That's way

PQconnectdb

as been introduced by PostgreSQL, thougth.

Last edited by EgonHugeist (2020-09-15 18:58:04)

Offline

#11 2020-09-16 08:09:02

mpv
Member
From: Ukraine
Registered: 2012-03-24
Posts: 1,571
Website

Re: UniDAC vs. ZEOS

Yes, it tested and used on production

ServerName := ''; DatabaseName := 'postgres://host:port/dbname'

Didi you miss `postgres:` ?

Last edited by mpv (2020-09-16 08:09:16)

Offline

Board footer

Powered by FluxBB