Re: In defense of the ZODB

Andreas Jung <[email protected]> Sun, 28 Oct 2018 06:51:21 -0700 (PDT)
Newsgroups gmane.comp.web.zope.zodb
Message-ID <[email protected]>
------=_Part_663_94159909.1540734681311
Content-Type: multipart/alternative; 
	boundary="----=_Part_664_666770768.1540734681311"

------=_Part_664_666770768.1540734681311
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Again, the ZODB is not a graph database. You can store graphs with very=20
database type. You could store graph information on the filesystem and use=
=20
grep for searching on the data. That does not make a storage graph=20
database. We have build a bunch of project on top of graph databases and=20
none of them could be implemented in reasonable, scalable and maintainable=
=20
way with the ZODB. I appreciate your energy for promoting such an old=20
technology and the ZODB still has its use cases. But never ever for a=20
(large scale) graph database. As said: the ZODB does not provide any graph=
=20
related query capabilities which are standard and often needed in graph=20
databases. And the ZODB is not suitable for building arbitrary graph=20
related solutions in 2018. Storing data is one point of a database, the=20
capability to query and manipulate data (at large scale) is different=20
point.  The average Python developers should know nowadays about database=
=20
options. So promoting the ZODB as graph database on the same level as Neo4J=
=20
and others is just absurd.

-aj




Am Sonntag, 28. Oktober 2018 14:36:57 UTC+1 schrieb Christopher Lozinski:
>
> Thank you for the comments.  It is most difficult to get good constructiv=
e=20
> criticism.  So I will go ahead and integrate your comments into the next=
=20
> version of my talk.=20
>
> First let me address specific criticisms of the ZODB,  and then we will=
=20
> talk about our different points of view.  Forgive me if I first restate=
=20
> your criticisms more politely.  And I will add a few other common=20
> criticisms.=20
>
> 1.  The ZODB is a hierarchical database.=20
>
> This is a common misconception.   That is why in my talk I start off=20
> with the canonical Neo4J example, and show how it is implemented in the=
=20
> ZODB by Graphagus.  So that people would understand that the ZODB does=20
> graphs as well as hierarchies.  Throughout my talk I kept repeating that=
=20
> message, that the ZODB also does graphs.=20
>
> Actually web site URL=E2=80=99s are hierarchical, so if one is building a=
 website,=20
> the ZODB, traversal, and views on objects work great.=20
>
> 2.  The ZODB stores data in Pickles. =20
>
>
> Well in order to serialize data and store it on the hard drive, you have=
=20
> to use something.  You recommended ArrangoDB.=20
> =20
> From Wikipedia:
> The database... internally ... uses ArangoDB's VelocyPack =E2=80=93 a fas=
t and=20
> compact binary format for serialization and storage.[7]=20
> <https://en.wikipedia.org/wiki/ArangoDB#cite_note-7>
>
> So you think that Velocity Pack is a better choice than Python Pickles?
> Indeed my talk was clearly labelled =E2=80=9C=E2=80=A6For Python Develope=
rs.=E2=80=9C  In fact I=20
> am just in the=20
> process of debugging a copy command.  it uses Python Pickles.  Easy for=
=20
> me to debug
> entirely in Python.  proving that the ZODB is great for Python developers=
.=20
>  If I were to do that in=20
> ArrangoDB, I would need access to a C development tool set.=20
>
> Thank you for helping me to better understand this particular advantage o=
f=20
> the ZODB=20
> over ArangoDB
>
> 3. The ZODB does not serve JSON. =20
>
> And while it is true that the ZODB does not natively include software=20
> for converting=20
> an object to json, there are a number of Python libraries which do that. =
I=20
> serve a=20
> number of json files over at  PythonLinks.info <http://pythonlinks.info/>=
  =20
> It is easy to serve data however you wish.  Even better would be Apache=
=20
> Avro.  There are Python libraries to help me do that.  Does ArrangoDB ser=
ve=20
> Apache Avro files?  I think not.=20
>
> 4. The ZODB is old.=20
>
>  Python also is old.  Are you suggesting that we not use Python?  I find=
=20
> that software matures.  The most recent version of Python keep getting=20
> better. =20
> The same is true of the ZODB.  It is old, mature, well tested.  Very=20
> stable and mature.  Its api is not constantly changing.=20
>  I think of its age as an advantage.=20
>
>
> 5.  The ZODB does not scale.
>
> Just store your data in PostgreSQL and it will scale as well as any=20
> database.=20
>
> 6. There is no company behind it.=20
>
> Well indeed the Zope Corporation went bankrupt a long time ago, but the=
=20
> open source ZODB continues to be upgraded and improved.  What will happen=
=20
> if Arrango Corporation goes broke?   Are you worried about that?
>
> 7.  The ZODB does not support indices. =20
>
> Well just write your own, or use NewtDB which integrates the ZODB into=20
> PostgreSQL and their high performance indices.=20
>
>
> 8.  The ZODB does not have edge objects.  =20
>
> Well it does have edges, the references between objects.  It does not hav=
e=20
> additional properties on those edges.  But then I do not need that.=20
> And if you need explicit edge objects,  Graphagus added them in 500 lines=
=20
> of code.  Actually at the time, the graphagus benchmarks were faster than=
=20
> the Neo4J benchmarks.   In the meantime, I have no edge objects, and my=
=20
> code is simpler.=20
>
> 9. The ZODB does not have a query language.=20
>
> There is a project to add GraphQL to Plone.  Zope.interface should make=
=20
> that quite easy to do. Probably not that hard to add NetworkX or a python=
=20
> version of Gremlin to the ZODB.  Actually as a Python developer, I am qui=
te=20
> happy without a query language. Maybe my life is simpler with everything =
in=20
> Python.   I use innovative Javascript query tools on the client.  Arrango=
DB=20
> would not help me there.=20
>
>
>
> Did I miss any of the major ZODB criticisms?  I will add these to the nex=
t=20
> version of my talk.=20
>
>
> POINTS OF VIEWS
>
> Now let us get onto the issues of point of view.  I targeted this talk at=
=20
> developers using both Python and a relational database, considering using=
 a=20
> graph database.=20
>
> I think of myself as a Python developer.  I want to make things as simple=
=20
> as possible.   Using the ZODB as a database is so much easier than using =
a=20
> relational database.  That is the focus of my talk.=20
> =20
> You are part of a different community You are a seasoned Arrango Graph=20
> database user.   You have certain expectations from a graph database.  Th=
e=20
> ZODB does not meet your needs.  I understand that. =20
>
>
> I would say that there are two types of databases.  Object Graph and=20
> Property Graph.  The ZODB is an object graph database.  I believe that=20
> ArrangoDB and Neo4J  are  property graph databases.  And yes, the ZODB is=
=20
> not a property graph database.   Nor does it include a query language.=20
>  Does that mean that the ZODB is just a hierarchical database?  Technical=
ly=20
> not correct.  Nor are you the language police.=20
>
> There were a number of other mischaracterizations of my statements.=20
>  ZeroDB,  although no longer maintained is a very interesting concept.  I=
=20
> am sure that the software still works.  That is the advantage of a mature=
=20
> database.  I am sorry that people do not care more about privacy. =20
>
> Nor did I create a use case for the ZODB as a replacement for Neo4J or=20
> ArangoDB.  That was entirely in your mind.  My point was that it is reall=
y=20
> easy for Python developers to use compared to a relational database.=20
>
> I am grateful for your feedback. It is always good to be polite.  Another=
=20
> important skill is to understand other people=E2=80=99s points of views. =
 And=20
> finally it is important to support diversity.  Sometimes ArrangoDB is a=
=20
> better choice, sometimes the ZODB is a better choice.=20
>
> Chris
>
>
>
>
>
>
>
>
>

--=20
You received this message because you are subscribed to the Google Groups "=
zodb" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to [email protected].
For more options, visit https://groups.google.com/d/optout.

------=_Part_664_666770768.1540734681311
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Again, the ZODB is not a graph database. You can store gra=
phs with very database type. You could store graph information on the files=
ystem and use grep for searching on the data. That does not make a storage =
graph database. We have build a bunch of project on top of graph databases =
and none of them could be implemented in reasonable, scalable and maintaina=
ble way with the ZODB. I appreciate your energy for promoting such an old t=
echnology and the ZODB still has its use cases. But never ever for a (large=
 scale) graph database. As said: the ZODB does not provide any graph relate=
d query capabilities which are standard and often needed in graph databases=
. And the ZODB is not suitable for building arbitrary graph related solutio=
ns in 2018. Storing data is one point of a database, the capability to quer=
y and manipulate data (at large scale) is different point.=C2=A0 The averag=
e Python developers should know nowadays about database options. So promoti=
ng the ZODB as graph database on the same level as Neo4J and others is just=
 absurd.<div><br></div><div>-aj<br><div><div><br></div><div><br><div><br></=
div><div><br>Am Sonntag, 28. Oktober 2018 14:36:57 UTC+1 schrieb Christophe=
r Lozinski:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left=
: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div style=3D"word-=
wrap:break-word">Thank you for the comments. =C2=A0It is most difficult to =
get good constructive criticism. =C2=A0So I will go ahead and integrate you=
r comments into the next version of my talk.=C2=A0<div><br></div><div>First=
 let me address specific criticisms of the ZODB, =C2=A0and then we will tal=
k about our different points of view. =C2=A0Forgive me if I first restate y=
our criticisms more politely. =C2=A0And I will add a few other common criti=
cisms.=C2=A0</div><div><br></div><div>1. =C2=A0The ZODB is a hierarchical d=
atabase.=C2=A0</div><div><br></div><div>This is a common misconception. =C2=
=A0 That is why in my talk I start off with=C2=A0the=C2=A0canonical Neo4J e=
xample, and show how it is implemented in the ZODB by Graphagus. =C2=A0So t=
hat people would understand that the ZODB does graphs as well as hierarchie=
s. =C2=A0Throughout my talk I=C2=A0kept repeating that message, that the ZO=
DB also does graphs.=C2=A0</div><div><br></div><div>Actually web site URL=
=E2=80=99s are hierarchical, so if one is building a website, the ZODB, tra=
versal, and views on objects work great.=C2=A0</div><div><br></div><div>2. =
=C2=A0The ZODB stores data in Pickles. =C2=A0</div><div><br><div><br></div>=
<div>Well in order=C2=A0to serialize data and store it on the hard drive, y=
ou have to use something. =C2=A0You recommended ArrangoDB.=C2=A0</div><div>=
=C2=A0</div><div><div><div>From Wikipedia:</div><div><span style=3D"color:r=
gb(34,34,34);font-family:sans-serif;background-color:rgb(255,255,255)">The =
database...</span><span style=3D"color:rgb(34,34,34);font-family:sans-serif=
;background-color:rgb(255,255,255)">=C2=A0internally ... uses ArangoDB&#39;=
s VelocyPack =E2=80=93 a fast and compact binary format for serialization a=
nd storage.</span><sup style=3D"line-height:1;white-space:nowrap;color:rgb(=
34,34,34);font-family:sans-serif;background-color:rgb(255,255,255)"><a href=
=3D"https://en.wikipedia.org/wiki/ArangoDB#cite_note-7" style=3D"text-decor=
ation:none;color:rgb(11,0,128);background-image:none" target=3D"_blank" rel=
=3D"nofollow" onmousedown=3D"this.href=3D&#39;https://www.google.com/url?q\=
x3dhttps%3A%2F%2Fen.wikipedia.org%2Fwiki%2FArangoDB%23cite_note-7\x26sa\x3d=
D\x26sntz\x3d1\x26usg\x3dAFQjCNF2BPxzdA3Yk309oSWfC8SjgJnkQA&#39;;return tru=
e;" onclick=3D"this.href=3D&#39;https://www.google.com/url?q\x3dhttps%3A%2F=
%2Fen.wikipedia.org%2Fwiki%2FArangoDB%23cite_note-7\x26sa\x3dD\x26sntz\x3d1=
\x26usg\x3dAFQjCNF2BPxzdA3Yk309oSWfC8SjgJnkQA&#39;;return true;">[7]</a></s=
up></div><div><br></div><div>So you think that Velocity Pack is a better ch=
oice than Python Pickles?</div><div><span style=3D"color:rgb(34,34,34);font=
-family:sans-serif;white-space:nowrap;background-color:rgb(255,255,255)">In=
deed my talk was clearly labelled=C2=A0=E2=80=9C=E2=80=A6For Python Develop=
ers.=E2=80=9C =C2=A0In fact I am just in the=C2=A0</span></div><div><div><f=
ont color=3D"#222222" face=3D"sans-serif"><span style=3D"background-color:r=
gb(255,255,255)"><span style=3D"white-space:nowrap">process of debugging a =
copy=C2=A0</span></span><span style=3D"white-space:nowrap">command. =C2=A0i=
t uses Python Pickles. =C2=A0Easy for me to debug</span></font></div><div><=
font color=3D"#222222" face=3D"sans-serif"><span style=3D"white-space:nowra=
p">entirely in Python. =C2=A0proving that the ZODB is great for Python deve=
lopers. =C2=A0If I were to do that in=C2=A0</span></font></div><div><font c=
olor=3D"#222222" face=3D"sans-serif"><span style=3D"white-space:nowrap">Arr=
angoDB, I=C2=A0would=C2=A0need access to a C development tool set.=C2=A0</s=
pan></font></div><div><font color=3D"#222222" face=3D"sans-serif"><span sty=
le=3D"white-space:nowrap"><br></span></font></div><div><font color=3D"#2222=
22" face=3D"sans-serif"><span style=3D"white-space:nowrap">Thank you for=C2=
=A0helping me to better understand this particular advantage of the ZODB=C2=
=A0</span></font></div><div><font color=3D"#222222" face=3D"sans-serif"><sp=
an style=3D"white-space:nowrap">over ArangoDB</span></font></div><div><font=
 color=3D"#222222" face=3D"sans-serif"><span style=3D"white-space:nowrap"><=
br></span></font></div><div><font color=3D"#222222" face=3D"sans-serif"><sp=
an style=3D"white-space:nowrap">3. The ZODB does not serve JSON. =C2=A0</sp=
an></font></div><div><font color=3D"#222222" face=3D"sans-serif"><span styl=
e=3D"white-space:nowrap"><br></span></font></div><div><font color=3D"#22222=
2" face=3D"sans-serif"><span style=3D"white-space:nowrap">And while it is t=
rue that the ZODB does not=C2=A0natively include software for=C2=A0converti=
ng=C2=A0</span></font></div><div><font color=3D"#222222" face=3D"sans-serif=
"><span style=3D"white-space:nowrap">an object to json, there are a number =
of Python libraries which do that. I serve a=C2=A0</span></font></div><div>=
<font color=3D"#222222" face=3D"sans-serif"><span style=3D"white-space:nowr=
ap">number of json files over at =C2=A0</span></font><font color=3D"#222222=
" face=3D"sans-serif"><span style=3D"white-space:nowrap"><a href=3D"http://=
pythonlinks.info/" target=3D"_blank" rel=3D"nofollow" onmousedown=3D"this.h=
ref=3D&#39;http://www.google.com/url?q\x3dhttp%3A%2F%2Fpythonlinks.info%2F\=
x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFopiEjFdG4-0vKo3EORMPkysDCYw&#39;;r=
eturn true;" onclick=3D"this.href=3D&#39;http://www.google.com/url?q\x3dhtt=
p%3A%2F%2Fpythonlinks.info%2F\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFopiE=
jFdG4-0vKo3EORMPkysDCYw&#39;;return true;">PythonLinks.info</a>=C2=A0=C2=A0=
 I</span></font>t is easy to serve data however you wish. =C2=A0Even better=
 would be Apache Avro. =C2=A0There are Python libraries to help me do that.=
 =C2=A0Does ArrangoDB serve Apache Avro files? =C2=A0I think not.=C2=A0</di=
v><div><br></div><div><font color=3D"#222222" face=3D"sans-serif"><span sty=
le=3D"white-space:nowrap">4. The ZODB is old.=C2=A0</span></font></div><div=
><br></div><div><font color=3D"#222222" face=3D"sans-serif"><span style=3D"=
white-space:nowrap">=C2=A0Python also is old. =C2=A0Are you=C2=A0suggesting=
 that we not use=C2=A0</span></font><span style=3D"white-space:nowrap;color=
:rgb(34,34,34);font-family:sans-serif">Python? =C2=A0I find that software m=
atures. =C2=A0The most recent version of Python=C2=A0keep getting better. =
=C2=A0</span></div><div><font color=3D"#222222" face=3D"sans-serif"><span s=
tyle=3D"white-space:nowrap">The same is true of the ZODB. =C2=A0It is old, =
mature, well tested. =C2=A0Very stable and mature. =C2=A0Its api is not con=
stantly changing.=C2=A0</span></font></div><div><font color=3D"#222222" fac=
e=3D"sans-serif"><span style=3D"white-space:nowrap">=C2=A0I think of its ag=
e as an advantage.=C2=A0</span></font></div><div><br></div><div><br></div><=
div><font color=3D"#222222" face=3D"sans-serif"><span style=3D"white-space:=
nowrap">5. =C2=A0The ZODB does not=C2=A0</span><span style=3D"white-space:n=
owrap">scale.</span></font></div><div><font color=3D"#222222" face=3D"sans-=
serif"><span style=3D"white-space:nowrap"><br></span></font></div><div><fon=
t color=3D"#222222" face=3D"sans-serif"><span style=3D"white-space:nowrap">=
Just store your data in PostgreSQL and it will scale as well as any databas=
e.=C2=A0</span></font></div></div></div><div><div><font color=3D"#222222" f=
ace=3D"sans-serif"><span style=3D"white-space:nowrap"><br></span></font></d=
iv></div></div><div>6. There is no company behind it.=C2=A0</div><div><br><=
/div><div>Well indeed the Zope Corporation went=C2=A0bankrupt a long time a=
go, but the open source ZODB continues to be upgraded and improved. =C2=A0W=
hat will happen if Arrango Corporation goes broke? =C2=A0 Are you worried a=
bout that?</div><div><br></div><div>7. =C2=A0The ZODB does not support indi=
ces. =C2=A0</div><div><br></div><div>Well=C2=A0just write your own, or use =
NewtDB which integrates the ZODB into PostgreSQL and their high performance=
 indices.=C2=A0</div><div><br></div><div><br></div><div>8. =C2=A0The ZODB d=
oes not have edge objects. =C2=A0=C2=A0</div><div><br></div><div>Well it do=
es have edges, the references between objects. =C2=A0It does not have addit=
ional properties on those edges. =C2=A0But then I do not need that.=C2=A0</=
div><div>And if you need explicit edge objects,=C2=A0=C2=A0Graphagus added =
them=C2=A0in 500 lines of code. =C2=A0Actually at the time, the graphagus b=
enchmarks were=C2=A0faster than the Neo4J=C2=A0benchmarks. =C2=A0 In the me=
antime, I have no edge objects, and my code is=C2=A0simpler.=C2=A0</div><di=
v><br></div><div>9. The ZODB does not have a query language.=C2=A0</div><di=
v><br></div><div>There is a project to add GraphQL to Plone. =C2=A0Zope.int=
erface should make that=C2=A0quite easy to do. Probably not that hard to ad=
d NetworkX or a python version of Gremlin to the ZODB. =C2=A0Actually as a =
Python developer, I am quite happy without a query language. Maybe my life =
is simpler with everything in Python. =C2=A0 I use innovative Javascript qu=
ery tools on the client. =C2=A0ArrangoDB would not help me there.=C2=A0</di=
v><div><br></div><div><br></div><div><br></div><div>Did I miss any of the m=
ajor ZODB criticisms? =C2=A0I will add these to the next version of my talk=
.=C2=A0</div><div><br></div><div><br></div><div>POINTS OF VIEWS</div><div><=
br></div><div>Now let us get onto the issues of point of view. =C2=A0I=C2=
=A0targeted this talk at developers using both Python and a relational data=
base, considering using a graph database.=C2=A0</div><div><br></div><div>I =
think of myself as a Python=C2=A0developer. =C2=A0I want to make things as =
simple as possible. =C2=A0 Using the ZODB as a database is so much easier t=
han using a relational database. =C2=A0That is the focus of my talk.=C2=A0<=
/div><div>=C2=A0</div><div>You are=C2=A0part of a different community You a=
re a seasoned Arrango Graph database user. =C2=A0 You have certain expectat=
ions from a graph=C2=A0database. =C2=A0The ZODB does not meet your needs. =
=C2=A0I=C2=A0understand that. =C2=A0</div><div><br></div><div><br></div><di=
v>I would say that there are two types of databases. =C2=A0Object Graph and=
 Property Graph. =C2=A0The ZODB is an object graph database. =C2=A0I=C2=A0b=
elieve that ArrangoDB and Neo4J =C2=A0are =C2=A0property graph databases. =
=C2=A0And yes, the ZODB is not a property graph database. =C2=A0 Nor does i=
t include a query language. =C2=A0Does that mean that the ZODB is just a hi=
erarchical database? =C2=A0Technically not correct. =C2=A0Nor are you the=
=C2=A0language police.=C2=A0</div><div><br></div><div>There were a=C2=A0num=
ber of other=C2=A0mischaracterizations of my statements. =C2=A0ZeroDB, =C2=
=A0although no longer maintained=C2=A0is a very interesting concept. =C2=A0=
I am sure that the software still works. =C2=A0That is the advantage of a m=
ature database.=C2=A0=C2=A0I am sorry that people do not care more about pr=
ivacy. =C2=A0</div><div><br></div><div>Nor did I create a use case for the =
ZODB as a replacement for Neo4J or ArangoDB. =C2=A0That was entirely in you=
r mind. =C2=A0My point was that it is really easy for Python developers to =
use compared to a relational database.=C2=A0</div><div><br></div><div><font=
>I am grateful for your feedback. It is always good to be=C2=A0polite. =C2=
=A0Another important skill is to understand other people=E2=80=99s points o=
f views. =C2=A0And finally it is important to support diversity. =C2=A0Some=
times ArrangoDB is a better choice, sometimes the ZODB is a better choice.=
=C2=A0</font></div><div><br></div><div>Chris</div><div><br></div><div><div>=
<br></div><div><br></div><div><br></div><div><br></div><div><div><br></div>=
<div><div><div><br></div><br></div></div></div></div></div></div></blockquo=
te></div></div></div></div></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;zodb&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:[email protected]">zodb+unsubscri=
[email protected]</a>.<br />
For more options, visit <a href=3D"https://groups.google.com/d/optout">http=
s://groups.google.com/d/optout</a>.<br />

------=_Part_664_666770768.1540734681311--

------=_Part_663_94159909.1540734681311--