Re: Re: In defense of the ZODB
Jim Fulton <[email protected]> Sun, 28 Oct 2018 15:33:21 -0600
| Newsgroups | gmane.comp.web.zope.zodb |
|---|---|
| Message-ID | <CAPDm-Fg=Pit9rVryEiovdHAtVpmu8kL9v3VUngQNUEzzvhkeBA@mail.gmail.com> |
--00000000000051d008057950b4e1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Andreas and Chris, I agree that ZODB is not a graph database. I have said this many times. Jim On Sun, Oct 28, 2018 at 7:51 AM Andreas Jung <[email protected]> wrote: > Again, the ZODB is not a graph database. You can store graphs with very > database type. You could store graph information on the filesystem and us= e > 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 maintainabl= e > way with the ZODB. I appreciate your energy for promoting such an old > technology 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 grap= h > related query capabilities which are standard and often needed in graph > databases. And the ZODB is not suitable for building arbitrary graph > related solutions in 2018. Storing data is one point of a database, the > capability to query and manipulate data (at large scale) is different > point. The average Python developers should know nowadays about database > options. So promoting the ZODB as graph database on the same level as Neo= 4J > 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 >> constructive criticism. So I will go ahead and integrate your comments >> into the next version of my talk. >> >> First let me address specific criticisms of the ZODB, and then we will >> talk about our different points of view. Forgive me if I first restate >> your criticisms more politely. And I will add a few other common >> criticisms. >> >> 1. The ZODB is a hierarchical database. >> >> This is a common misconception. That is why in my talk I start off >> with the canonical Neo4J example, and show how it is implemented in the >> ZODB by Graphagus. So that people would understand that the ZODB does >> graphs as well as hierarchies. Throughout my talk I kept repeating that >> message, that the ZODB also does graphs. >> >> Actually web site URL=E2=80=99s are hierarchical, so if one is building = a >> website, the ZODB, traversal, and views on objects work great. >> >> 2. The ZODB stores data in Pickles. >> >> >> Well in order to serialize data and store it on the hard drive, you have >> to use something. You recommended ArrangoDB. >> >> From Wikipedia: >> The database... internally ... uses ArangoDB's VelocyPack =E2=80=93 a fa= st and >> compact binary format for serialization and storage.[7] >> <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 Develop= ers.=E2=80=9C In fact I >> am just in the >> process of debugging a copy command. it uses Python Pickles. Easy for >> me to debug >> entirely in Python. proving that the ZODB is great for Python >> developers. If I were to do that in >> ArrangoDB, I would need access to a C development tool set. >> >> Thank you for helping me to better understand this particular advantage >> of the ZODB >> over ArangoDB >> >> 3. The ZODB does not serve JSON. >> >> And while it is true that the ZODB does not natively include software >> for converting >> an object to json, there are a number of Python libraries which do that. >> I serve a >> number of json files over at PythonLinks.info <http://pythonlinks.info/= > >> It is easy to serve data however you wish. Even better would be Apache >> Avro. There are Python libraries to help me do that. Does ArrangoDB se= rve >> Apache Avro files? I think not. >> >> 4. The ZODB is old. >> >> Python also is old. Are you suggesting that we not use Python? I find >> that software matures. The most recent version of Python keep getting >> better. >> The same is true of the ZODB. It is old, mature, well tested. Very >> stable and mature. Its api is not constantly changing. >> I think of its age as an advantage. >> >> >> 5. The ZODB does not scale. >> >> Just store your data in PostgreSQL and it will scale as well as any >> database. >> >> 6. There is no company behind it. >> >> Well indeed the Zope Corporation went bankrupt a long time ago, but the >> open source ZODB continues to be upgraded and improved. What will happe= n >> if Arrango Corporation goes broke? Are you worried about that? >> >> 7. The ZODB does not support indices. >> >> Well just write your own, or use NewtDB which integrates the ZODB into >> PostgreSQL and their high performance indices. >> >> >> 8. The ZODB does not have edge objects. >> >> Well it does have edges, the references between objects. It does not >> have additional properties on those edges. But then I do not need that. >> And if you need explicit edge objects, Graphagus added them in 500 line= s >> of code. Actually at the time, the graphagus benchmarks were faster tha= n >> the Neo4J benchmarks. In the meantime, I have no edge objects, and my >> code is simpler. >> >> 9. The ZODB does not have a query language. >> >> There is a project to add GraphQL to Plone. Zope.interface should make >> that quite easy to do. Probably not that hard to add NetworkX or a pytho= n >> version of Gremlin to the ZODB. Actually as a Python developer, I am qu= ite >> happy without a query language. Maybe my life is simpler with everything= in >> Python. I use innovative Javascript query tools on the client. Arrang= oDB >> would not help me there. >> >> >> >> Did I miss any of the major ZODB criticisms? I will add these to the >> next version of my talk. >> >> >> POINTS OF VIEWS >> >> Now let us get onto the issues of point of view. I targeted this talk a= t >> developers using both Python and a relational database, considering usin= g a >> graph database. >> >> I think of myself as a Python developer. I want to make things as simpl= e >> as possible. Using the ZODB as a database is so much easier than using= a >> relational database. That is the focus of my talk. >> >> You are part of a different community You are a seasoned Arrango Graph >> database user. You have certain expectations from a graph database. T= he >> ZODB does not meet your needs. I understand that. >> >> >> I would say that there are two types of databases. Object Graph and >> Property Graph. The ZODB is an object graph database. I believe that >> ArrangoDB and Neo4J are property graph databases. And yes, the ZODB i= s >> not a property graph database. Nor does it include a query language. >> Does that mean that the ZODB is just a hierarchical database? Technical= ly >> not correct. Nor are you the language police. >> >> There were a number of other mischaracterizations of my statements. >> ZeroDB, although no longer maintained is a very interesting concept. I= am >> sure that the software still works. That is the advantage of a mature >> database. I am sorry that people do not care more about privacy. >> >> Nor did I create a use case for the ZODB as a replacement for Neo4J or >> ArangoDB. That was entirely in your mind. My point was that it is real= ly >> easy for Python developers to use compared to a relational database. >> >> I am grateful for your feedback. It is always good to be polite. Anothe= r >> important skill is to understand other people=E2=80=99s points of views.= And >> finally it is important to support diversity. Sometimes ArrangoDB is a >> better choice, sometimes the ZODB is a better choice. >> >> Chris >> >> >> >> >> >> >> >> >> -- > 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 > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > --=20 Jim Fulton http://jimfulton.info --=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. --00000000000051d008057950b4e1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hi=C2=A0Andreas and Chris,<div><br></div><div>I agree that= ZODB is not a graph database.=C2=A0 I have said this many times.</div><div= ><br></div><div>Jim</div><div><br></div></div><br><div class=3D"gmail_quote= "><div dir=3D"ltr">On Sun, Oct 28, 2018 at 7:51 AM Andreas Jung <<a href= =3D"mailto:[email protected]">[email protected]</a>> wrote:<br><= /div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le= ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Again, the ZODB is not= a graph database. You can store graphs with very database type. You could = store graph information on the filesystem and use grep for searching on the= data. That does not make a storage graph database. We have build a bunch o= f project on top of graph databases and none of them could be implemented i= n reasonable, scalable and maintainable way with the ZODB. I appreciate you= r energy for promoting such an old technology and the ZODB still has its us= e cases. But never ever for a (large scale) graph database. As said: the ZO= DB does not provide any graph related query capabilities which are standard= and often needed in graph databases. And the ZODB is not suitable for buil= ding arbitrary graph related solutions in 2018. Storing data is one point o= f a database, the capability to query and manipulate data (at large scale) = is different point.=C2=A0 The average Python developers should know nowaday= s about database options. So promoting the ZODB as graph database on the sa= me 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 20= 18 14:36:57 UTC+1 schrieb Christopher Lozinski:<blockquote class=3D"gmail_q= uote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;paddin= g-left:1ex"><div style=3D"word-wrap:break-word">Thank you for the comments.= =C2=A0 It is most difficult to get good constructive criticism.=C2=A0 So I = will go ahead and integrate your comments into the next version of my talk.= =C2=A0<div><br></div><div>First let me address specific criticisms of the Z= ODB, =C2=A0and then we will talk about our different points of view.=C2=A0 = Forgive me if I first restate your criticisms more politely.=C2=A0 And I wi= ll add a few other common criticisms.=C2=A0</div><div><br></div><div>1.=C2= =A0 The ZODB is a hierarchical database.=C2=A0</div><div><br></div><div>Thi= s is a common misconception. =C2=A0 That is why in my talk I start off with= =C2=A0the=C2=A0canonical Neo4J example, and show how it is implemented in t= he ZODB by Graphagus.=C2=A0 So that people would understand that the ZODB d= oes graphs as well as hierarchies.=C2=A0 Throughout my talk I=C2=A0kept rep= eating that message, that the ZODB also does graphs.=C2=A0</div><div><br></= div><div>Actually web site URL=E2=80=99s are hierarchical, so if one is bui= lding a website, the ZODB, traversal, and views on objects work great.=C2= =A0</div><div><br></div><div>2.=C2=A0 The 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, you have to use something.=C2=A0 You recomm= ended ArrangoDB.=C2=A0</div><div>=C2=A0</div><div><div><div>From Wikipedia:= </div><div><span style=3D"color:rgb(34,34,34);font-family:sans-serif;backgr= ound-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=A0= internally ... uses ArangoDB's VelocyPack =E2=80=93 a fast and compact = binary format for serialization and storage.</span><sup style=3D"line-heigh= t:1;white-space:nowrap;color:rgb(34,34,34);font-family:sans-serif;backgroun= d-color:rgb(255,255,255)"><a href=3D"https://en.wikipedia.org/wiki/ArangoDB= #cite_note-7" style=3D"text-decoration:none;color:rgb(11,0,128);background-= image:none" rel=3D"nofollow" target=3D"_blank">[7]</a></sup></div><div><br>= </div><div>So you think that Velocity Pack is a better choice than Python P= ickles?</div><div><span style=3D"color:rgb(34,34,34);font-family:sans-serif= ;white-space:nowrap;background-color:rgb(255,255,255)">Indeed my talk was c= learly labelled=C2=A0=E2=80=9C=E2=80=A6For Python Developers.=E2=80=9C =C2= =A0In fact I am just in the=C2=A0</span></div><div><div><font color=3D"#222= 222" face=3D"sans-serif"><span style=3D"background-color:rgb(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=A0it uses Python Pic= kles.=C2=A0 Easy for me to debug</span></font></div><div><font color=3D"#22= 2222" face=3D"sans-serif"><span style=3D"white-space:nowrap">entirely in Py= thon. =C2=A0proving that the ZODB is great for Python developers.=C2=A0 If = I were to do that in=C2=A0</span></font></div><div><font color=3D"#222222" = face=3D"sans-serif"><span style=3D"white-space:nowrap">ArrangoDB, I=C2=A0wo= uld=C2=A0need access to a C development tool set.=C2=A0</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"><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"><span 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"><span style=3D"white= -space:nowrap">3. The ZODB does not serve JSON. =C2=A0</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-s= erif"><span style=3D"white-space:nowrap">And while it is true that the ZODB= does not=C2=A0natively include software for=C2=A0converting=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 librari= es which do that. I serve a=C2=A0</span></font></div><div><font color=3D"#2= 22222" face=3D"sans-serif"><span style=3D"white-space:nowrap">number of jso= n files over at =C2=A0</span></font><font color=3D"#222222" face=3D"sans-se= rif"><span style=3D"white-space:nowrap"><a href=3D"http://pythonlinks.info/= " rel=3D"nofollow" target=3D"_blank">PythonLinks.info</a>=C2=A0=C2=A0 I</sp= an></font>t is easy to serve data however you wish.=C2=A0 Even better would= be Apache Avro.=C2=A0 There are Python libraries to help me do that.=C2=A0= Does ArrangoDB serve Apache Avro files?=C2=A0 I think not.=C2=A0</div><div= ><br></div><div><font color=3D"#222222" face=3D"sans-serif"><span style=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=A0 Are you=C2=A0suggesting that = we not use=C2=A0</span></font><span style=3D"white-space:nowrap;color:rgb(3= 4,34,34);font-family:sans-serif">Python?=C2=A0 I find that software matures= .=C2=A0 The most recent version of Python=C2=A0keep getting better. =C2=A0<= /span></div><div><font color=3D"#222222" face=3D"sans-serif"><span style=3D= "white-space:nowrap">The same is true of the ZODB.=C2=A0 It is old, mature,= well tested.=C2=A0 Very stable and mature.=C2=A0 Its api is not constantly= changing.=C2=A0</span></font></div><div><font color=3D"#222222" face=3D"sa= ns-serif"><span style=3D"white-space:nowrap">=C2=A0I think of its age as an= advantage.=C2=A0</span></font></div><div><br></div><div><br></div><div><fo= nt color=3D"#222222" face=3D"sans-serif"><span style=3D"white-space:nowrap"= >5.=C2=A0 The ZODB does not=C2=A0</span><span style=3D"white-space:nowrap">= scale.</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"><span style=3D"white-space:nowrap">Just st= ore your data in PostgreSQL and it will scale as well as any database.=C2= =A0</span></font></div></div></div><div><div><font color=3D"#222222" face= =3D"sans-serif"><span style=3D"white-space:nowrap"><br></span></font></div>= </div></div><div>6. There is no company behind it.=C2=A0</div><div><br></di= v><div>Well indeed the Zope Corporation went=C2=A0bankrupt a long time ago,= but the open source ZODB continues to be upgraded and improved.=C2=A0 What= will happen if Arrango Corporation goes broke? =C2=A0 Are you worried abou= t that?</div><div><br></div><div>7.=C2=A0 The ZODB does not support indices= . =C2=A0</div><div><br></div><div>Well=C2=A0just write your own, or use New= tDB which integrates the ZODB into PostgreSQL and their high performance in= dices.=C2=A0</div><div><br></div><div><br></div><div>8.=C2=A0 The ZODB does= not have edge objects. =C2=A0=C2=A0</div><div><br></div><div>Well it does = have edges, the references between objects.=C2=A0 It does not have addition= al properties on those edges.=C2=A0 But then I do not need that.=C2=A0</div= ><div>And if you need explicit edge objects,=C2=A0=C2=A0Graphagus added the= m=C2=A0in 500 lines of code.=C2=A0 Actually at the time, the graphagus benc= hmarks were=C2=A0faster than the Neo4J=C2=A0benchmarks. =C2=A0 In the meant= ime, I have no edge objects, and my code is=C2=A0simpler.=C2=A0</div><div><= br></div><div>9. The ZODB does not have a query language.=C2=A0</div><div><= br></div><div>There is a project to add GraphQL to Plone.=C2=A0 Zope.interf= ace should make that=C2=A0quite easy to do. Probably not that hard to add N= etworkX or a python version of Gremlin to the ZODB.=C2=A0 Actually as a Pyt= hon developer, I am quite happy without a query language. Maybe my life is = simpler with everything in Python. =C2=A0 I use innovative Javascript query= tools on the client.=C2=A0 ArrangoDB would not help me there.=C2=A0</div><= div><br></div><div><br></div><div><br></div><div>Did I miss any of the majo= r ZODB criticisms?=C2=A0 I 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><b= r></div><div>Now let us get onto the issues of point of view.=C2=A0 I=C2=A0= targeted this talk at developers using both Python and a relational databas= e, considering using a graph database.=C2=A0</div><div><br></div><div>I thi= nk of myself as a Python=C2=A0developer.=C2=A0 I want to make things as sim= ple as possible. =C2=A0 Using the ZODB as a database is so much easier than= using a relational database.=C2=A0 That is the focus of my talk.=C2=A0</di= v><div>=C2=A0</div><div>You are=C2=A0part of a different community You are = a seasoned Arrango Graph database user. =C2=A0 You have certain expectation= s from a graph=C2=A0database.=C2=A0 The ZODB does not meet your needs.=C2= =A0 I=C2=A0understand that. =C2=A0</div><div><br></div><div><br></div><div>= I would say that there are two types of databases.=C2=A0 Object Graph and P= roperty Graph.=C2=A0 The ZODB is an object graph database.=C2=A0 I=C2=A0bel= ieve that ArrangoDB and Neo4J =C2=A0are =C2=A0property graph databases.=C2= =A0 And yes, the ZODB is not a property graph database. =C2=A0 Nor does it = include a query language.=C2=A0 Does that mean that the ZODB is just a hier= archical database?=C2=A0 Technically not correct.=C2=A0 Nor are you the=C2= =A0language police.=C2=A0</div><div><br></div><div>There were a=C2=A0number= of other=C2=A0mischaracterizations of my statements.=C2=A0 ZeroDB, =C2=A0a= lthough no longer maintained=C2=A0is a very interesting concept.=C2=A0 I am= sure that the software still works.=C2=A0 That is the advantage of a matur= e database.=C2=A0=C2=A0I am sorry that people do not care more about privac= y. =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=A0 That was entirely in your mi= nd.=C2=A0 My 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 a= m grateful for your feedback. It is always good to be=C2=A0polite.=C2=A0 An= other important skill is to understand other people=E2=80=99s points of vie= ws.=C2=A0 And finally it is important to support diversity.=C2=A0 Sometimes= 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></blockquote></d= iv></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]" target=3D"_bla= nk">[email protected]</a>.<br> For more options, visit <a href=3D"https://groups.google.com/d/optout" targ= et=3D"_blank">https://groups.google.com/d/optout</a>.<br> </blockquote></div><br clear=3D"all"><div><br></div>-- <br><div dir=3D"ltr"= class=3D"gmail_signature" data-smartmail=3D"gmail_signature">Jim Fulton<br= ><a href=3D"http://jimfulton.info" target=3D"_blank">http://jimfulton.info<= /a><br></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 /> --00000000000051d008057950b4e1--