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 &lt;<a href=
=3D"mailto:[email protected]">[email protected]</a>&gt; 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&#39;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&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]" 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&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 />

--00000000000051d008057950b4e1--