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

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

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

要解释我是如何理解这种情况的:

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

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

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

由于我对SSD的了解很少,与HDD不同,QD 12079q寻求时间(我想),SSD接近O(n),或者几乎是随机的。因此,他的建议对我来说很有趣,因为我从来没有这样想过。 />我得出结论,数据库的主要作用本质上是一个索引非常大的文件系统(以及优化,缓存,并发访问等),因此,如果SSD中不需要索引,则这种类型的确会使数据库的使用率降低。 br />
不管怎么说,以我是新手开头,我很难相信它们的用处不大,因为每个人仍然将DB用作其应用程序的主要目的,而不是纯文件系统,

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

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

这个答案的确是SSD加快DB的速度。
这个问题询问优化如何改变。

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

它似乎演示者想要传达的是,使用SSD,人们可以将数据存储在磁盘上,而不必担心像旧版HDD以及SSD那样检索数据会很慢,寻道时间接近O(1)。 (我认为)。因此,如果这是事实,那么假设会失去它的优势之一:建立索引,因为不再需要具有更快查找时间的索引。

#1 楼

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


ACID(原子性,一致性,隔离性,持久性)
某种形式的并发控制,MVCC(多版本并发控制)

标准化访问对于库(XQuery或SQL)

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



假设您有一个带有一个索引列的表。

CREATE TABLE foobar ( id text PRIMARY KEY );


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

什么更快,


grep 'keyword' file
SELECT * FROM foobar WHERE id = 'keyword'

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

评论


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

–鲍勃·贾维斯(Bob Jarvis)-恢复莫妮卡
16年12月22日在20:04

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

–阿卜杜勒
16年12月22日在20:09

#2 楼

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

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

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

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

评论


尽管我获得了更好的见解,但我是在原始SSD数据存储与在带HDD的DB上的数据存储的上下文中进行询问的,而您的答案是在SSD上的DB的上下文中(由于我的问题措辞很差)

–阿卜杜勒
16年12月22日在20:12

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

– Blfl
16/12/23在11:32

#3 楼

鲍勃叔叔可能在谈论内存数据库,例如Redis或Gemfire。在这些数据库中,数据库中的所有内容实际上都包含在RAM中。该数据库可能开始是空的,并以短期数据(用作高速缓存)进行归档,或者它是通过从磁盘加载所有内容并定期将检查点更改加载到磁盘开始的。
由于RAM价格越来越便宜,因此在内存中的群集数据库中存储1 TB的数据变得可行,因此它变得更加流行。在许多用例中,即时访问事物的速度使得放入RAM甚至比像SSD这样的快速磁盘都更有价值。如果有意义,您甚至可以继续使用SQL。

为什么要担心Oracle?数据正在增长,RDBMS不太可能消失。但是,多年来,Oracle的许多工程时间已经投入到使旋转磁盘上的数据检索真正快速的方法上。 Oracle将需要适应完全不同的存储层。它们具有Oracle内存数据库功能,但是与过去相比面临着不同的竞争。想想花了多少时间来确保查询优化器根据磁盘上事物的布局选择正确的策略...。

评论


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

–阿卜杜勒
16 Dec 23 '20:04

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

–mmmmmm
16 Dec 24'在10:20



#4 楼

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


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

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

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

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

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