database - SSD 使用对基本数据库假设有何影响?

标签 database postgresql neo4j redis solid-state-drive

SSD 现在很普遍; Amazon EBS 由 SSD 支持,因此大多数云数据库现在也运行在 SSD 上(Heroku PostgreSQL 等)。传统上,数据库和相关架构的设计理念是随机访问不好 - SSD 不再是这种情况。

SSD 如何影响以下内容?

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

最佳答案

首先,SSD 不能免费进行随机访问。只是更便宜。特别是,随机写入仍然非常昂贵,尽管通过持久的回写缓存在小的随机写入中缓解了这种情况。

如果 SSD 真正将 WAL 刷新到底层介质,则 SSD 上的 WAL 将非常昂贵 - 但事实并非如此。它将它累积在回写缓存中,并定期将其刷新为整个删除 block 大小的 block 。所以 WAL 实际上在 SDD 上运行得非常好,因为对于部分删除 block 写入,从来不需要读取/修改/写入周期。

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

我使用的大多数基于 SSD 的数据库服务器都完全保留磁盘 I/O 以保证正常运行。 SSD 速度很快,但并不神奇。即使是 PCI-E 集成 SSD 也无法与 RAM 竞争,而且大工作负载往往会很快使 SSD 的回写缓存和队列饱和。

类似地,在 RDBMS 中遍历邻接表在计算方面仍然远非免费,磁盘上的表示不如图 DB 中的紧凑,等等。在您需要的地方从特化中可以获得很多好处。

要真正了解超快存储对数据库的作用,您需要更进一步,看看速度快得离谱的基于 PCIe RAM 的存储设备。

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

关于database - SSD 使用对基本数据库假设有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26640769/

相关文章:

c++ - C++中的数据库问题

postgresql - 使用 PostgreSQL 选择随机点

java - SQL注入(inject)和可能的攻击

java - 我应该如何通过 id 保护默认值或向表中添加另一个属性?

database - 分析 Mnesia 查询

postgresql - 运行缓慢的 Postgres 查询

c# - TSQL 相当于 PostgreSQL "PERFORM"关键字?

neo4j - 我的密码 WHERE 子句没有过滤

neo4j - 与 OR 条件匹配

python - 找到排除特定边的最短路径?