SSD是否会降低数据库的实用性


28

我今天只听说过罗伯特·马丁(Robert Martin),看来他是软件界的佼佼者,所以我的意思不是要让我的头衔看起来像是点击诱饵,或者是我在他口中吐槽,但这仅仅是我以有限的经验和理解来解释我从他那里听到的信息。

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

根据我对他所说内容的理解,似乎他在说固态硬盘会降低数据库的实用性(相当可观)。

要解释我是如何进行这种解释的:

他讨论了使用HDD /旋转磁盘如何缓慢地检索数据。但是,这些天我们使用SSD。他以“ RAM即将到来”开始,然后继续提及RAM磁盘,但随后说他不能称其为RAM磁盘,因此只能说RAM。因此对于RAM,我们不需要索引,因为每个字节花费相同的时间来获取。(本段由我解释

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

因此,我求助于RAM,他的意思是SSD。因此,在那种情况下,他说固态硬盘会降低数据库的实用性。他甚至说:“如果我是Oracle,我会感到害怕。我之所以存在的根本基础正在消失。”

从我对SSD的了解很少,不像HDD那样需要O(n)寻道时间(我认为),SSD接近O(1)或几乎是随机的。因此,他的建议对我来说很有趣,因为我从未想过。几年前,当我第一次被介绍给数据库时,一位教授描述了常规文件系统所没有的好处,我得出结论,数据库的主要作用本质上是一个索引很高的文件系统(以及优化,缓存,并发访问,等等),因此,如果SSD中不需要索引,这种方法会使数据库的使用率降低。

不管怎么说,以我是新手开头,我很难相信它们变得没有用,因为每个人仍然使用DBs作为其应用程序的主要观点,而不是纯文件系统,并且觉得他过于简化了。数据库的作用。

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

供参考:42 : 22是整个数据库主题出现的时间, 43:52是他以“为什么还要拥有数据库”开始的时间

这个答案确实表明SSD大大提高了DB的速度。 问题询问如何更改优化。

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

似乎演示者试图传达的是,使用SSD,人们可以将数据存储在磁盘上,而不必担心像旧版HDD以及SSD一样检索数据的速度会很慢。O(1)(我认为)。因此,如果这是真的,那么假设会失去它的优势之一:建立索引,因为拥有索引以缩短查找时间的优势已荡然无存。

Answers:


59

使用SSD时,调整数据库中的某些内容。例如,对于PostgreSQL来说,您可以调整effective_io_concurrencyrandom_page_cost。但是,更快的读取和更快的随机访问不是数据库所能做的。它确保

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

  • 假设您有一个包含一个索引列的表。

    CREATE TABLE foobar ( id text PRIMARY KEY );
  • 假设该表中有5亿行。

  • 想象一下,所有5亿行都被串联到一个文件中。

什么更快

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

这不仅与数据的位置有关,还与如何订购数据以及可以执行哪些操作有关。PostgreSQL支持B树,哈希,GiST,SP-GiST,GIN和BRIN索引(以及通过扩展的Bloom)。您会以为所有这些数学和功能都消失了是很愚蠢的,因为您拥有更快的随机访问权限。


31
只是一个附录-OP应该注意不要将“随机访问”与“内容可寻址的访问”混为一谈。正如OP所指出的,“随机访问”意味着到达内存的每个字节都是O(1)。但是,在“随机存取存储器”中查找数据仍然需要顺序搜索。也就是说,您不能要求内存“为我找到看起来像这样的数据”并神奇地将其交给您。
鲍勃·贾维斯

2
@BobJarvis你是正确的。您的评论有助于澄清@EvanCarroll的“更快的例子”,它说明了为什么索引甚至子索引很重要,仅仅抓住O(1)不足以解决数据库所提供的用例
Abdul

12

根据您的帖子,很明显的信息是,RDBMS查找时间优化已被硬件替代,从而使IO时间可以忽略不计。

这是绝对正确的。数据库服务器上的SSD与高(实际)RAM相结合,使IO等待时间大大缩短。但是,RDBMS索引和缓存仍然很有价值,因为即使具有如此大的IO优势的系统也可能会由于错误的索引而导致执行不佳的查询而出现IO瓶颈。通常仅在高工作负载的应用程序或编写不当的应用程序下才可以找到它。

通常,RDBMS系统的关键价值是数据一致性,数据可用性和数据聚合。使用excel电子表格,csv文件或其他保留“数据库”的方法无法保证。

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


尽管我获得了更好的见解,但我是在原始SSD数据存储还是在具有HDD的DB上的数据存储的背景下询问的,而您的答案是在SSD上的DB的背景下(由于我的问题措辞很差)
阿卜杜勒

4
@Abdul那个比较是苹果到悬浮的桥梁。原始设备可为您节省大量存储空间;数据库为您提供了一种根据数据模型组织和访问该存储的方法。Josh的观点是,如果您满天星斗的想法认为原始SSD是一件好事,因为它“快速”,并且您将要编写代码以在该原始卷上进行所有数据存储,您最终将最终编写数据库。
Blrfl

8

鲍勃叔叔可能在谈论诸如RedisGemfire之类的内存数据库。在这些数据库中,数据库中的所有内容实际上都包含在RAM中。数据库可以开始为空,并以短期数据(用作缓存)归档,也可以通过从磁盘加载所有内容并定期将检查点更改加载到磁盘开始。

由于RAM的价格越来越便宜,并且在内存中的群集数据库中存储TB级数据变得可行,这变得越来越流行。在许多用例中,即时访问事物的速度使得放入RAM甚至比像SSD这样的快速磁盘都更有价值。如果合理,您甚至可以继续对其中一些使用SQL。

为什么要为此担心Oracle?数据正在增长,RDBMS不太可能消失。但是,多年来,Oracle花费了大量的工程时间来使旋转磁盘上的数据检索真正快速。Oracle将需要适应完全不同的存储层。它们具有Oracle Database In Memory,但是与过去相比面临着不同的竞争。考虑要花多少时间来确保查询优化器根据磁盘上事物的布局选择正确的策略。


啊。我从不知道内存数据库之类的东西
Abdul

1
作为另一个示例,SQLite可以在内存中运行,因此无需使用其他数据库
user151019 '16

8

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


我会说相反。由于读/写速度非常快,因此您现在可以获得GPU加速的数据库(例如BlazingDBAlenka)来更快地处理数字。现在,您可以使更复杂的查询运行得更快。现在,人们甚至不会考虑运行的查询可以以合理的速度运行。越复杂,数据越多,您的生活就 越好-Cyber​​nard

尽管鲍勃·马丁(Bob Martin)已经存在很长时间了,但他的观点通常值得一听(如果不同意:-),在这种情况下,我认为他正在涉足“关系数据库之死”。我是准会员:-)。对于某些情况,在有限的情况下,可以说出一些令人信服的论点,即非关系数据库技术可以提供优势。话虽这么说,但是IMO的关系模型虽然可能存在多种多样的缺陷,但它仍然提供了当今最好的通用数据库模型。YMMV。- 鲍勃·贾维斯Bob Jarvis)

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.