Tal*_*boy 25 mysql database database-design
我环顾了古尔,但没有找到任何好的答案.它是否将数据存储在一个大文件中?使用哪些方法来使数据访问更快,而不仅仅是读取和写入常规文件?
jaf*_*690 26
这个问题有点陈旧但我决定回答它,因为我一直在做一些挖掘.我的答案是基于linux文件系统.基本上mySQL将数据存储在硬盘中的文件中.它将文件存储在具有系统变量"datadir"的特定目录中.打开mysql
控制台并运行以下命令将告诉您文件夹的确切位置.
mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
从上面的命令可以看出,我的"datadir"位于/var/lib/mysql/
."datadir"的位置可能因系统而异.该目录包含文件夹和一些配置文件.每个文件夹代表一个mysql数据库,包含具有该特定数据库数据的文件.下面是我系统中"datadir"目录的屏幕截图.
目录中的每个文件夹代表一个MySQL数据库.每个数据库文件夹都包含表示该数据库中的表的文件.每个表有两个文件,一个带.frm
扩展名,另一个带.idb
扩展名.见下面的截图.
该.frm
表文件存储表的格式.详细信息:MySQL .frm文件格式
该.ibd
文件存储表的数据.详细信息:InnoDB File-Per-Table表空间
伙计就是这样!我希望我能帮助别人.
Bra*_*vic 18
它是否将数据存储在一个大文件中?
一些DBMS将整个数据库存储在单个文件中,一些拆分表,索引和其他对象类型分离文件,一些拆分文件不是按对象类型而是按一些存储/大小标准,有些甚至可以完全绕过文件系统等等...
我不知道MySQL使用了哪些策略(可能取决于你是否使用MyISAM与InnoDB等),但幸运的是,无所谓:从客户端的角度来看,这是客户端的DBMS实现细节应该很少担心.
它使用什么方法使数据访问更快,只是读取和写入常规文件?
首先,DBMses不只是关于性能:
至于您的具体性能问题,关系数据非常容易受到索引和聚类的影响,DBMS可以充分利用它来实现性能.最重要的是,SQL的基于集合的特性使DBMS能够选择检索数据的最佳方式(理论上至少,某些DBMS比其他DBMS更好).有关DBMS性能的更多信息,我热烈推荐:使用The Index,Luke!
此外,您可能已经注意到大多数DBMS都是旧产品.就像几十年前一样,这在我们行业的条件下确实很有用.这样做的一个结果是人们有足够的时间来优化DBMS代码库.
从理论上讲,你可以通过文件实现所有这些功能,但我怀疑你最终会看到一些看起来非常接近DBMS的东西(即使你有时间和资源来实际完成它).那么,为什么重新发明轮子(除非你不想把轮子放在第一位;))?
1通常通过某种"日记"或"事务日志"机制.此外,为了最大限度地降低"逻辑"损坏(由于应用程序错误)和促进代码重用的可能性,大多数DBMS支持声明性约束(域,密钥和引用),触发器和存储过程.
2通过隔离事务,甚至允许客户端显式锁定数据库的特定部分.
从技术上讲,一切都是一个“文件”,包括文件夹。您的整个硬盘驱动器都是巨大的文件。话虽如此,对于关系数据库,MySQL 将数据存储在硬盘上的数据文件中。数据库和写入/读取文件之间的区别就像苹果和橘子一样。数据库提供了一种结构化的方式来存储和搜索/检索数据,这种方式是您永远无法通过读取和写入文件来复制的。当然,除非您编写自己的数据库。
希望有帮助。