SSD使用对基本数据库假设的影响是什么?

Eug*_*eMi 17 database postgresql solid-state-drive neo4j redis

固态硬盘现在司空见惯; Amazon EBS由SSD支持,因此大多数云数据库现在也运行在SSD(Heroku PostgreSQL等)上.传统上,数据库和相关体系结构的设计理念是随机访问不好 - SSD不再是这种情况.

SSD如何影响以下?

  1. 数据库设计 - 数据库旨在最大限度地减少磁盘搜索(WAL,B树).SSD如何改变数据库设计的内部和调整?
  2. 应用程序开发 - 工作假设一直是(a)您希望从内存而不是DB服务器用户请求,以及(2)对数据库的访问是IO绑定的.使用SSD,从数据库中检索数据可以足够快,并且数据库访问通常是网络绑定的.这是否减少了对内存数据库的需求?显然,您仍然希望预先计算昂贵的操作,但您可能只是将它们存储在数据库中
  3. 专业数据库 - 有很多数据库可以处理关系数据库认为不好的事情(部分原因是随机数据访问).一个这样的例子是图形DB(Neo4j),它以紧凑的方式在磁盘上存储节点和邻接列表.如果我们可以在SSD上部署RDBMS而不担心随机访问,这些数据库是否有用?

Cra*_*ger 17

首先,SSD不能免费随机访问.只是更便宜.特别是,随机写入仍然非常昂贵,尽管通过持久的回写高速缓存进行小的随机写入可以减轻这种情况.

如果SSD真的将它刷新到底层媒体上,那么在SSD上的WAL会非常昂贵 - 但事实并非如此.它将它累积在回写高速缓存中,并在整个擦除块大小的块中周期性地将其刷新.因此,WAL实际上在SDD上工作得非常好,因为对于部分擦除块写入,从不需要读取/修改/写入周期.

我确信在SSD的索引上存在树结构存储的机会.这不是我们在PostgreSQL中真正探索过的东西.

我使用的大多数基于SSD的数据库服务器仍然完全受限于正常操作的磁盘I/O. 固态硬盘很快,但不是魔术.即使是PCI-E集成的SSD也无法与RAM竞争,大型工作负载往往会使SSD的回写缓存和队列快速饱和.

类似地,在RDBMS中走一条邻接列表在计算方面仍然远没有那么自由,磁盘表示不像图形DB那样紧凑等等.在需要它的专业化中可以获得很多东西.

要真正了解超快存储对数据库的影响,您需要更进一步,看看基于PCIe RAM的存储设备是疯狂,快速的.

顺便说一句,在许多方面,SSD与具有大电池支持的写缓存的SCSI HBA没有什么不同.这些已经存在了很长时间.SSD往往具有更好的随机读取,但它在其他方面非常相似.

  • 近似延迟的经验法则是RDBMS访问比远程内存数据库访问慢一个数量级:磁盘访问速度为10毫秒,网络访问速度为1毫秒(在同一数据中心).你会在哪里放置SSD支持的RDBMS?你还能说它慢了一个数量级吗? (2认同)