我的问题可能非常无知。请多多包涵。我只是一名大学毕业生,想要了解数据库如何像故事一样运行。
我想知道数据库在哪里存储数据?
数据以哪种格式存储在硬盘中? (我的意思是,像Mongo一样存储像BSON这样的数据(JSON的二进制格式,包含很多类型信息和关于巨大字符串中值的元数据)。同样,关系数据库存储数据是否有任何特定格式在硬盘上?)
假设我在MySQL中完成了插入查询,处理器将如何完成此任务?
我期待像你这样的回答
1.阅读说明(您知道要插入哪些信息以及插入的位置)
2.需要插入的数据写在Cache中
3.通过指定需要插入的内存地址,将需要插入的Cache中的内存写入(使用内存总线和写入头发送)到SSD。
数据插入是否符合聚集索引?
每次插入后群集索引是否会更新?
使用SELECT查询时,表中的所有数据是否都会被带到ram然后运行WHERE,GROUP BY,HAVING等命令?
与关系数据库不同,像Neo4J这样的图形数据库如何运行查询? (我的意思是,要运行单个查询,它会将整个节点图表带到RAM中吗?)
答案 0 :(得分:0)
您的SSD或HDD是块存储设备。数据以blocks(字节序列)读取和写入,其中包含关系的记录。块具有最大长度,块大小,通常为8k。
数据库表和索引可以以多种形式之一存储在磁盘上。最常用的形式是B +树和ISAM。
数据库管理系统(DBMS)是允许您与数据库交互的软件。
其最重要的功能是:
在实际评估之前对查询进行预处理,您猜对了,查询处理器负责这一点。您的查询由 DML编译器编译(例如INSERT,UPDATE,DELETE,SELECT)或由 DDL Interpreter 解释(例如CREATE,ALTER,DROP)。
对于要评估的查询,必须将其转换为低级执行计划(可在文件系统的物理级别使用的表达式)。对于关系数据库:物理relational algebra。
扫描程序标记查询,解析器检查语法并验证关系,属性,数据类型等。
实际评估查询需要翻译到关系代数中。代数允许符号计算,这对于查询优化很重要。
查询优化程序将原始查询计划重写为更有效的评估计划。
查询优化确定关系代数运算符的特定顺序。可以使用几种不同算法之一来评估每个单一关系代数运算符。所选计划将被注释并移交给评估引擎。
优化启发式算法是魔法"魔法的一部分。在数据库核心内。这是一笔十亿美元的业务。
一些操作:
选择运算符评估原语(例如WHERE
,不要与SELECT
混淆!):
排序(例如ORDER BY
):
投影(例如SELECT
):
加入(例如equi-join):
对于每个运营商,使用评估基元注释合适的评估计划,可以执行。
这只是当然的简要概述。有关更多信息,我建议您阅读Ramez Elmasri撰写的数据库系统基础知识以及有关该主题的其他材料。
<强>参考强>:
Lofi,C 2018,查询处理,讲义,信息与数据建模,代尔夫特理工大学
Difference between hash join and merge join (Stack Overflow)