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