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'= 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'https://www.google.com/url?q\= x3dhttps%3A%2F%2Fen.wikipedia.org%2Fwiki%2FArangoDB%23cite_note-7\x26sa\x3d= D\x26sntz\x3d1\x26usg\x3dAFQjCNF2BPxzdA3Yk309oSWfC8SjgJnkQA';return tru= e;" onclick=3D"this.href=3D'https://www.google.com/url?q\x3dhttps%3A%2F= %2Fen.wikipedia.org%2Fwiki%2FArangoDB%23cite_note-7\x26sa\x3dD\x26sntz\x3d1= \x26usg\x3dAFQjCNF2BPxzdA3Yk309oSWfC8SjgJnkQA';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'http://www.google.com/url?q\x3dhttp%3A%2F%2Fpythonlinks.info%2F\= x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFopiEjFdG4-0vKo3EORMPkysDCYw';r= eturn true;" onclick=3D"this.href=3D'http://www.google.com/url?q\x3dhtt= p%3A%2F%2Fpythonlinks.info%2F\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFopiE= jFdG4-0vKo3EORMPkysDCYw';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" 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--