Mysql 在数据库中存储二进制文件:在这种特殊情况下,我是否遗漏了一些缺点?

Mysql 在数据库中存储二进制文件:在这种特殊情况下,我是否遗漏了一些缺点?,mysql,database,blob,Mysql,Database,Blob,我知道这个主题在过去曾被广泛讨论过,我彻底分析了关于这个问题的许多有见地的答案——证实了我的观点,即一般来说,在数据库中存储blob是一种不好的做法 现在让我们来看看下面的场景: 有用户,它与图像有一对多的关系 图像行将包含以下二进制文件(或指向以下二进制文件的文件路径),除了用户的FK和一些元数据(日期、标题…): 缩略图(一个小得可笑的二进制文件) 全尺寸(实际将进行预处理,约为400x600,约为35-45kb 如果没有图像,我永远不需要图像表中的任何数据(无论如何,我知道在哪里不使

我知道这个主题在过去曾被广泛讨论过,我彻底分析了关于这个问题的许多有见地的答案——证实了我的观点,即一般来说,在数据库中存储blob是一种不好的做法

现在让我们来看看下面的场景:

  • 用户
    ,它与
    图像
    有一对多的关系
  • 图像
    行将包含以下二进制文件(或指向以下二进制文件的文件路径),除了
    用户
    的FK和一些元数据(日期、标题…):
    • 缩略图(一个小得可笑的二进制文件)
    • 全尺寸(实际将进行预处理,约为400x600,约为35-45kb
  • 如果没有图像,我永远不需要
    图像
    表中的任何数据(无论如何,我知道在哪里不使用
    选择*
  • 我想使用fs和内存缓存
  • 在最常见的场景中,我只需要拇指(仅在某些事件中动态获取完整大小的图像,在这些情况下,通过ID获取图像)
  • 用户会想要改变他们的图片数据,删除它们,改变很多
一切似乎都让我觉得DB解决方案是最优的


是否有我看不到的缺点(除了在没有缓存的情况下明显打开的db连接)?

这种情况下的一个问题是备份,或者将“开发”或“测试”环境与生产环境同步(在db转储周围移动会很痛苦)。如果所有图像都在fs上,则对其进行整体编辑也会简单得多(例如:为图像创建一个新大小)


无论如何,我没有充分了解这种方法相对于“db中的指针,fs中的文件”的真正优势。内存缓存,也许?这些天当我想到BLOB时,我想到了S3:)

这种情况下的一个问题是备份,或者将“开发”或“测试”环境与生产环境同步(在db转储中移动会很痛苦)。如果所有图像都在fs上,则对它们进行整体编辑也会简单得多(例如:mass为图像创建一个新的大小)


无论如何,我没有充分了解这种方法相对于“db中的指针,fs中的文件”的真正优势。内存缓存,也许?这些天当我想到BLOB时,我想到了S3:)

fs和内存缓存是指“文件系统和内存缓存”吗?最肯定的是(11个字符)“fs和内存缓存”是指什么“文件系统和内存缓存”?最肯定的是(11个字符)。好吧,明显的优势是不必同时跟踪fs和db。此外,我从不将所有数据从测试db移动到生产db,因此我不认为这是一个问题。考虑到这一点(根据我的经验)并不明显,我想知道还有哪些优点。如果这是唯一的优点,你应该重新考虑一下。我能想到的最明显的缺点是必须更新两件事而不是一件事。还有版本控制、回滚、数据完整性保证和元数据同步……那么,明显的优点是不必同时跟踪另外,我从未将所有数据从测试数据库移动到生产数据库,因此我不认为这是一个问题,我想知道还有哪些优点。如果这是唯一的优点,你应该重新考虑一下。我能想到的最明显的缺点是必须更新两件事而不是一件事。还有版本控制、回滚、数据完整性保证和元数据同步。。。