获取文件系统的最有效方法

时间:2012-08-25 02:10:57

标签: php mysql filesystems innodb

  

可能重复:
  php / Mysql best tree structure

我目前正在使用PHP和MySQL编写文件系统。

文件夹存储在数据库表“folders”中,其中包含字段:“id”,“name”,“parent_id”。我认为这将是最快的方式。

文件存储在系统中,由数据库表“files”链接,字段为“id”,“name”,“parent_id”和“realUrl”。

假设我要创建一个这样的路径:One / Folder / After / Another / Folder。这是表“文件夹”然后:

+++++++++++++++++++++++++++++
+ id |   name   | parent_id +
+----|----------|-----------+
+ 1  | One      |     0     +
+ 2  | Folder   |     1     +
+ 3  | After    |     2     +
+ 4  | Another  |     3     +
+ 5  | Folder   |     4     +

很明显,找出像文件夹路径这样的东西并不是那么简单。当我请求文件夹“文件夹”的数据时,我想知道这个特定文件夹的路径。除了选择数据库表的所有内容然后用PHP迭代它之外,我无法找到一个很好的MySQL出路。但是,当我有数千个文件夹时,这可能需要很长时间?

你会建议什么?我想创建一个单独的表“parent”,我存储所有依赖项:

++++++++++++++++++++++++++
+ folders_id | parent_id +
+------------|-----------+
+     2      |      1    +
+     3      |      1    +
+     3      |      2    +
+     4      |      1    +
+     4      |      2    +
+     4      |      3    +
+     5      |      1    +
+     5      |      2    +
+     5      |      3    +
+     5      |      4    +

因此,如果我想从“一个”到“文件夹”获取路径,我只需要

SELECT parent_id FROM parents WHERE folders_id=5

存在发生错误的巨大风险,当然这只是冗余数据。那么可能有一个更智能的解决方案?我可以直接通过MySQL命令迭代表“文件夹”吗?

当然我的问题也与速度有关。是否可以更快地进行多个简单查询,或者只使用一个较大的查询来获取数据?

使用表“parents”,我可以通过一个查询(合并两个表)和一些PHP找到文件夹的路径。没有表“父母”,我不知道如何除了选择所有,这不是解决方案?

0 个答案:

没有答案