8

我有一个应用程序每秒通过网络接收数百个字符串,大约 50 个字节长。我想将这些缓存到 SSD 以进行进一步处理。如果我每秒执行数百~50 字节的文件附加写入,SSD 是否安全?我怀疑操作系统可能会聚合这些写入,但我不知道。我确实模糊地理解 SSD 是由必须在全有或全无的基础上更新的单元组成的,而且每个单元只能承受这么多的写入(我认为,对于商品驱动器来说,数百或数千次)。我的多次小型写入应用程序是否会使我的 SSD 走向毁灭?如果我缓存到内存并每分钟/小时以块的形式写入磁盘,我会更安全吗?显然这更复杂(最近一分钟/小时的内存缓存的 Web 服务,旧数据的磁盘),

我已经做了几个月而不是几年没有负面影响的事情,但那是几年前的事了,我还没有做过认真的测试。我确实从经验中知道,如果天真地实施,我可以通过这种方法在几个月内非常可靠地销毁硬盘驱动器。

4

3 回答 3

4

SSDs themselves do write combining. They cache writes in the onboard cache until they have a big block and then they write the block in parallel to many NAND dies. This is how SSDs achieve such high write speed despite the fact that the write speed on the NAND itself is quite low. As long as the writes are more or less sequential the size is not very important (not until the number of write requests saturates the ability of the controller to handle).

Depending on the rate at which you need to write the strings, it may make sense to gather them up into blocks at least as big as the page size of the NAND in the SSD. Nowadays the page size is usually 8KB.

于 2014-02-12T17:59:53.000 回答
1

我相信现代 SSD 有足够的智能将写入分配到较少使用的单元,而不是持续写入相同的存储区域(以帮助对抗倦怠)。

也就是说,我可能会缓存到内存,直到您达到某个阈值大小,然后将所有内容转储到 SSD。但出于性能原因,我会这样做......

如果你想一想,写 50 字节 500 次与 500 字节 50 次之间的理论区别是什么?最终仍将相同数量的字节写入驱动器,只是分解方式不同。无论哪种方式,您最终仍会写入驱动器上相同数量的单元,这似乎更像是驱动器控制器能否跟上需求的问题。

于 2014-02-12T17:57:39.097 回答
1

我建议读者在单独提交中将一小部分数据写入数据库时​​控制他/她的 SSD 的 SMART 值。

我个人开始了一个项目,我有两个守护进程将数据包写入 MySQL Innodb。数据包的大小约为 100 字节。一个守护进程每 15 秒写入一个数据包,另一个在 1.5 秒内写入一个数据包。每个数据包都是一个单独的提交,我得到了HUGE,对我的 SSD 产生了难以置信的巨大影响。

启动项目后,“平均块擦除”计数器开始每天增加 1。据我了解,这意味着每天都在重写整个 SSD(70% 为空)以维持两个 Innodb 表,每个表 60MB。我在博客中用更多(不必要的)细节描述了这种情况。

于 2018-09-05T00:10:01.200 回答