我已经阅读了几个主题,但我迷路了。我对此很陌生。我想存储巨大的稀疏矩阵并有几个想法,但可以在它们之间进行选择。这是我的需求:
- 邻接矩阵约。5000 万个顶点。
- 每个顶点的最大邻居数量 - 大约。10 000。
- 每个顶点的平均邻居数量 - 大约。200-300。
- 快速行查询 - 向量将乘以该矩阵。
- 添加边缘的 O(1) 复杂度。
- 很可能,边缘不会被删除。
- 尽可能快地枚举与 v 相邻的顶点。
- 可移植性——必须有一种方法可以将基地从一台计算机转移到另一台计算机。
所以,这是我的想法:
- 带有对(行,列)的巨大表。非常简单,但顶点的枚举至少为 O(log N),其中 N - 表的大小。正如我认为的那样,它很慢。此外,它必须被索引。每个 RDBMS 都会有什么好处。
- 大量列表:每个顶点一个列表。非常快的枚举,但是存储它不会占用太多资源吗?另外,我不确定在这种情况下使用哪个 DBMS:也许是一些 NoSql?
- 巨大的表(行 | 列集)。以上两种结合。我不确定是否有任何 RDBMS 支持任意集合。你知道任何?也许 NoSql 在这里有用?
- 邻接列表的集合。任何 RDBMS 都适用于此,并且在复杂性方面的成本是好的,但它们可能会被多个对 DB 的请求杀死一个顶点。
- HDF5 - 我认为它会因为 I/O 而变慢。
- Neo4j - 据我了解,它将数据存储在双链表中,所以它实际上与 №4 相同,对吗?
请帮助我选择或提供更好的决定。
如果我在某个地方的估计有误,请纠正我。