|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你可以配置MySQL运行在微小的嵌入式应用程序中,处理的数据可能不足1Mb??而你也可以用它来处理数Tb的数据。MySQL获得这种可扩展性的路径之一是通过一个人们所熟知的存储过程,这是一个运行在程序之外的微型、预编译程序。注重:这篇文档写于2000年5月。因而,它其实不能申明MySQL的最新特征。但从中我们仍旧能够懂得RDBMS的一些基础观点、道理,从而在理论中更好地使用数据库,同时也才干对一些不实的炒作坚持需要的小心。
为什么不必MySQL?
几近每周、偶然乃至更加频仍,总有人会问我们为什么不接纳MySQL作为OpenACS的RDBMS(干系式数据库办理体系)。ACSClassicteam(ArsDigita)也几回再三地在他们的论坛上碰到一样的发问。假如MySQL关于Slashdot来讲充足好的话,它也必定可以用于OpenACS,不是吗?
不合错误。这篇冗长的论文将实验注释为什么MySQL不但对OpenACS来讲是毛病的选择,它也不该被用于任那边理关头数据的体系。
RDBMS的目标
RDBMS的目标是供应一种牢靠的永世存储机制,在ACID测试中详细表述了这类机制的十分严厉的特征。我将间接援用PhilipGreenspun的出色注释(以Oracle作为RDBMS的代表):
原子性(Atomicity)
事件的实行了局大概被全体提交、大概被全体回滚(rollback)。要末一切的变化都失效,要末就没有变化失效。假定一个用户正在编纂一条正文,Web剧本告知数据库“将旧正文值拷贝到审计表中,并用新文本更新举动表”。假如在拷贝以后、更新之前硬盘变满的话,审计表拔出就将被回滚。
分歧性(Consistency)
数据库从一种无效形态转换到另外一种无效形态。仅在从命用户界说的完全性束缚时,一个事件才是正当的。不同意不法的事件,并且,假如不克不及满意某完全性束缚的话,该事件会被回滚。比方,假定你界说了一条划定规矩:论坛表中的帖子必需与无效的用户ID相干联。然后你招聘了JoeNovice来编写办理页面。Joe编写了一个删除用户页面,它不会反省删除是不是会发生一些无主的论坛帖子。但是像Oracle如许的RDBMS将会举行反省,并中断任何事件,假如它发生的论坛帖子为已被删除的用户所具有的话。
断绝性(Isolation)
一个事件的了局关于其他事件是不成见的,直到该事件完成为止。比方,假定你有一个显现新用户和他们的照片的页面。依照出书者的请求,在页面中每一个用户都有一张脸部照片,假如用户没有照片的话就显现一幅暗示无照片的图象。在新用户Jane在你的站点注册的同时,老用户Bill正在检察新用户页面。处置Jane的注册的剧本会对多少表举行拔出:users、mugshots、users_demographics。假如Jane的脸部照片很年夜的话,上述拔出大概会必要一些工夫。假如Bill的查询在Jane的事件提交之前入手下手的话,Bill基本不会在他的新用户页面上看到Jane,即便在Jane的事件中,对某些表的拔出已完成。
耐久性(Durability)
一旦提交(完成),事件的了局将是永世性的,并能免于将来的体系和介质妨碍。假定你的电子商务体系未来自某消耗者的订单拔出数据库表中,并唆使CyberCash收取该消耗者500美圆的用度。俄然间,在你的服务器收到CyberCash的复兴之前,有人绊失落了呆板的电源线。在如许的情形下,Oracle将不会健忘该订单。并且,假如有程序员将咖啡洒进了磁盘驱动器中,安装一个新磁盘,并将事件复兴到咖啡倾泻时为止是大概的;数据将显现你曾试图收取或人500美圆,而且还不分明在CyberCash那边产生了甚么。
假如你所要的是疾速的裸存储,往利用文件体系。假如你想要在多台呆板间举行共享,往利用NFS。假如你想要复杂的牢靠性,以凑合过于复杂的妨碍,往利用镜像。想要给它们加上SQL接口?往利用MySQL。
如今,假如你所要的是如许的数据存储,它可以使你的数据集的多少方面坚持恒定,可以对这些数据举行庞大的操纵、而永不违背上述的那些束缚,可以将多个用户同时举行的部分事情相互断绝开来,而且可以从任何品种的妨碍中举行安稳的恢复,那就给你本人找一个真实的RDBMS。是的,它会比MySQL文件体系慢,就像TCP比UDP慢一样,但它们却供应了更好的服务包管。
MySQL的近况与将来
构建真实的RDBMS是一项困难的义务,大概比任何其他体系成绩都要困难。市场上的年夜多半产物(Oracle、Sybase、PostgreSQL、Interbase)已举行了多年的开辟,有些还凌驾了10或15年。
MySQL的开辟职员宣称他们就义了某些特征,以包管更好的功能。只管这也许是一种追踪非关头数据(好比点击率追踪)的风趣办法,在处置关头数据时,就义完整的数据完全性是不成承受的,即便是为了速率也一样云云。
当MySQL成熟时,OpenACS团队很乐意对其举行间隔更近的考查。可是,MySQL团队仿佛其实不了解真实的ACID才能的观点和主要性:MySQLTodo在一个很长的列表中提到了“事件”,个中包含了诸如“就寝历程占用CPU吗”如许的成绩。别的,MySQL手册宣称MySQL将很快经由过程表锁的利用来完成“原子操纵”,但却“没有回滚”。这是对术语“原子的”堂堂皇皇的误用:“原子操纵”意味着大概一切操纵都完成,大概没有操纵完成。假如没有回滚才能的话,在一组语句的两头产生的硬件或电力妨碍将损坏块的原子性。
回滚不但是一种便当的特征,它是牢靠的数据存储的关头性基本。
有很多很好的来由利用MySQL,但对牢靠的、依从ACID的数据存储的需求却并不是是个中之一。
更多的细节
lMySQL没有子查询。
关于庞大的查询,MySQL用户必需实行两次或更多的系列查询,每次都必要在使用和数据库间举行历程间通讯或收集通讯。这明显地下降了MySQL的速率上风。
lMySQL没有存储历程。
lMySQL没有触发器或外键束缚。
lMySQL只要表级锁定。
结语
企业级体系不会为了速率而就义特定的特征。RDBMS的ACID属性关于任何干键数据来讲都是相对必须品。在非ACID依从的体系上运转的关头网站是在自找贫苦。
OpenACS项目回绝冲破ACID测试的主要法例。我们要构建的是企业级的开放源码Web工具包。PostgreSQL、很快另有InterBase将成为这一项目符合的候选RDBMS。而MySQL只是一个有着SQL接口的被丑化的文件体系。
曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。 |
|