已掉线,重新登录

首页 > 绿虎论坛 > 建站 > 讨论/求助 (发帖)

标题: 建站之深入理解Mysql数据库

作者: @Ta

时间: 2011-06-13

点击: 3076

深入Mysql的工作过程。
Mysql数据库由两部分组成,它们缺一不可:
一、数据库服务程序
二、数据库目录和文件


Mysql的数据库服务程序和Web服务器很相似,它的工作过程如下:
1.用户(PHP或者其他程序)通过TCP/IP协议(这个协议是互联网的基础协议,Web也基于此协议)连接上Mysql服务器的指定端口(默认为3306),发来一个请求,要求登陆Mysql服务器,里面包含用户名和密码。Mysql服务程序验证它们,如果失败,返回错误信息。如果成功,通知用户可以继续。
2.当与Mysql建立起连接之后,用户程序便可以向Mysql发送SQL(数据库查询语言)语句,让Mysql服务程序对数据库目录和文件进行一系列操作,并把结果返回给它们。
操作有:
 建立一个新数据库(Mysql服务程序在数据库根目录建立一个与数据库名同名的子目录)。只有数据库管理员(root用户)才有权限建库。
 删除数据库,删目录。
 建立一张新数据表(Mysql在数据库名那个目录里新建一个与表同名的.db文件。如mydb库里的session表对应着数据库根目录中mydb目录下的session.db文件)
 删表,删文件。
 插入、修改、查询,最终都转化为一系列复杂的文件操作。
 重命名库或表就是重命名目录和文件。



做完这一切后,Mysql服务程序再通过TCP/IP把结果返回给用户程序。
用户又发来一个sql,再处理,返回结果。
又来sql,处理,返回……
最后,用户通知Mysql关闭连接,连接被关闭(此时PHP程序往往也结束了)。
下一次查询,用户需要重新登陆。
这便是Mysql短连接。


如果用户程序不通知Mysql关闭连接,那么Mysql会一直等待,直到连接超时(Mysql连接超时时候长达几小时甚至几天!)
这样的好处很明显,不需要频繁登陆了,查询速度快。
缺点往往不明显:
 如果你的Mysql最多能同时建立50个连接,而PHP能同时建立100个连接的话,当访客不幸被分配到你的另外50个PHP连接上时,得到的结果将永远是数据库连接失败!
这就是PHP的Mysql长连接,慎用之!
既然Mysql最终也是用文件保存数据,为什么不直接用PHP的文件读写代替呢?或者像SQLite、Access这样与网站共享空间的本地数据库也行啊。为什要专门开一个服务进程做Mysql,还要花时间网络连接和登陆。Mysql有什么不可替代的优点吗?
1、Mysql不和网站文件共享存储空间(它的文件保存在别的目录),在网站空间满时不会影响数据读写。
和网站文件共享空间的恶果相信经常在绿虎论坛发贴的人们深有体会吧。
2、协调性。Access数据库或者一个人访问时很快,但经不起人多。只要超过50人同时访问肯定挂掉。SQLite好很多,但是协调性问题也很严重。比如:下载队列启动后,由于它一直在使用数据库,就把session.db3给锁定了,然后用户的文件、任务无法删除,新增任务极慢,最严重的是下载队列自己也更新不了数据库了,旧任务一直完不成(因为任务删不掉),重复下载同一个文件,陷入死循环。
而Mysql由于有一个唯一的服务进程统一调度管理,所以不会遇到这样的情况,所以虎绿林才把下载队列使用的session数据库迁移到Mysql。
总结:SQLite是人一多就乱,适合单用户使用,比如给某些应用程序保存数据。Mysql人多也不乱,正是Web服务需要的特性。
3、简洁性。如果要你用PHP的文件读写功能建一个用户系统,你会怎么做?为每一个用户建一个文件,还是把它们都放同一个文件里。
选择前者,我们搜索用户时怎么办,你能在几万个文件中快速找到符合要求的用户吗?
后者,搜索是快了,可是如果同时有两个用户来注册,你怎样做才能不把文件写坏??
如果你把这些和更多在使用中遇到的问题都解决了,你其实就已经完成了一个数据库系统!
可是这些,很难。而Mysql则给我们提供了一个现成的方案。几万条数据,0.1秒内完成搜索。几百人同时读写,数据丝毫不乱……
这些,没有一个独立的服务程序,怎么做到??
所以,Mysql是不可替代的!(谁说的,我们完全可以用相似的数据库系统如Oracle等替代它嘛)
备注:SQLite数据库引擎对db3数据文件的操作,和你直接用php去操作它们没有本质的区别。如果你的php没有SQLite引擎,你甚至可以自己用php写一个出来!不过没人干这麻烦事。
但php就无法实现Mysql,也许能勉强做到读写数据,但人一多就乱掉的毛病一定无法避免。

[隐藏样式|查看源码]


『回复列表(5|隐藏机器人聊天)』

1. 老虎,还不睡啊
(/@Ta/2011-06-13 02:06//)

2. 受益匪浅呐。
(/@Ta/2011-06-13 06:52//)

3. 顶你
(/@Ta/2011-06-13 07:26//)

4. 如果session.db3给锁定了怎么办呀
(/@Ta/2011-06-13 09:19//)

5. 厉害……
(/@Ta/2011-06-13 13:21//)

回复需要登录

8月26日 11:08 星期二

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1