Php 使用数据库与文件系统进行图像排序
我在URL上存储了多个图像,比如: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(
/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()
保留排序,可以加快列表排序所需的时间,从而减少排序算法运行的次数。在这种情况下,您应该使用数据库进行排序