我有一个应用程序,它通过网络每秒接收几百个字符串,大约五十个字节。我想将这些缓存到SSD进行进一步处理。如果我每秒执行几百到50个字节的文件附加写入,那对SSD是否安全?我怀疑操作系统可能会聚合这些写入,但我不知道。我模糊地理解SSD是由必须全部或全部更新的单元组成的,并且每个单元只能承受如此多的写入(我认为,对于商品驱动器而言,数百或数千)。我的许多小写应用程序是否让我的SSD成为毁灭之路?如果我缓存到内存并以每分钟/小时的速度写入磁盘,我会更安全吗?显然这更复杂(最近一分钟/小时的内存缓存的Web服务,旧数据的磁盘),但我也不想破坏太多的硬件。
我做了一些与这个没有太大不同的事情,没有不利影响的几个月而不是几年,但那是几年前,我还没有做过严肃的测试。我确实从经验中知道,如果天真地实施,我可以通过这种方法在几个月内非常可靠地销毁硬盘。
答案 0 :(得分:4)
SSD本身会写合并。它们将写入缓存在板载高速缓存中,直到它们具有大块,然后它们将块并行写入许多NAND裸片。这就是SSD如何实现如此高的写入速度,尽管NAND本身的写入速度非常低。只要写入或多或少顺序,大小就不是很重要(直到写入请求的数量达到控制器处理能力的程度)。
根据您需要写入字符串的速率,将它们收集到至少与SSD中NAND页面大小一样大的块中可能是有意义的。现在页面大小通常是8KB。
答案 1 :(得分:1)
我相信现代固态硬盘有足够的智能可以将写入内容分发到较少使用的单元,而不是不断写入相同的存储区域(以帮助防止烧坏)。
也就是说,我可能会缓存到内存,直到达到某个阈值大小,然后将所有内容转储到SSD。但出于性能原因,这将是我要做的事情......
如果你考虑一下,写50个字节500次与500个字节50次之间的理论差异是什么?最终仍然将相同数量的字节写入驱动器,它只是以不同方式分解。无论哪种方式,您最终都会在驱动器上写入相同数量的单元,这似乎更像是驱动器控制器能否满足需求。
答案 2 :(得分:0)
我建议读者在单独提交中将一小部分数据写入数据库时,控制其SSD的SMART值。
我个人开始了一个项目,在那里我有两个守护程序将数据包写入MySQL Innodb。 数据包的大小约为100个字节。一个守护程序每15秒写入一个数据包,另一个守护程序在1.5秒内写入一个数据包。 每个数据包都是一个单独的提交,我得到了巨大,对我的SSD产生了难以置信的巨大影响。
启动项目后,“平均块擦除”计数器开始每天增加1。 据我了解,这意味着每天都要重写整个SSD(70%的空间为空),以维持两个每个60MB的Innodb表。 我在blog中以更多(不必要的)细节描述了这种情况。