类文件系统数据结构的快速且可持久的表示

时间:2013-12-17 16:19:02

标签: java data-structures

我希望有一个可持久的数据结构和支持服务(可能是某种内存数据网格,但能够将数据保存到驱动器上)。将要存储的数据在结构上几乎与普通文件系统相同 - 每个节点具有可变数量的子节点的树(尽管没有像符号链接那样的复杂性)。存在与每个节点相关的一些元信息(有效载荷)。我基本上需要的是有效地在两个方向上获得所有分支(即,如果我要求所有具有深度1000的节点的父节点,我希望具有相同的响应时间,就像我要求其最接近的父节点或直接孩子)。我希望能够在树内改变节点的位置(当然也是所有孩子的位置)。

我知道Patricia树对我的目的来说有点好,但是数据实际上不是 文件系统,因此我没有任何路径可以将节点与树。

存储的最小数据量约为1亿个节点,实际数量预计至少为5-15倍。

2 个答案:

答案 0 :(得分:0)

你看过neo4j了吗?它可以充当嵌入式,持久化的图形数据库。

BTW您可能需要大量内存。我怀疑如果你想把它全部留在内存中,每个节点至少需要100-1000字节。对于10亿个节点,最高可达1 TB。

如果你没有那么多内存,你将需要那么多的磁盘空间,你将不得不考虑它会慢很多倍。

答案 1 :(得分:0)

包含以下内容的节点树可能适合您的用例:

  • 名称
  • 父指针
  • 名称的HashMap(或有序地图) - >子节点
  • 节点级别有效负载/元数据

这足以非常有效地实现大多数类文件系统的遍历算法。

另一种选择是考虑不可变的持久数据结构 - 这里的Immutability会给你两大优势:

  • 您只能存储一次相同的数据/分支,并可能显着降低您的内存需求。
  • 您的数据结构对于高效的并发访问是线程安全的,这很难通过可变的树状结构来实现。

如果您认为持久数据方法可能合适,那么值得查看为此类数据提供数据库服务的Datomic(http://www.datomic.com/)。