如果我将数据库用于关系数据并选择在文件系统中存储大型二进制 blob,我如何将两者集成?这个过程是如何进行的?
我知道数据库需要存储一个目录路径/链接到相应的 blob,但是有人可以告诉我具体细节吗?例如,我认为我应该有一些 shell 脚本来首先对安全 /tmp 位置中的二进制文件执行病毒检查,然后将其移动到实际存储位置并更新数据库中的路径。但是要从操作系统执行此操作将需要一个脚本来定期检查目录中是否有更改,然后触发操作。是否可以从数据库中运行 shell 脚本(我知道反过来也是可能的)?
或者在 MySQL/Postgres 中是否有更好的工具来做这种事情(与文件系统存储集成)?
“大”玩家甚至不会将图像放在同一台机器上。相反,他们拥有全球分布的“图像服务器”,并针对输出只读图像进行了优化。在他们的例子中,分布式处理的好处超过了偶尔的不一致(链接到不存在的图像;反之亦然)。还有其他机器处理病毒检查、缩放、剥离 EXIF 等。
MySQL 无法存储大于 4GB 的 blob(是的,您可以(应该)将其分块)。即使是 16MB 也有一些您可能会遇到的问题(复制、调整等)。
如果您扫描元数据,并且行中有大斑点,则服务器会花费大量时间跨过牛排。“垂直分区”是避免此问题的一种方法。在一个实现中,我从主行中的缩略图和 EXIF 数据开始。最终我发现了“牛肉饼”问题并更改为将这两个 blob 放在一个并行表中。它跑得明显更快。
我已经以任何一种方式实施了事情。掷硬币决定要做什么。考虑您的决定六个月,然后考虑更改为其他机制。同时,设计您的代码,以便您可以以最少的麻烦进行更改。