我环顾谷歌,但没有找到任何好的答案。它是否将数据存储在一个大文件中?它使用什么方法使数据访问比读取和写入常规文件更快?
4 回答
这个问题有点老了,但我还是决定回答它,因为我一直在做一些研究。我的回答是基于linux文件系统的。基本上,mySQL 将数据存储在硬盘中的文件中。它将文件存储在具有系统变量“datadir”的特定目录中。打开mysql
控制台并运行以下命令将告诉您该文件夹的确切位置。
mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)
从上面的命令可以看出,我的“datadir”位于/var/lib/mysql/
. “datadir”的位置在不同的系统中可能会有所不同。该目录包含文件夹和一些配置文件。每个文件夹代表一个 mysql 数据库,并包含包含该特定数据库数据的文件。下面是我系统中“datadir”目录的截图。
目录中的每个文件夹代表一个 MySQL 数据库。每个数据库文件夹都包含代表该数据库中表的文件。每个表有两个文件,一个带有.frm
扩展名,另一个带有.idb
扩展名。请参阅下面的屏幕截图。
.frm
表格文件存储表格的格式。详细信息:MySQL .frm 文件格式
该.ibd
文件存储表的数据。详细信息:InnoDB File-Per-Table 表空间
就是这样的人!我希望我帮助了某人。
它是否将数据存储在一个大文件中?
一些 DBMS 将整个数据库存储在一个文件中,一些拆分表、索引和其他对象类型以分隔文件,一些拆分文件不是按对象类型而是按一些存储/大小标准,有些甚至可以完全绕过文件系统等...
我不知道 MySQL 使用哪种策略(这可能取决于您使用的是 MyISAM 还是 InnoDB 等),但幸运的是,这并不重要:从客户端的角度来看,这是客户端的 DBMS 实现细节应该很少担心。
它使用什么方法来使数据访问更快,只需读取和写入常规文件?
首先,DBMses 不仅仅与性能有关:
- 他们更关注数据的安全性——他们必须确保即使在断电或网络故障的情况下也不会出现数据损坏。1
- DBMS 也与并发有关——它们必须在访问和可能修改相同数据的多个客户端之间进行仲裁。2
至于您的具体性能问题,关系数据对索引和集群非常“敏感”,DBMS 充分利用它来实现性能。最重要的是,SQL 的基于集合的特性让 DBMS 可以选择检索数据的最佳方式(至少在理论上,一些 DBMS 在这方面比其他的更好)。有关 DBMS 性能的更多信息,我热烈推荐:使用索引,卢克!
此外,您可能注意到大多数 DBMS 都是相当老的产品。就像几十年前一样,从我们行业的角度来看,这确实是亿万年。这样做的结果之一是人们有足够的时间来优化 DBMS 代码库。
理论上,您可以通过文件来实现所有这些事情,但我怀疑您最终会得到一些看起来非常接近 DBMS 的东西(即使您有时间和资源来实际做到这一点)。那么,为什么要重新发明轮子(除非你一开始就不想要轮子;))?
1通常通过某种“日志”或“事务日志”机制。此外,为了最大限度地减少“逻辑”损坏(由于应用程序错误)的可能性并促进代码重用,大多数 DBMS 支持声明性约束(域、键和引用)、触发器和存储过程。
2通过隔离事务,甚至允许客户端显式锁定数据库的特定部分。
从技术上讲,一切都是一个“文件”,包括文件夹......你的整个硬盘驱动器都是巨大的文件。话虽如此,是的关系数据库,MySQL 将存储数据包含在硬盘上的数据文件中。数据库和写入/读取文件之间的区别是苹果和橘子。数据库提供了一种结构化的方式来存储和搜索/检索数据,这种方式你永远无法通过读取和写入文件来复制。当然,除非你编写了自己的数据库。
希望有帮助。
当您将数据存储在平面文件中时,顺序读取是紧凑而高效的,但没有快速的方法来随机访问它。对于可变长度数据(例如文档、名称或字符串)尤其如此。为了允许快速随机访问,大多数数据库使用称为 B-Tree 的数据结构将信息存储在单个文件中。这种结构允许快速插入、删除和搜索,但它可以使用比原始文件多 50% 的空间。但是,通常这不是问题,因为磁盘空间既便宜又大,而主要任务通常需要快速访问。更多信息: http ://en.wikipedia.org/wiki/B-tree
仔细查看 MySQL 文档,我们发现索引可以选择设置为“BTREE”或“HASH”类型。在单个 MySQL 文件中,存储了多个索引,它们可以使用任一数据结构。
尽管安全性和并发性很重要,但这些并不是数据库存在的原因,而是附加的特性。最早的数据库之所以存在,是因为不可能随机访问包含可变长度数据的顺序文件。