从DB生成500,000个静态html文件的最快方式(算法)是什么?
将所有这些文件放在单个文件夹中是一个好习惯吗?或者为这些文件分层创建?
我们希望处理大约6,000,000个并发命中,因此静态文件将是一个很好的解决方案。 源DB将是没有JOINS的简单平面表。
我们希望从单个表中生成此文件包含500k记录。 文件名将是此表中的第一个字段。 HTML文件将包含显示大约900字节的数据。
答案 0 :(得分:3)
即使您的文件系统可以“处理”单个目录中的500,000个文件,它也不太可能表现良好。即使可以表现良好,人类也很难管理这些文件。
我肯定会把它们放在一个层次结构中。
至于生成它们的最快方法 - 你已经要求一个算法,但没有陈述你想要它做什么。您可能想要使用的技术数量众多 - 无论您最喜欢哪种技术都可能是最好的选择 - 以及任何接近任务的方式,具体取决于它的实际内容。
答案 1 :(得分:1)
层次结构最适合性能,因为许多应用程序将遍历单个目录中的所有文件。例如,Windows资源管理器。这将使应用程序变慢。
提取它们的最快方法是使用数据库的头文件和fwrite()等编写一个小的C程序...
F.Y.I。
NTFS可容纳4,294,967,295个文件:http://en.wikipedia.org/wiki/NTFS EXT3可以保存VolumeByteSize / 2 ^ 13个文件:http://en.wikipedia.org/wiki/Ext3#cite_note-0
答案 2 :(得分:1)
为什么不将生成的HTML存储在数据库中?看起来您无论如何都会有效地将文件系统视为数据库 - 至少如果您将HTML存储在数据库中,您可以依靠DBMS来优化查找性能(例如,通过缓存最近查询的HTML)并且您可以添加索引并分析查询性能。否则你只需要锤击文件系统;即将问题转移到别处。
另外,我建议退后一步,看看瓶颈目前在哪里。存储HTML(表示层数据)不是一个优雅的解决方案 - 如果真正的问题是由查询性能引起的,可考虑将非规范化表引入包含中间结果的模式中,从中可以快速生成HTML。
答案 3 :(得分:1)
如果我这样做,我会根据文件名(IFF文件名分布得很好)将生成的文件存储在层次结构中,因此“onefile.html”存储在“o / n /”中e / onefile.html“和”anotherfile.html“as”a / n / o / anotherfile.html“。不需要使用三级存储,您可能需要四级存储。此外,按字符分组路径名可能不是最佳分布,最好使用两个或三个字符,具体取决于您的发行版的外观。
我过去曾为电子传真服务使用类似的存储方案接收传真(使用目的地传真号码的较长和较长的前缀作为路径名组件)。
我想您正在考虑生成平面文件的原因是分摊生成HTML的成本吗?
答案 4 :(得分:0)
有一个文件限制(至少在Linux中,around 32k items)所以不,我不认为这样做很聪明。
NTFS的限制为4,294,967,295 files in a folder.
答案 5 :(得分:0)
500,000个条目,每个大小约1k?所以我们谈论的是500 MB的数据。如果可能的话,我会简单地将整个事情放在ramdisk上,如果你需要文件系统功能,可以将它作为有序结构(hastable,某种数组)保存在内存中,如果你不需要的话。是否有特定原因,为什么不将结果存储在临时数据库表中? (SQLite)