我有一个算法需要我以前没见过的行为。在遍历表示文件结构的树时,我希望能够在构建完整个子树后对其进行序列化(填充所有节点),并将它们存储到文件或应用程序数据中供以后使用。
很难的是,我想以这样的方式构建系统,允许我在树结构中反序列化仅单个节点,而不必反序列化最初存储的整个树。 。
对于上下文,该算法仅供我的应用程序使用,当我构建具有数百万个文件和目录的超大文件系统的文件结构时。结构变得如此之大,以至于将数百万代表性文件节点加载到内存中的成本太高。我需要能够随时随地存储部分或全部树,以便我可以减少内存占用量,但是我仍然需要能够在任何给定时间检索有关树的任何部分的信息,无论是已被序列化并存储或已存储。如果在任何时候我发现节点引用树结构中的另一个节点,我需要能够在该节点上查找并反序列化或检索已存在的节点,而不必解压缩整个树。
这个伤害了我的大脑。
答案 0 :(得分:0)
构建存储文件系统树的文件的好方法是按路径排序的(路径,序列化节点数据)对的列表。然后,您可以使用二进制搜索查找节点。如果要快速加载给定节点的所有子节点,则应使用不同的键:(路径组件数,路径,序列化节点数据)。然后,节点的所有子节点都将存储在文件的连续范围内。
我自己没有尝试过,但似乎LevelDB实现了这样的存储。