The following table shows the results of a benchmark comparing several ORM and graph databases, for writing and reading 10 000 nodes/objects, using a random access:
Base |
Writing |
Reading |
Semantics |
---|---|---|---|
Python + SQLAlchemy (1.3.2) |
156 obj/sec |
5 345 obj/sec |
object |
Python + SQLObjet (3.7) |
51 obj/sec |
11 727 obj/sec |
object |
Python + MongoDB (4.0.4) |
2 289 obj/sec |
4 723 obj/sec |
document |
Python + Neo4J (3.4.9) |
245 obj/sec |
223 obj/sec |
graph |
Python + Owlready2 (0.16) |
12 892 obj/sec |
19 158 obj/sec |
object, ontology (OWL) |
PyPy3 + Owlready2 (0.16) |
12 089 obj/sec |
31 502 obj/sec |
object, ontology (OWL) |
(higher numbers are better)
Owlready2 beats all other objet/graph database for performances. This can be explained by the fact that the internal databse (SQLite3) is directly integrated in the application. On the contrary, Neo4J and MongoDB use a distant server; in this case, communications between the application and the distant server have an important performance cost.
Owlready2 also has better functionality, thanks to its higher semantic level (e.g. multiple inheritance, etc).