Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用数据库与文件系统进行图像排序_Php_Javascript_Sql - Fatal编程技术网

Php 使用数据库与文件系统进行图像排序

Php 使用数据库与文件系统进行图像排序,php,javascript,sql,Php,Javascript,Sql,我在URL上存储了多个图像,比如:/uploads/hash/IMAGE001.jpg。使用jQueryUI的sortable(),我希望异步排序和存储图像的顺序 我想出了两种方法来做到这一点,我很好奇最好的方法是什么 我可以为每个/hash/目录创建一个包含3列(ID、IMAGE\u URL、IMAGE\u INDEX)的SQL表,并在每次排序时更新表的索引值。然后,我可以通过使用ORDERBY IMAGE_索引查询数据库来获取已排序的IMAGE_URL列表 我的另一个想法是用前面的0000(

我在URL上存储了多个图像,比如:
/uploads/hash/IMAGE001.jpg
。使用jQueryUI的
sortable()
,我希望异步排序和存储图像的顺序

我想出了两种方法来做到这一点,我很好奇最好的方法是什么

我可以为每个
/hash/
目录创建一个包含3列(ID、IMAGE\u URL、IMAGE\u INDEX)的SQL表,并在每次排序时更新表的索引值。然后,我可以通过使用ORDERBY IMAGE_索引查询数据库来获取已排序的IMAGE_URL列表

我的另一个想法是用前面的
0000
(例如/uploads/hash/0000IMAGE001.jpg)命名文件。如果我对PHP中的文件进行各种重命名,我可以使用
opendir()
获取PHP中图像的
/hash/
目录,而不需要SQL开销,然后在客户端或服务器端按文件名排序


大量并发文件重命名(与并发SQL表更新相比)会使我遇到瓶颈问题吗?从PHP获取目录列表的性能与通过ORDER BY查询SQL的性能有何不同?

数据库是为存储和检索数据而设计和优化的。更改文件名以存储数据(如排序顺序)通常不是理想的选择。根据文件系统的不同,性能会有很大差异,出现故障将是灾难性的。这里一定要使用数据库选项。

如果要使用PHP的
opendir()
获取文件列表,可以使用一些技术避免瓶颈

首先,您可以通过使用
touch()
更新文件修改时间来保持列表的预排序,这将对
opendir()
返回的列表进行排序

要获得更多优化,请使用目录作为存储桶来加速排序。例如,
IMAGEDIR/a/
IMAGEDIR/b/
等。您可以根据需要开发更高级的目录树


通过系统目录使用bucket排序,它将被优化为为尚未排序的项目保留一个单独的文件夹,并对整个批次进行批量排序。使用包含要排序的整个对象集子集的存储桶,通过使任何给定的排序操作变小并使用
touch()
保留排序,可以加快列表排序所需的时间,从而减少排序算法运行的次数。

在这种情况下,您应该使用数据库进行排序

  • 数据库将建立B树索引并保持排序,以便快速检索和更新
  • 可以对文件进行范围查询
  • 您可以更改实际文件的存储,而无需与查找耦合
  • 您可以在多台计算机上使用memcachd和切分功能扩展到大量图像
  • 文件系统不是为排序和管理更改而设计的

  • 虽然当文件数量较少时速度很快,但排序将花费越来越长的时间
  • 图像本身与id紧密相连,这限制了灵活性
  • 将您限制为一台机器、一个目录,并且受操作系统的限制,您必须通过构建越来越多的虚拟数据库来扩展,最终构建您自己的虚拟数据库
  • 在服务器上,这将是可怕的,操作系统锁和并发管理不如数据库那么复杂 对于任何“真正”的应用程序来说,使用数据库都是一种方法,使用文件系统是一种快速的攻击