我正在开发需要图形数据库(存储原始数据)和文档数据库(从原始数据中提取报告)提供的功能的应用程序。我打算使用neo4j和mongodb。我正在重新考虑并查看 orientDB。拥有一个多模型数据库比拥有两个独立的数据库更好吗?我倾向于 neo4j 的原因是它的原生图形存储,它可能对大型图形的内存局部性派上用场。OrientDB 本身并不存储图形。或者是吗?
2 回答
OrientDB 以原生方式存储图形。它的引擎 100% 是像 Neo4j 这样的图形数据库。实际上 OrientDB 和 Neo4j 是仅有的无索引邻接的图数据库。其他一些图形数据库充当现有模型(RDBMS、列或文档存储)之上的一层。
所以你可以用 Neo4j 做任何你不能用 OrientDB 做的事情。但是 OrientDB 允许对更复杂的数据进行建模,就像 Document DBMS (MongoDB) 可以做的那样。例如,OrientDB 中的每个顶点和边都是一个文档 (json),因此您可以在顶点和边中存储复杂类型,如嵌入属性、列表、集合、日期、小数等。
不要被术语所迷惑。“无索引邻接”是一个术语,仅表示图顶点与它们的边“一起”存储。每个数据库执行此操作的方式略有不同。Neo4J 将它们存储在磁盘上的链表中。如果你在内存中有它们,而且它们的数量不多,它们就会很快。如果您必须在磁盘上访问它们,那么您可能需要一个索引。Titan 将它们作为列存储在 Cassandra 等宽列数据库中。如果它们在内存中,它们会很快。如果您必须在磁盘上访问它们,则底层数据库的范围查询使它们可以快速批量加载,并且额外的索引可以降低搜索大型边缘列表的成本。
这个讨论相当有价值:Titan 如何使用 HBase / Cassandra 实现恒定时间查找?
无论您使用的是 OrientDB 还是任何其他数据库,您在图形查询方面的效率将在很大程度上取决于您放置的索引,以便您在相对较小的一组节点上启动和遍历图形查询。请务必对您正在执行的某些查询进行建模,以确保您选择的任何数据库都支持正确的索引,无论它们是跨整个图形还是每个顶点的本地。