Php CMS与文件系统存储id可伸缩性 请考虑以下事项:

Php CMS与文件系统存储id可伸缩性 请考虑以下事项:,php,performance,content-management-system,ntfs,jackrabbit,Php,Performance,Content Management System,Ntfs,Jackrabbit,我存储了大约120万个TIF文件,大小从40 KB到120 KB不等 这些文档存储在带有NTFS文件系统的windows服务器上 使用以下变量存储文档: 客户 文件类型 图像文件夹 真实图像 见下文: C:\<client_id>\<doc_type_id>\image001\1.TIF 这是一个PHP托管系统 现阶段的表现是可以接受的。我想知道未来的最佳策略是什么。考虑到客户和文档数量将大幅增加 我正在考虑用CMS替换整个存储 是这样吗?或 正在以如下格式存储文档

我存储了大约120万个TIF文件,大小从40 KB到120 KB不等

这些文档存储在带有NTFS文件系统的windows服务器上

使用以下变量存储文档:

  • 客户
  • 文件类型
  • 图像文件夹
  • 真实图像
见下文:

C:\<client_id>\<doc_type_id>\image001\1.TIF
这是一个PHP托管系统

现阶段的表现是可以接受的。我想知道未来的最佳策略是什么。考虑到客户和文档数量将大幅增加

我正在考虑用CMS替换整个存储

是这样吗?或

正在以如下格式存储文档:

  • 顾客
  • 文件类型
  • 已导入Julian date day of the year文档。
  • 当前用户
  • 6位唯一代码
示例

C:\1\3\image001\1.TiF
C:\1\1\167\2\453257\image001\image.TIF
会同样高效吗

请将CMS与文件系统的所有其他考虑因素排除在外。e、 g版本控制,数据备份


谢谢。

真的吗?我不认为这有什么关系,直到你达到一定的尺寸(我不能,为了我的生命,记住那个尺寸…)。关键是找到一种方法,然后坚持下去,希望它能让你不再需要碰它。我自己的建议,没有任何令人信服的证据支持,与你自己的建议类似:

c:\actual\u file.tif

我还建议,根据您的服务器设置,可能值得为每个客户(取决于数据量或帐户类型)提供自己的驱动器/分区

请记住,如果没有某种用户控制或权限系统,文件路径可能会被猜测和浏览(好像您还不知道这一点……我知道,对不起)。事实上,您提出了“六位数唯一代码”的要点,这表明您不需要通用格式的路径,但我建议使用通用格式(无论您最终选择何种格式)将是一个更好的主意


回到我的Windows时代,我按照文件的主要关系对自己的目录进行排序,现在它被认为是一个“标签”(例如,
c:\documents and settings\university\year1\module21\assignment1.doc),这使得以后更容易找到东西。您的客户似乎有自己的目录结构——由您强制执行——但如果他们只需遍历日期,就可以更轻松地找到他们上周所做的事情,记住当他们到达名为folders的六位数唯一编号时,他们上周将某物放在何处,这将非常困难。充其量。

你的问题与我的问题非常相似。你的负载主要是阅读图像还是写作?如果您需要的是读取可伸缩性,那么本文将介绍memcached,这可能就是您所需要的。jackrabbit加载了更多功能,但更多用于分层文本存储。不确定它是否能在图像上提供更好的性能。此外,如果您选择jackrabbit,请确保您的内容层次结构足够深,以便jackrabbit保持高效。任何有10000个或更多孩子的家长都会有低于标准的性能。

如果您打算将内容移动到不同的机器(SAN/NAS),则需要解决您提出的存储策略。要做到这一点,您需要从路径中删除所有客户数据,只需创建一个散列,然后将其保存在数据库中,以链接到正在访问的文件。这样,您就得到了如下文件夹结构:

NAS1/00/01/86/63/54/89/image01/image.tiff
NAS2/00/02/46/62/22/11/image02/image.tiff
...
我还建议你去看一看。你需要做的就是在它前面添加一个代理,这样一切都会好起来


就像Dave提到的,确保一个文件夹中没有太多的子文件夹。在10.000左右,事情往往会变得非常缓慢。

您能详细说明您期望的访问模式吗?路径将存储在数据库中。用户将根据数据库中存储的列运行查询。根据他选择的搜索结果,将检索所选结果的路径并向用户显示。如果路径有效,在需要之前不要更改,只需将读取图像的代码分离到它自己的方法中即可因此,如果以后需要,您可以对其进行更改。只有当少量图像被大量读取并且您有多台服务器时,memcache才会有帮助。否则,只需使用64位系统并在文件服务器中放入大量RAM即可。让操作系统为您进行缓存。