我刚刚在运行于Ubuntu Server的网站上添加了预测搜索功能(请参见下面的示例)。这直接从数据库运行。我想为每个搜索缓存结果,并使用它(如果存在),否则创建它。
将一个潜在的1000万cira结果保存到一个目录中的单独文件中,是否会有任何问题?还是建议将它们分成文件夹?
例:
os.listdir
出于这个原因,一个功能请求在python中生成生成器版本被完全拒绝。
我刚刚在运行于Ubuntu Server的网站上添加了预测搜索功能(请参见下面的示例)。这直接从数据库运行。我想为每个搜索缓存结果,并使用它(如果存在),否则创建它。
将一个潜在的1000万cira结果保存到一个目录中的单独文件中,是否会有任何问题?还是建议将它们分成文件夹?
例:
os.listdir
出于这个原因,一个功能请求在python中生成生成器版本被完全拒绝。
Answers:
将一个潜在的大约一千万个结果保存在一个目录中的单独文件中,是否会有任何问题?
是。可能还有更多原因,但我可以将这些理由从头顶上张贴出来:
tune2fs
有一个名为的选项dir_index
,该选项通常默认情况下处于打开状态(在Ubuntu上是),该选项可让您在看到性能下降之前在目录中存储大约10万个文件。这甚至与您正在考虑的1000万个文件还差得很远。
ext
文件系统具有固定的最大索引节点数。每个文件和目录使用1个索引节点。使用df -i
您的分区和空闲inode的景色。当索引节点用尽时,您将无法创建新文件或文件夹。
类似这样的命令rm
并ls
在使用通配符展开命令,将结束与一个“参数列表太长”。您将不得不使用find
删除或列出文件。并且find
往往很慢。
还是建议将它们分成文件夹?
是。明确地。基本上,您甚至不能在1个目录中存储10m个文件。
我会使用数据库。如果要为网站缓存它,请查看“ solr ”(“提供分布式索引,复制和负载平衡查询”)。
最终遇到同样的问题。运行我自己的基准测试,以了解是否可以将所有内容放置在同一文件夹中,而不是将它们放置在多个文件夹中。看来可以,而且速度更快!
参考:https : //medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
二进制搜索可以轻松处理数百万条记录,因此搜索单个目录将不是问题。它将很快完成。
基本上,如果您使用的是32位系统,则二进制搜索最多2Gb的记录既简单又好。
Berekely DB是一种开源软件,可以轻松地将完整结果存储在一个条目下,并且内置了搜索功能。