python的数据持久性是在大量查找但很少写入的情况下实现的吗?

2024-04-20 10:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个项目,基本上监测一组远程目录(FTP,网络路径,和其他),如果文件被认为是新的,并符合标准,我们下载并处理它。然而,我被困在什么最好的方法是保持我们已经下载的文件跟踪。我不想下载任何重复的文件,所以我需要跟踪什么已经下载。你知道吗

最初我把它当作一棵树:

server->directory->file_name

当服务关闭时,它会将其写入一个文件,并在启动时重新读取。然而,考虑到树中大约有20000个文件时,这些文件的速度开始减慢很多。你知道吗

有没有更好的办法?你知道吗

编辑

查找时间开始减慢很多,我的基本实现是一个dict的dict。在磁盘上存储的东西是好的,它或多或少只是查找时间。我知道我可以优化树并对它进行分区。然而,对于这样一个小项目来说,这似乎太过分了,我希望python会有这样的东西。你知道吗


Tags: 文件项目方法name路径网络目录远程
1条回答
网友
1楼 · 发布于 2024-04-20 10:29:16

我会创建一组元组,然后将其pickle到一个文件中。元组应该是(server, directory, file_name),甚至只是(server, full_file_name_including_directory)。不需要多级数据结构。元组将散列到集合中,并提供O(1)查找。你知道吗

你提到“东西开始慢了很多”,但你没有说是读写时间慢了,还是查找时间慢了。如果查找时间减慢,则可能是寻呼。您的数据结构是否接近物理内存的很大一部分?你知道吗

获取一些内存的一种方法是intern()服务器名称。这样,每个服务器名在内存中只存储一次。你知道吗

一个有趣的替代方法是使用Bloom过滤器。这将使您使用更少的内存,但偶尔会下载一个您不必下载的文件。这可能是一个合理的权衡,这取决于您不想下载文件两次的原因。你知道吗

相关问题 更多 >