我对NoSQL
场景很陌生。我试图了解不同图形数据库之间的功能和差异。我的理解是Orient和Arango使用文档作为顶点(也是边缘,对吧?)。我知道在Titan和Neo中,顶点和边可能具有属性,并且这些属性是关键:值对。我有意义的是你可能会将值限制为原语(虽然我不知道这是严格的情况)。我想知道你可以拥有什么作为价值。你的价值可以是一系列基元吗?它可以是另一个哈希吗?如果价值相当不受限制,那么我想知道Titan或Neo与Orient和Arango在构建数据方面的确有何不同。
编辑:人们在询问我的用例 - 我公司开发了一个工具链,可以在几秒钟内从UML模型创建一个工作应用程序(GUI和数据库)。我们使用这些工具来模拟许多不同的域(无论客户使用何种域),并为他们开发解决方案。现在,工具使用ORDBM。这有它的缺点,如果我对如何进化的想法意味着任何东西,其中一些是显而易见的。我正努力在探索替代方案时尽职尽责。我可以接受的是,没有什么是完美的,我们选择的任何东西都不是每个客户用例的最佳选择。由于涉及自动化,我们可能不一定会根据具体情况利用特定数据库提供的每个功能。所以,我想我正在尝试确定哪个数据库适合我们的工具。 (另请注意,这里提出的原始问题只是众多决定因素中的一个。)哦,是的,FWIW,我们做Ruby。我们可能会转向Python或Groovy或其他东西,但这样做绝非易事。
答案 0 :(得分:4)
ArangoDB使用文档作为顶点和边。因此,它可以像键/值对一样简单,也可以像包含子文档或文档列表的文档一样复杂。这真的取决于你的情况,什么适合你。也许您可以更详细地解释您的用例。
答案 1 :(得分:2)
Neo4j使用属性图,顶点(节点)和边(关系)都可以具有键值对的属性。 Neo4j支持原语,字符串和数组。
http://docs.neo4j.org/chunked/stable/graphdb-neo4j-properties.html
如何构建或建模数据实际上取决于您想要从图形中获取什么类型的信息 - 有时属性就足够了,有时将其表示为节点是有意义的。你有特定的用例吗?
答案 2 :(得分:2)
OrientDB支持任何基元,字符串,数组甚至集合,映射和嵌入式文档。因此,您几乎可以将任何类型的数据存储到属性中。
答案 3 :(得分:0)
Titan有效地要求顶点和边缘具有使它们看起来像表格的模式。他们每个人都可以拥有具有典型价值的属性 - 数字,字符串等。没有明确支持'文档'样式嵌套值,但由于创意滥用边缘,使用较新版本的Titan属性可以具有属性。如果在顶点或边缘存储大型复杂文档很重要,您还可以存储Java可序列化文档。