我有一个新程序,它将生成大量Base64编码的音频和图像数据。这些数据将以XML的形式通过HTTP提供,Base64数据将是内联的。这些文件很可能会突破20MB或更高。直接从文件系统提供这些文件会更高效,还是可以将数据存储在MySQL数据库中?将设置缓存,但总体上不需要,因为这些数据可能会在创建和提供后立即清除。
我知道在大多数情况下在数据库中存储二进制数据是不受欢迎的,但由于这都是字符数据,我想看看共识是什么。截至目前,出于效率原因,我倾向于将它们存储在文件系统中,但如果将它们存储在数据库中是可行的,那么管理数据会更容易。
答案 0 :(得分:2)
你需要权衡几个因素:
访问速度如果您将所有文件转储到文件系统中,那么当您有太多文件时,某些文件系统会中断或减慢速度。我已经看到许多不同的目录分段方案来解决这个问题。
压缩 MySQL可以轻松压缩存储的数据。使用文件系统,压缩数据可能更困难。使用任何类型的压缩压缩也会引起服务器CPU速度的问题。
备份/恢复数据库易于备份/恢复,文件系统的容易程度或难度差别很大。如果您要在文件系统中备份/恢复数据,那么这会使您的备份/恢复变得更加复杂,并且在危机中并不复杂。
数据丢失容差使用数据库操作记录,所有数据都存放在同一位置。如果将数据保存到文件中,则需要使用额外的代码来操作关联文件,这会引入另一个存在错误和可能的数据丢失的地方。更具体地说,如果您将部分记录存储在文件系统中而其余部分存储在数据库中,则需要不遗余力地维护事务完整性。在您丢失数据之前,没有人关心这一点,所以请注意这方面,即使它看起来可能不重要。
复制如果您只需要在一个级别执行此操作,则更容易处理复制问题。仅将数据存储在数据库中,然后仅复制数据库比为数据库和文件系统更容易。
繁琐处理较大的数据库备份比处理较小的数据库备份更加麻烦。
这些是我想到的首要问题。我试图不提倡任何一种解决方案,它在很大程度上取决于你所讨论的文件系统,而且由于没有指定,你需要自己做出决定。
答案 1 :(得分:0)
首先,您可以将任何您喜欢的字节存储在数据库中(使用适当的“blob”类型)。数据库不需要包含仅字符数据。
其次,将base64编码的数据存储在磁盘或数据库中会浪费空间(占空间的25%)。存储实际的字节,然后在从HTTP服务器出来的路上对字节进行base64编码。
如果您的清除策略与您指示的一样短,那么不可以将数据存储在任何地方,并且每次需要时根据需要生成数据可能会更好。这样,你的缓存层就不可能出现任何问题了,因为没有一个问题。