我希望有一个可持久的数据结构和支持服务(可能是某种内存数据网格,但能够将数据保存到驱动器上)。将要存储的数据在结构上几乎与普通文件系统相同 - 每个节点具有可变数量的子节点的树(尽管没有像符号链接那样的复杂性)。存在与每个节点相关的一些元信息(有效载荷)。我基本上需要的是有效地在两个方向上获得所有分支(即,如果我要求所有具有深度1000的节点的父节点,我希望具有相同的响应时间,就像我要求其最接近的父节点或直接孩子)。我希望能够在树内改变节点的位置(当然也是所有孩子的位置)。
我知道Patricia树对我的目的来说有点好,但是数据实际上不是 文件系统,因此我没有任何路径可以将节点与树。
存储的最小数据量约为1亿个节点,实际数量预计至少为5-15倍。
答案 0 :(得分:0)
你看过neo4j了吗?它可以充当嵌入式,持久化的图形数据库。
BTW您可能需要大量内存。我怀疑如果你想把它全部留在内存中,每个节点至少需要100-1000字节。对于10亿个节点,最高可达1 TB。
如果你没有那么多内存,你将需要那么多的磁盘空间,你将不得不考虑它会慢很多倍。
答案 1 :(得分:0)
包含以下内容的节点树可能适合您的用例:
这足以非常有效地实现大多数类文件系统的遍历算法。
另一种选择是考虑不可变的持久数据结构 - 这里的Immutability会给你两大优势:
如果您认为持久数据方法可能合适,那么值得查看为此类数据提供数据库服务的Datomic(http://www.datomic.com/)。