2

I have a PHP application that takes objects from users, and stores them on a server. Similar to an upload-download service. The object could vary from just a string of text,to any kind of media object like a movie, songs etc. Even if a simple text is sent, the size of the text sent could be big (probably an entire ebook). At present, the way I'm doing this is, write all these data to files, because files don't impose a size limit.

Edit: To clarify, I'm looking for a generic and efficient way for storing data, no matter what the format. For example, a user could send the string, "Hi, I am XYZ". I can store this using file operations like "fopen", "fwrite". If a user sends an MP3 file, I can again use "fwrite" and the data of the file will be written as is, and the MP3 format is not disturbed. This works perfectly at present, no issues. So "fwrite" is my generic interface here.

My question: Is there some better, efficient way to do this?

Thanking you for your help!

4

2 回答 2

2

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

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

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

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

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

于 2013-04-27T19:21:13.617 回答
0

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

于 2013-04-27T19:13:27.170 回答