0

0

MySQL 文件系统_MySQL

php中文网

php中文网

发布时间:2016-06-01 14:12:21

|

1139人浏览过

|

来源于php中文网

原创


  实际上,这不是通常意义上的文件系统,它没有磁盘空间,而是使用MySQL 守护程序来存储数据。可以把SQL 表和一些函数通过文件系统来实现。
  
  一、怎样实现?
  让我们来看使用实例:
  
  [root@localhost /root]# mount -t corbafs -o `cat /tmp/mysqlcorbafs.ior` none
  /mnt/mysql/
  
  [root@localhost /root]# mount
  /dev/hda3 on / type ext2 (rw)
  none on /proc type proc (rw)
  none on /dev/pts type devpts (rw,gid=5,mode=620)
  /dev/hda1 on /mnt/win type vfat (rw,mode=777)
  /dev/hda4 on /mnt/linux type vfat (rw,noexec,nosuid,nodev,mode=777)
  none on /mnt/mysql type corbafs
  (rw,IOR:01e50d401b00000049444c3a436f72626146532f46696c6553797374656d3a312e
  300000010000000000000030000000010100000a0000003132372e302e302e310008041800
  0000000000009224bc335663462a01000000ef7ae13c0943c59f)
  
  [root@localhost /root]# ls -la /mnt/mysql/
  
  total 0
  
  -r-xr-xr-x 1 root root 4096 dets 29 22:21 .uptime
  dr-xr-xr-x 1 root root 4096 dets 29 22:21 test
  dr-xr-xr-x 1 root root 4096 dets 29 22:21 mysql
  
  [root@localhost /root]# cat /mnt/mysql/.uptime
  
  1994
  
  [root@localhost /root]# cat /mnt/mysql/mysql/user/Host
  
  cpq.spam.ee
  cpq.spam.ee
  localhost
  localhost
  localhost
  localhost
  localhost
  localhost
  
  [root@localhost /root]# cat /mnt/mysql/mysql/user/Insert_priv
  N
  N
  N
  N
  N
  N
  Y
  Y
  
  [root@localhost /root]# umount /mnt/mysql/
  
  二、为什么要这样做呢?
  在一些情形下,这样做能让工作更加轻松。MySQL 和文件系统都能叫做数据库,但是有着绝然不同的概念和优缺点。在文件系统里,对象能很快而且很容易找到,即使改变名字也能很快找到。每一个初学者大概都应该学会move/copy/rename/delete这样的操作。
  但是SQL 不一样,他通过应用程序来操纵存储在文件系统上的数据。而MySQL 文件系统把SQL 做到了用户级。用户能用他们知道的方式来操作数据库。
  
  -任何一个新产品需要通过网络存取数据的话,必须支持一些协议以及可能的其他办法通过网络存取文件系统。MySQL 表就可以通过这样的方式来存取,即使MySQL 没有移植到对应的平台。
  
  -备份和版本控制,普通的文件系统通过任何备份软件就可以实现。数据可以通过diff来比较并且用cvs 来控制版本。
  
  -更短的编程时间,有时候人们需要保存简单的数据,像当前日期或者站点名字,这些数据很少改变,普通的方法需要使用:
  
  连接服务器-> 选择数据库 -> 执行命令-> 存储结果
  
  而使用 MySQL 文件系统后,只需要一句话:(PHP实现)
  
  include(¨/mountpoint/database/table/field¨);
  
  或者,换一种方式表达:
  
  include(¨/mnt/mysql/sitedata/topic/todaytopic¨);
  
  这样就很容易理解,也占用了较少的空间。还可以通过SAMBA 来共享 /mnt/mysql,达到直接修改SQL 数据库的目的。能直接写文本到数据库,或者使用拷贝/粘贴功能把图片放入数据库,这要比用Perl 或者PHP 写几百行程序省力多了。
  
  三、性能如何?
  在发表这篇文章的时候,这个文件系统还处于原型开发阶段,因此,速度还不是很理想。
  如果到了正式发布的时候,一些数据库功能会比使用 SQL 要快。 当然,很多还是没法和SQL 相比,无论是性能上还是功能上,很多复杂的查询依然需要通过SQL 语句来完成。但是,这样节省了很多开发和培训的时间,所以在效率上来说也是一种节省。
  
  四、支持的表类型:
  目前这个文件系统支持所有的表类型:MyISAM,DBD,HEAP,ISAM。
  
  五、其他的特色:
  在第一步开发中实现的还只是只读,很快会有能读写的版本出来。目前的计划是把数据库对象映射成文件和目录对象。让我们来看看例子:
  
  --8  #建立表
  
  CREATE TABLE invoice (
  invoice_id int(10) unsigned NOT NULL auto_increment,
  invoice_no int(10) unsigned DEFAULT '0' NOT NULL,
  payee char(40) DEFAULT '' NOT NULL,
  PRIMARY KEY (invoice_id),
  KEY payee (payee)
  );
  
  # 插入数据
  
  INSERT INTO invoice VALUES (1,100,'Company AB');
  INSERT INTO invoice VALUES (2,101,'Company CD');
  INSERT INTO invoice VALUES (3,102,'Company EF');
  
  --8  
  因为 MySQL 没有办法使用记录号,所以我们必须建立主键。
  就有了以下的目录结构:
  
  /mountpoint/database/table/primary_key/field
  
  这样,每个列出现在不同的文件行之中,文件树的结构如下:
  
  /mnt/mysql/mydata/invoice/1/invoice_id
  /mnt/mysql/mydata/invoice/1/invoice_no
  /mnt/mysql/mydata/invoice/1/payee
  /mnt/mysql/mydata/invoice/2/invoice_id
  /mnt/mysql/mydata/invoice/2/invoice_no
  /mnt/mysql/mydata/invoice/2/payee
  /mnt/mysql/mydata/invoice/3/invoice_id
  /mnt/mysql/mydata/invoice/3/invoice_no
  /mnt/mysql/mydata/invoice/3/payee
  
  另外,还有第二个办法可以使用:
  
  /mountpoint/database/table/.table
  和
  /mountpoint/database/table/primary_key/.record
  /mnt/mysql/mydata/invoice/.table
  /mnt/mysql/mydata/invoice/1/.record
  /mnt/mysql/mydata/invoice/1/invoice_id
  /mnt/mysql/mydata/invoice/1/invoice_no
  /mnt/mysql/mydata/invoice/1/payee
  /mnt/mysql/mydata/invoice/2/.record
  /mnt/mysql/mydata/invoice/2/invoice_id
  /mnt/mysql/mydata/invoice/2/invoice_no
  /mnt/mysql/mydata/invoice/2/payee
  /mnt/mysql/mydata/invoice/3/.record
  /mnt/mysql/mydata/invoice/3/invoice_id
  /mnt/mysql/mydata/invoice/3/invoice_no
  /mnt/mysql/mydata/invoice/3/payee
  
  这些文件是隐含的,以防重复,主要用来方便地通过文本文件浏览器来查看。
  
  现在,在那些需要使用SQL 语句搜索最小,最大,最后等数据,可以通过符号连接来实现了:
  
  /mountpoint/database/table/primary_key/.max
  或者
  /mnt/mysql/mydata/invoice/invoice_id/.max
  或者指向
  /mountpoint/database/table/field
  和
  /mnt/mysql/mydata/invoice/3
  
  同样的就可以返回一行的 min/max/sum/avg 等数值。
  这能很快并且很容易地实现。
  
  /mnt/mysql/mydata/.keys/
  /mnt/mysql/mydata/.keys/invoice_id/
  /mnt/mysql/mydata/.keys/payee/
  
  符号连接到主键:
  /mnt/mysql/mydata/.keys/.primary_key/ 
  实际上指向
  /mnt/mysql/mydata/.keys/invoice_id/
  
  还有一些隐藏文件提供键类型:
  /mnt/mysql/mydata/.keys/invoice_id/.type
  /mnt/mysql/mydata/.keys/payee/.type
  
  第一个文内容为:¨PRIMARY KEY¨ 第二个为 ¨KEY¨ 。
  
  另外还可以用索引来排序记录,如果读取下面的目录:
  
  /mnt/mysql/mydata/.keys/payee/asc/
  
  PHP 的readdir() 函数就以升序返回数据的符号连接。
  
  另外还有一些全局函数:
  
  /mountpoint/.version
  /mountpoint/.last_insert_id
  /mountpoint/.uptime
  /mountpoint/database/.raid (0/1)
  /mountpoint/database/.type (ISAM/MyISAM/HEAP/DBD)
  /mountpoint/database/.tables
  /mountpoint/database/table/.created
  /mountpoint/database/table/.last_updated
  /mountpoint/database/table/.last_checked
  /mountpoint/database/table/.count
  
  六、写权限?
  在开发的第二阶段,会有措施执行SQL 语句。现在的思路是:
  
  采用目录:
  /mountpoint/database/.command/
  
  然后执行命令,把SQL 语句作为目录建立。
  或者建立目录把SQL 语句作为文件放入这个目录。
  
  两个方案都有优点,第一个方案可以重新使用SQL 语句,但是这样的目录名实在不敢令人苟同。第二个方案采用信号量文件,语句执行完毕就删除这个文件,没有任务使用时,目录也被删除。对于那些慢速的查询响应,可以选择timeout 的时间。
  
  七、权限管理
  在权限管理方面,可以使用Unix 的权限管理方式,这样的方案看来是最好的。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

3

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

1

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

0

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

4

2026.02.03

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

2

2026.02.03

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

1

2026.02.03

Python 强化学习与深度Q网络(DQN)
Python 强化学习与深度Q网络(DQN)

本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

2

2026.02.03

python end=
python end=

本专题整合了python中end=的相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.03

python运算符优先级
python运算符优先级

本专题整合了python运算符优先级排序、用法相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 5.3万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.4万人学习

Git 教程
Git 教程

共21课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号