我们正在重新设计我们的PHP网站。新版本将受SVN版本控制,并有一个单独的数据库用于开发和现场站点。
目前我们在网站上有大约20万张图片,我们每月添加5-10张。我们也希望把这些图像放在SVN下。
当前的计划是存储和服务于文件系统中的图像,同时服务于数据库中的元数据。图像将通过带有Apache重写规则的PHP映像系统提供,这样http://host/image/ImageID将访问一个PHP脚本,该脚本查询数据库中具有指定ID的图像,并(基于表中的path
列)返回相应的图像。
我遇到的问题是让图像文件和它们的元数据在实时站点和开发站点之间保持同步。
对于开发团队来说,添加新的映像是(很尴尬,但是)很容易的:我们可以将映像添加到SVN存储库中,方法与处理所有文件和在live和test数据库中手动创建元数据的方式相同。
当我们的员工需要通过网站上传新图片时,问题就出现了。
我能想到的一个可行的解决方案是让我们的PHP上传脚本将新图像提交给SVN,并向live和development数据库发送INSERT查询。但对我来说,这似乎没有效率。另外,PHP中的SVN支持仍然是实验性的,我不喜欢依赖exec()调用。
我还考虑了第三个单独的数据库,只用于图像元数据。以及不将图像存储在SVN中(但它们是应用程序的一部分,而不仅仅是“内容”图像,如果只是备份它们会更好)。
我真的很想把图片保存在SVN中,如果我需要的话,我需要它们与live和development站点之间的元数据保持一致。我还必须为用户上传图片提供一种机制。
处理这种情况的最佳方法是什么?
最佳答案
处理此问题的最佳方法是使用单独的进程在live和dev之间保持图像和元数据的同步。对于图像文件,可以使用从cron运行的bash脚本对上载到live环境的任何图像执行“svn add”和“svn commit”。然后,您可以在您的开发环境中定期运行“svn up”,以确保dev拥有最新的集合。考虑到您的数据集,Mysql复制将是保持live和dev数据库同步的最佳方法。这个解决方案假设两件事:1)数据流向一个方向,从prod流向dev,而不是相反。2)您的用户可以容忍很小的延迟(live和dev不同步的时间)。延迟量将与上传到prod的数据量成正比。考虑到每月添加5-10个图像,延迟量应该是无穷小的。