Sql*_*yan 8 .net vb.net large-data-volumes file-management
我有一个流程,最初将生成3-4百万个PDF文件,并以80K /天的速度继续.它们每个都很小(50K),但我担心的是如何管理我生成的文件总量以便于查找.一些细节:
最初,我曾计划将这些文件全部写入NAS上的单个目录,但我意识到这可能不是一个好主意,因为它们有数百万个,Windows可能无法正常处理百万文件查找.我正在寻找一些建议:
谢谢你的想法!
要回答您的问题:
小智 5
您可以轻松地将文件组织到多个文件夹中,而无需通过业务逻辑或每日订单来执行此操作,如果这种排序是“成块的”(一个文件夹中有很多点击,其他文件夹中的点击很少),这尤其好。
最简单的方法是为文件名创建一个唯一的哈希值,这样你可能会得到这样的结果:
sf394fgr90rtfofrpo98tx.pdf
Run Code Online (Sandbox Code Playgroud)
然后把它分解成两个字符的块,你会得到这个:
sf/39/4f/gr/90/rt/fo/fr/po/98/tx.pdf
Run Code Online (Sandbox Code Playgroud)
如您所见,它为您提供了一个可以轻松导航的深层目录树。
使用良好的散列函数,这将非常均匀地分布,并且每个目录永远不会超过 1296 个条目。如果您遇到碰撞(这应该是非常罕见的),只需在末尾添加一个数字:tx.pdf、tx_1.pdf、tx_2.pdf。同样,如此大的散列上的冲突应该是非常罕见的,因此您因此而获得的那种聚集不是问题。
你说这些文件是数字签名的,所以你可能有你需要的以签名字符串形式存在的哈希值。
我会将文件分组到特定的子文件夹中,并尝试以某种业务逻辑方式组织它们(子文件夹)。也许是在某一天制作的所有文件?每天的六个小时内?或者每个文件数,我想说最多 1000 个。(可能有一个理想的数字,希望有人会发布它。)
文件是否会过期并被删除?如果是这样,则排序并归档为可删除块。如果没有,我可以成为你们的硬件供应商吗?
对于将文件存储在数据库中,双方都存在争论。
最后要担心的一点是保持数据“对齐”。如果数据库将信息存储在文件上以及文件的路径/名称,并且文件被移动,那么您可能会彻底崩溃。