mysql 怎么存储数据_关于数据库:MySQL如何存储数据

我环顾了古尔,但没有找到任何好的答案。 它是否将数据存储在一个大文件中? 使用哪些方法来使数据访问更快,而不仅仅是读取和写入常规文件?

您可能希望查看它使用的不同数据库引擎。 有些人将数据存储在"大文件"中,而其他人则存储在内存中。 对于访问速度,它使用固定大小的列和行,因此访问特定记录比扫描所有文本更容易。 它还可以保留数据索引,以便更快地进行检索。 默认和最常用的引擎是我的isam。 其他包括inno-db和MEMORY。

@Greg但是甚至将Memory表存储在某处以确保持久性。 底线是它存储在磁盘上的某个地方。

内存表中的@Namphibian数据不是持久的,只有结构是

@Cez所以数据结构不是持久的吗? 某处某处数据或元数据都位于磁盘上。 您可以将临时表的数据存储在文件中,然后在启动期间加载包含数据的mem表。

这个问题有点陈旧但我决定回答它,因为我一直在做一些挖掘。我的答案是基于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"目录的屏幕截图。

c3fa64fba832117c6e8964eb2defe205.png

目录中的每个文件夹代表一个MySQL数据库。每个数据库文件夹都包含表示该数据库中的表的文件。每个表有两个文件,一个带有.frm扩展名,另一个带有.idb扩展名。见下面的截图。

76b8759ea7173aa409b7aad17084e003.png

.frm表文件存储表的格式。详细信息:MySQL .frm文件格式

.ibd文件存储表的数据。详细信息:InnoDB File-Per-Table表空间

伙计就是这样!我希望我能帮助别人。

如果只有一种方法来源控制这些文件

@ user4757074您可以使用git init将任何目录转换为本地Git存储库...但是您为什么要源控制这些文件?

@ RoryO'Kane来源控制您的数据库

Does it store the data in one big file?

一些DBMS将整个数据库存储在一个文件中,一些拆分表,索引和其他对象类型分离文件,一些拆分文件不是按对象类型而是按一些存储/大小标准,有些甚至可以完全绕过文件系统等等...

我不知道MySQL使用了哪些策略(可能取决于你是否使用MyISAM与InnoDB等),但幸运的是,无所谓:从客户端的角度来看,这是客户端的DBMS实现细节应该很少担心。

What methods does it use to make data access quicker them just reading and writing to a regular file?

首先,DBMses不只是关于性能:

它们更关注数据的安全性 - 它们必须确保即使在断电或网络故障时也不会出现数据损坏。

DBMS也是关于并发性的 - 它们必须在多个客户端之间进行仲裁,访问并可能修改相同的数据

至于您的具体性能问题,关系数据非常容易受到索引和聚类的影响,DBMS可以充分利用它来实现性能。最重要的是,SQL的基于集合的特性使DBMS能够选择检索数据的最佳方式(理论上至少,某些DBMS比其他DBMS更好)。有关DBMS性能的更多信息,我热烈推荐:使用The Index,Luke!

此外,您可能已经注意到大多数DBMS都是旧产品。就像几十年前一样,这在我们行业的条件下确实很有用。这样做的一个结果是人们有足够的时间来优化DBMS代码库。

从理论上讲,你可以通过文件实现所有这些功能,但我怀疑你最终会看到一些看起来非常接近DBMS的东西(即使你有时间和资源来实际完成它)。那么,为什么重新发明轮子(除非你不想把轮子放在第一位;))?

1通常通过某种"日记"或"事务日志"机制。此外,为了最大限度地降低"逻辑"损坏(由于应用程序错误)和促进代码重用的可能性,大多数DBMS支持声明性约束(域,密钥和引用),触发器和存储过程。

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

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

欲获得更多信息:

http://en.wikipedia.org/wiki/B-tree

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

虽然安全性和并发性很重要,但这些并不是为什么存在数据库,而是增加了功能。存在第一个数据库是因为无法随机访问包含可变长度数据的顺序文件。

实际上,存在第一个数据库是为了促进通常由不同编程团队编写和支持的应用程序之间的数据共享。

从技术上讲,一切都是"文件",包括文件夹......你的整个硬盘都是巨大的文件。话虽如此,是关系数据库,MySQL包含存储数据在硬盘驱动器上的数据文件中。数据库与写入/读取文件之间的区别是苹果和橙子。数据库提供了一种结构化的方式来存储和搜索/检索数据,只有通过读取和写入文件才能复制数据。除非您编写自己的数据库当然..

希望有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值