Python 当在文件系统中存储文件的应用程序时,我需要考虑什么?
我对制作一个应用程序很感兴趣,在这个应用程序中,用户可以上传转换成html文档的大文件(~2MB)。此应用程序将没有数据库。相反,这些html文件存储在文档源树之外的特定可写目录中。因此,随着越来越多的文件被添加到该目录中,该目录将变得越来越大。用户应该能够通过访问适当的url来查看这些html文件。抛开所有安全问题不谈,如果这个目录继续增长,我需要担心什么?当文件较多时,访问其中的文件会花费较长的时间吗?它会因此而崩溃吗?我是否应该每隔100个左右的文件创建一个新目录来防止这种情况Python 当在文件系统中存储文件的应用程序时,我需要考虑什么?,python,filesystems,scalability,pyramid,Python,Filesystems,Scalability,Pyramid,我对制作一个应用程序很感兴趣,在这个应用程序中,用户可以上传转换成html文档的大文件(~2MB)。此应用程序将没有数据库。相反,这些html文件存储在文档源树之外的特定可写目录中。因此,随着越来越多的文件被添加到该目录中,该目录将变得越来越大。用户应该能够通过访问适当的url来查看这些html文件。抛开所有安全问题不谈,如果这个目录继续增长,我需要担心什么?当文件较多时,访问其中的文件会花费较长的时间吗?它会因此而崩溃吗?我是否应该每隔100个左右的文件创建一个新目录来防止这种情况 这很重要,
这很重要,我想使用pyramid和python制作这个应用程序,这在很大程度上取决于您的文件系统。您可能希望查找git人员遇到的问题(也使用基于文件系统的唯一数据库) 通常,明智的做法是将该目录拆分,例如,获取文件名的前两个或三个字母(或这些字母的散列),然后根据该键将文件分组到子目录中。您的结构如下所示:
uploaddir/
00/
files whose name sha1 starts with 00
01/
files whose name sha1 starts with 01
等等。通过对可能较大的目录进行分区,可以减轻文件系统的一些负载。如果您想确保没有用户可以通过专门上传名称散列为相同初始字符的文件来执行拒绝服务攻击,您也可以以不同方式对散列进行种子设定,或对其进行盐分或诸如此类的操作
具体地说,大目录的效果是特定于文件系统的。有些可能会变慢,有些可能会处理得很好,有些可能会对文件有每个目录的限制。您可能希望按用户、应用程序或类似程序对目录进行分区,以便易于管理,就像如果用户停止使用服务,您可以删除他们的目录一样。我想你也会把拉链拉上。如果你把它很好地解耦,那么你以后就可以改变主意了 我很想知道如何使用类似SQLite的东西来为您工作,因为每个分区目录可以有一个SQLite db 我假设HTML文件比他们上传的文件大,那么为什么要存储大的HTML文件呢 像Mongodb之类的东西是不可能的?正如你的应用程序可以扩展到多个服务器一样,除非你首先使用某种技术选择了正确的服务器,否则你就无法访问不同服务器上的其他文件。那么,有可能服务器闲置,因为没有人需要这些文档 为什么只在目录中存储文件会受到限制,它是POC吗 编辑 我觉得阅读这样的东西很有价值,我建议你找一个已经在做你所做的事情的网站,并阅读他们的技术堆栈 正如已经有人评论的那样,为什么不使用AmazonS3或类似的工具呢 现实地问问自己,你想象中有多少用户,你真的想花费大量精力担心成为下一个facebook,并试图在你可以使用你的东西的时候为后端做最终的技术堆栈 几年前,我在一个系统上工作,该系统将保险证书存储在文件系统上,我们通常会用完索引节点 我敢说这是一个吮吸它的案例,看看什么适合你和你的应用程序 编辑 我相信它们是用来处理所有负载平衡问题的 正如我想象的,作为一个用户,我想
虽然我认为这是一个显而易见的名称,但也存在安全问题。您应该查看Amazon S3存储,为每台服务器创建不同的目录怎么样?所以对于服务器1-。。。例如,url应该是www.domain.com/1/dlfksjd.html或www.domain.com/2/sldkjrr.html。我如何与web托管提供商进行安排?关于mongodb或其他类似的xml数据存储,我的印象是,虽然这些存储具有不被大文件困住的优势,但读取访问(对我来说非常重要)不会像文件系统存储那样快。如果我错了,请纠正我。读一些你可能会说这与他们存储的图像类似的东西,这些图像以某种方式被转换。我读的是人们实际做这件事的真实生活经历,而不是这么多人的观点D