Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL如何存储数据_Mysql_Database_Database Design - Fatal编程技术网

MySQL如何存储数据

MySQL如何存储数据,mysql,database,database-design,Mysql,Database,Database Design,我在谷歌搜索了一下,但没有找到任何好的答案。它是否将数据存储在一个大文件中?它使用什么方法使数据访问比读取和写入常规文件更快?从技术上讲,所有内容都是一个“文件”,包括文件夹。。你的整个硬盘是一个巨大的文件。话虽如此,是的,关系数据库MySQL将数据存储在硬盘上的数据文件中。数据库和写入/读取文件的区别在于苹果和橙子。数据库提供了一种结构化的方式来存储和搜索/检索数据,这种方式永远不会通过读取和写入文件来复制。。当然,除非你自己写数据库 希望有帮助 它是否将数据存储在一个大文件中 有些DBMS将

我在谷歌搜索了一下,但没有找到任何好的答案。它是否将数据存储在一个大文件中?它使用什么方法使数据访问比读取和写入常规文件更快?

从技术上讲,所有内容都是一个“文件”,包括文件夹。。你的整个硬盘是一个巨大的文件。话虽如此,是的,关系数据库MySQL将数据存储在硬盘上的数据文件中。数据库和写入/读取文件的区别在于苹果和橙子。数据库提供了一种结构化的方式来存储和搜索/检索数据,这种方式永远不会通过读取和写入文件来复制。。当然,除非你自己写数据库

希望有帮助

它是否将数据存储在一个大文件中

有些DBMS将整个数据库存储在单个文件中,有些将表、索引和其他对象类型拆分为单独的文件,有些不是按对象类型而是按某些存储/大小标准拆分文件,有些甚至可以,等等

我不知道MySQL使用哪种策略(这可能取决于您是否使用MyISAM和InnoDB等),但幸运的是,这并不重要:从客户机的角度来看,这是一个DBMS实现细节,客户机应该很少担心

它使用什么方法使数据访问速度更快?它们只是读取和写入常规文件

首先,DBMS不仅仅关乎性能:

  • 他们甚至更关心数据的安全性,他们必须确保即使在停电或网络故障的情况下也不会出现数据损坏。1
  • DBMS还涉及并发性,它们必须在多个访问和可能修改相同数据的客户端之间进行仲裁。2
至于性能方面的具体问题,关系数据非常容易受到索引和集群的影响,DBMS充分利用这些特性来实现性能。最重要的是,SQL基于集合的特性允许DBMS选择最佳的方法来检索数据(至少在理论上,有些DBMS在这方面比其他DBMS更好)。有关DBMS性能的更多信息,我强烈建议:

另外,您可能注意到大多数DBMS都是相当旧的产品。就像几十年前一样,从我们行业的角度来说,这真的是千古之年。这样做的一个结果是,人们有足够的时间优化DBMS代码库

从理论上讲,您可以通过文件实现所有这些功能,但我怀疑您最终会得到一些看起来非常接近DBMS的功能(即使您有时间和资源来实际实现)。那么,为什么要重新发明轮子(除非你一开始就不想要轮子;)


1通常通过某种“日志”或“事务日志”机制。此外,为了最小化“逻辑”损坏(由于应用程序错误)的可能性并促进代码重用,大多数DBMS支持声明性约束(域、键和引用)、触发器和存储过程


2通过甚至允许客户端显式锁定数据库的特定部分。

在平面文件中存储数据时,按顺序读取数据既紧凑又高效,但没有快速的随机访问方法。对于可变长度数据(如文档、名称或字符串)尤其如此。为了允许快速随机访问,大多数数据库使用称为B树的数据结构将信息存储在单个文件中。这种结构允许快速插入、删除和搜索,但它可以比原始文件多占用50%的空间。但是,这通常不是问题,因为磁盘空间既便宜又大,而主要任务通常需要快速访问。 有关更多信息:

仔细查看MySQL文档,我们发现索引可以选择设置为“BTREE”或“HASH”类型。在一个MySQL文件中,存储了多个索引,这些索引可以使用任意一种数据结构


尽管安全性和并发性很重要,但这并不是数据库存在的原因,而是增加了一些特性。最早的数据库之所以存在,是因为不可能随机访问包含可变长度数据的顺序文件。

这个问题有点老了,但我还是决定回答它,因为我一直在做一些相同的挖掘工作。我的答案基于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
表格文件存储表格的格式。详情:

.ibd
文件存储表的数据。详情:


就是这样,伙计们!我希望我帮助了一些人。

您可能希望了解它使用的不同数据库引擎。有些将数据存储在“大文件”中,而另一些则存储在内存中。为了提高访问速度,它使用固定大小的列和行,因此访问特定记录比扫描所有文本更容易。它还可以保留数据索引,使检索更快。默认和最常用的引擎是my isam。其他包括InnoDB和内存。@Greg,但即使是内存表也是如此存储的