当数据大小没有限制时,有效的数据存储

时间:2013-04-27 19:05:27

标签: php mysql database file

我有一个PHP应用程序,它从用户那里获取对象,并将它们存储在服务器上。与上传下载服务类似。对象可以从一串文本到任何类型的媒体对象(如电影,歌曲等)不等。即使发送简单文本,发送的文本大小也可能很大(可能是整个电子书)。目前,我这样做的方式是,将所有这些数据写入文件,因为文件不会施加大小限制。

编辑:为了澄清,我正在寻找一种通用且有效的方式来存储数据,无论格式如何。例如,用户可以发送字符串“嗨,我是XYZ”。我可以使用“fopen”,“fwrite”等文件操作来存储它。如果用户发送MP3文件,我可以再次使用“fwrite”,文件的数据将按原样写入,并且MP3格式不会受到干扰。这在目前完美无缺,没有问题。所以“fwrite”是我的通用界面。

我的问题:有没有更好,更有效的方法来做到这一点?

感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

这个问题的答案相当复杂。您绝对可以将这些对象作为LONGBLOB对象存储在数据库中 - 除非您进入功能长度影片领域(大小限制为32位)。

更重要的一个问题是如何将对象返回给用户。 “blob”对象不会给返回结果提供很大的灵活性(它来自单行查询)。从文件系统中读取可能会提供更大的灵活性(例如检索文本文件的一部分以查看内容)。

另一个问题是备份和恢复。将对象存储在数据库中将大大增加数据库大小,从而需要更多时间来还原数据库。如果出现问题,您可能很乐意在实际访问对象之前恢复数据库(用户可以查看他们拥有的对象)。

另一方面,拥有数据库和对象的单个图像可能会很方便,例如,移动到备份服务器。或者,如果您使用复制来保持多个版本同步,则将所有内容存储在数据库中是免费的(假设您在两个服务器之间有高带宽连接)。

就个人而言,我倾向于认为这些对象更适合文件系统。这确实需要一个更复杂的应用程序API,它必须从两个不同的地方检索数据。

答案 1 :(得分:0)

在文件系统对文件大小的每个目录计数的文件没有限制之前,将文件存储在文件系统中并不是一种坏方法。在许多服务器上同步它也很困难。 在这种限制的情况下,您可以使用某种虚拟fs(如mongo gridFS