What values ​​are valid for properties in graph databases (i.e. Titan, OrientDB, ArangoDB, Neo4J)?

I am new to the NoSQL scene. I am trying to understand the possibilities and differences between the various graph databases. I understand that Orient and Arango use documents as vertices (as well as edges too)? I know that in Titan and Neo, vertices and edges can have properties and that these properties are key: value pairs. It makes sense to me that you can restrict values ​​to primitives (although I don't know that this is strictly so). I wonder what you can have as a value. Could your value be an array of primitives? Maybe this is another hash? etc. If the values ​​are not limited, then I wonder how Titan or Neo really differ from Orient and Arango in terms of how to structure your data.

edit: People ask about my use case. My company has developed a tool chain that creates working applications (GUIs and databases) from UML models ... in seconds. We use these tools to simulate a number of different domains (regardless of who the client is using) and develop solutions for them. Currently, the tool uses ORDBM. It has its drawbacks, some of which are showstoppers, if my thoughts on how we should evolve mean anything. I try to exercise due diligence in exploring alternatives. I can agree that nothing is perfect and that everything we choose will not be the best choice for every use of the client. Due to the automation involved, we may not necessarily use every function that a particular db offers, or in each case. So, I suppose I'm trying to decide which db will work well for our toolkit. (Note also that the original question asked here is just one of many decisive factors.) Oh yes, FWIW, we do Ruby. We could switch to Python or Groovy or something else, but that would be far from trivial.

+4
source share
4 answers

ArangoDB uses documents as vertices and edges. Thus, it can be as simple as a key / value pair or more complex than documents with subdomains or lists of documents. It really depends on your case, which suits you. Perhaps you can explain your use case in more detail.

+4
source

Neo4j uses property plots, vertices (nodes) and edges (relationships) can have properties that are key value pairs. Neo4j supports primitives, strings, and arrays of them.

http://docs.neo4j.org/chunked/stable/graphdb-neo4j-properties.html

How you structure or model your data really depends on what information you want to get from the graph, sometimes a property is enough, sometimes it makes sense to represent it as a node. Do you have a specific use case?

+2
source

OrientDB supports any primitives, strings, arrays, and even collections, maps, and embedded documents. Thus, you can store almost any data in properties.

+2
source

Titan effectively requires that vertices and edges have patterns that make them look like tables. Each of them can have properties with typical types of values ​​- numbers, strings, etc. There is no explicit support for nested "document" style values, although newer versions of Titan properties may have properties due to creative abuse of edges. If storing large complex documents at vertices or edges is important, you can also store Java serializable documents.

0
source

Source: https://habr.com/ru/post/1486180/


All Articles