SSD 会降低数据库的实用性吗

Abd*_*dul 30 performance index database-design hardware ssd

我今天才听说罗伯特·马丁,他似乎是软件界的一个显赫人物,所以我的头衔并不是说看起来像是一个点击诱饵或我在他嘴里说的话,但这只是我是如何以我有限的经验和理解来解释我从他那里听到的。

我在看一个视频今天(关于软件架构),Robert C. Martin 的演讲,在视频的后半部分,数据库的主题是主要焦点。

根据我对他所说的话的理解,他似乎是在说 SSD 会降低数据库的实用性(相当大)。

解释我是如何得出这种解释的:

他讨论了如何使用 HDD/旋转磁盘,检索数据很慢。然而,他指出,现在我们使用固态硬盘。他从“RAM 即将到来”开始,然后继续提到 RAM 磁盘,但随后说他不能称之为 RAM 磁盘,因此只说 RAM。所以对于 RAM,我们不需要索引,因为每个字节都需要相同的时间来获取。(这一段是我转述的

因此,他建议 RAM(如在计算机内存中)作为 DB 的替代品(正如我将他的声明解释为那样)是没有意义的,因为这就像说所有记录在应用程序的生命周期内都在内存中处理(除非您根据需要从磁盘文件中提取)

所以,我用 RAM 来思考,他的意思是 SSD。因此,在这种情况下,他是说 SSD 会降低数据库的实用性。他甚至说:“如果我是甲骨文,我会害怕。我存在的根本原因正在消失。”

根据我对 SSD 的一点了解,与 HDD 不同,HDD 是O(n)寻道时间(我认为),SSD 接近O(1)或几乎是随机的。所以,他的建议对我来说很有趣,因为我从来没有这样想过。几年前我第一次接触数据库时,当一位教授描述与常规文件系统相比的好处时,我得出的结论是数据库的主要作用本质上是一个非常索引的文件系统(以及优化、缓存、并发访问、等),因此,如果 SSD 中不需要索引,这种类型确实会使数据库变得不那么有用。

尽管如此,以我是新手的开头,我发现很难相信它们变得不那么有用了,因为每个人仍然使用 DB 作为其应用程序的主要点,而不是纯粹的文件系统,并且感觉好像他过于简单化了数据库的作用。

注意:我确实一直看到最后,以确保他没有说不同的话。

供参考:42 : 22是整个数据库主题出现的时候, 43:52是他开始说“为什么我们甚至有数据库”的时候

这个答案确实说 SSD 大大加快了数据库的速度。 这个问题询问优化是如何改变的。

对于TL;DR我的问题,SSD 在服务器市场(无论是即将到来还是已经发生)的广泛使用是否会降低数据库的实用性?

似乎演示者试图传达的是,使用 SSD,人们可以将数据存储在磁盘上,而不必担心检索数据会像使用较旧的 HDD 一样慢,与使用 SSD 一样,寻道时间接近O(1)(我认为)。因此,如果这是真的,那么假设它会失去它所拥有的优势之一:索引,因为拥有索引以加快查找时间的优势已经不复存在。

Eva*_*oll 62

当您使用 SSD 时,应该调整数据库中的某些内容。例如,对于 PostgreSQL,您可以调整effective_io_concurrency, 和random_page_cost. 然而,更快的读取和更快的随机访问不是数据库的作用。它确保

他只是在索引上错了。如果可以将整个表读入 ram,则索引仍然有用。不相信我?让我们做一个思想实验,

  • 想象一下,您有一个带有一个索引列的表。

    CREATE TABLE foobar ( id text PRIMARY KEY );
    
    Run Code Online (Sandbox Code Playgroud)
  • 想象一下,该表中有 5 亿行。

  • 想象一下,所有 5 亿行都连接到一个文件中。

什么更快,

  1. grep 'keyword' file
  2. SELECT * FROM foobar WHERE id = 'keyword'

这不仅关乎数据的位置,还关乎您如何对其进行排序以及您可以执行哪些操作。PostgreSQL 支持 B-tree、Hash、GiST、SP-GiST、GIN 和 BRIN 索引(以及 Bloom 通过扩展)。如果您认为所有这些数学和功能都消失了,因为您有更快的随机访问,那就太愚蠢了。

  • 只是一个附录 - OP 应该小心不要将“随机访问”与“内容可寻址访问”混为一谈。正如 OP 所指出的,“随机访问”意味着访问内存的每个字节是 O(1)。然而,在那个“随机存取存储器”中查找数据仍然需要顺序搜索;也就是说,你不能要求内存“给我找到看起来像*这个*的数据”,然后神奇地把它交给你。 (32认同)
  • @BobJarvis 你是对的。您的评论有助于澄清更多 @EvanCarroll 的“什么是更快”示例,说明为什么索引甚至子索引很重要,并且仅仅抓取“O(1)”对于数据库提供的用例是不够的 (2认同)

小智 12

根据您的帖子,似乎明确的消息是 RDBMS 查找时间优化正在被硬件取代,这使得 IO 时间可以忽略不计。

这是绝对正确的。数据库服务器上的 SSD 与高(实际)RAM 相结合,使 IO 等待时间显着缩短。然而,RDBMS 索引和缓存仍然很有价值,因为即使是具有这种巨大 IO 优势的系统也可能并且将会因索引不良导致查询性能不佳而出现 IO 瓶颈。这通常仅在高工作负载应用程序或编写不佳的应用程序中发现。

一般来说,RDBMS 系统的关键价值是数据一致性、数据可用性和数据聚合。使用 excel 电子表格、csv 文件或其他保存“数据库”的方法并不能保证。

SSD 无法保护您的主服务器因任何原因(网络、操作系统损坏、断电)而变得不可用。SSD 不能保护您免受不良数据修改。与“仅拥有”它们相比,SSD 并不能加快运行分析的速度。

  • @Abdul 这种比较是苹果到悬索桥。原始设备可为您提供大量存储空间;数据库为您提供了一种根据数据模型组织和访问该存储的方法。Josh 在这里的观点是,如果你带着满天星斗的想法进入这个领域,原始 SSD 是一件很棒的事情,因为它“很快”,并且你只是要编写代码来在原始卷上完成所有数据存储,您最终将编写一个数据库。 (4认同)

小智 9

Bob 大叔可能在谈论内存数据库,例如RedisGemfire。在这些数据库中,数据库中的所有内容实际上都包含在 RAM 中。数据库可以一开始是空的,并存有短期数据(用作缓存),或者它首先从磁盘加载所有内容并定期检查点更改到磁盘。

这变得越来越流行,因为 RAM 越来越便宜,并且在内存集群数据库中存储 TB 的数据变得可行。在很多用例中,即时访问事物的速度使得放入 RAM 而不是像 SSD 这样的快速磁盘更有价值。如果有意义,您甚至可以继续对其中的一些使用 SQL。

为什么要担心甲骨文?数据在增长,RDBMS 不太可能消失。然而,多年来,Oracle 的大量工程时间已经投入到使旋转磁盘上的数据检索速度非常快的方法上。Oracle 将需要适应完全不同的存储层。他们是,使用Oracle Database In Memory,但他们面临着与过去不同的竞争。想想有多少时间用于确保查询优化器根据磁盘上的事物布局选择正确的策略......


Pau*_*ite 8

社区 Wiki 帖子收集了最初作为问题评论留下的答案


我会说恰恰相反。由于读/写速度如此之快,现在您可以使用 GPU 加速数据库(例如BlazingDBAlenka)来更快地处理数字。现在,您可以更快地运行更复杂的查询。现在,人们甚至不会考虑运行的查询可以以合理的速度运行。越复杂,数据越多越好 - 赛博纳德

虽然 Bob Martin 已经存在了很长时间并且他的意见通常值得一听(如果不同意:-),在这种情况下,我认为他正在潜入“关系数据库之死在我们身上”人群(其中我是准会员:-)。对于在有限情况下某些事情,可以提出一些令人信服的论点,即非关系数据库技术可以提供优势。话虽如此,但 IMO 关系模型虽然在各种方面存在缺陷,但仍然提供了当今可用的最佳通用数据库模型。天啊。-鲍勃·贾维斯

我们使用数据库的主要原因不是因为磁盘速度慢(实际上,最初,这被认为是使用数据库的原因),而是因为数据很复杂。数据库的主要目的是使多个应用程序/用户能够找到正确的数据,甚至能够以受控方式同时更改它。快速做到这一点只是数据库的次要目标。- RBarryYoung

RDBMS 不会很快消失;它们是某些类型应用程序的最佳选择,而 NoSQL(Mongo 等)是其他应用程序的最佳选择。课程用马。- sh1rts

数据库有助于组织数据。无论如何,它最初并不是为快速访问数据而设计的。-吉香