Ste*_*ier 8 mysql performance blob
我知道并理解在数据库中存储 blob 数据会影响性能,但是很少检索/查看数据的 blob 部分,它用于较小的数据(绝大多数低于 256k,最大为 10mb) ,它不会被大多数客户使用,并且总行数预计相对较低,很可能低于 50 万,甚至更少。还有一些数据是动态的,对于某些用户来说可能会发生变化,因为它不是静态图像。换句话说,我们正处于是否值得的边缘。
我一直读到最好存储在文件系统中,但我找不到显示性能差异的实际指标,只是人们在没有任何具体证据或指标的情况下互相重复。对我们来说,用完全 ACID 换取性能成本并保证我们所有的备份完全同步可能是值得的。
话虽如此,是否有人知道或拥有任何现实世界的指标来显示将项目存储为 blob 与在文件系统中存储之间的性能差异。我试图了解性能损失是否值得,而不是盲目遵循一般经验法则,并且在花费至少 2-3 小时之后,我还没有看到任何人显示任何实际数字。一切都是空谈,没有具体的东西。
顺便说一下,这是一个 MySQL InnoDB 表。实际数据表有一个到 blob 数据表的链接,所以 blob 不在主数据库中,只有在需要避免任何 I/O 问题时才检索。换句话说,它不是文件系统上数据的路径,而是另一个只有 blob 的表的 ID。这在性能方面如何比较?是不是更糟了 25%?是 100% 吗?是 200-500% 吗?是 1000% 吗?
如果成本仅为 100%-200%,这对我们来说可能是值得的,因为再次很少检索数据。因此,即使我们说有 10,000 个并发用户,最多也只有 50 个用户同时检索他们的 blob 数据。是的,数据特定于每个用户,而不是图像。
处理数据的主要成本是 I/O。无论是操作系统中的 4KB 块(加上目录遍历)还是 InnoDB 中的 16KB 块(加上间接块查找),您都会执行大约相同数量的 I/O。
文件系统和 InnoDB 的缓存方式完全不同;这可能会造成差异——取决于博客的可缓存程度。
你说“很少检索”。那么为什么速度很重要呢?
所以,我怀疑差异是否会超过25%。而且我无法预测哪个会更快。
至于空间,同样存在一些差异,因此很难预测哪个会更紧凑。无论如何,对于您提到的大小斑点,差异不能超过大约 2%。
斑点的可压缩性如何?(大多数图像格式已经压缩;文本通常可按 3:1 压缩。)如果可压缩,则在客户端中进行压缩。(InnoDB 的内置可选压缩更容易,但不是那么好。)
而且,是的,将其放在“并行表”中(正如您所提到的)通常会更好。
另一点- 如果 blob 是用于网页的图像,则将其简单地放在文件中并说 会更有效<img srg=file-path>
。如果它在表格中BLOB
,您必须做额外的工作才能将其传递到网页。由于 I/O 是主要区别,因此我可能期望 img 标签的速度提高 2 倍。
归档时间: |
|
查看次数: |
2958 次 |
最近记录: |