谁可相欹 发表于 2015-1-16 22:23:18

MYSQL教程之在MYSQL中怎样利用API

MySQL的双许可模式意味着,那些希望对数据库具有额外控制的人可以直接从数据库厂商那儿得到帮助。MySQLAB公司提供了支持和维护服务,诸如代码更新和补丁修补服务等,每年订阅费为大约3000美元。
5.2选择API
本节先容依据各类范例的使用程序选择API的办法,对照C、DBI和PHPAPI的才能,并给出它们绝对的长处和弱点,并指出甚么时分应选择哪个。
起首应当指出,笔者不以为任一种言语优于其他言语。只管笔者切实其实有本人的喜欢,但仍是一切利用它们。您也会有本人的喜欢,像我的批评家一样。一个批评家会感到应当夸大C对MySQL编程的主要性,应将这类主要性上升到更主要的水平,而另外一个批评家会以为C
编程相称坚苦,应放褂盟∧Φ比ê獗窘谥刑致鄣末路庑┮蛩兀贸鲎约旱慕崧邸T诙蕴囟ㄈ挝裱≡衲母API时,要思索以下成绩:
■预期的实行情况。希冀利用使用程序的高低文情况。
■功能。当在API言语中编写时,怎样使使用程序高效地实行。
■开辟的简单性。怎样便于API和它的言语编写使用程序。
■可移植性。除MySQL之外,使用程序是不是还将用于其他数据库体系。
上面进一步剖析每一个成绩。要注重这些要素的互相影响。比方,您想要一个运转优秀的使用程序,但利用一个可疾速开辟该使用程序的言语也一律主要,即便该使用程序不克不及十分无效地运转也一样。
5.2.1实行情况
当编写使用程序时,一般招考虑利用哪一种情况。比方,该使用程序多是从外壳程序中挪用的呈报天生器程序,或一个对付账目提要程序,在每个月的月尾作为cronjob举行运转。从外壳程序或cron程序中运转的命令一般依附它们本人,并且很少必要运转情况。别的,能够编写一个使用程序来试图由Web服务器挪用。如许的程序希冀能从它的运转情况中抽出十分特别范例的信息:客户正在利用甚么扫瞄器?在邮件清单定阅哀求格局中输出甚么参数?客户供应准确的口令会见我们团体信息了吗?每种API言语都以它在这些分歧的情况中适于编写使用程序而变更:
■C是通用方针的言语,从实际上讲任何义务都可以使用它。在实践中,C偏向于用于更频仍的自力程序而不是对Web的编程。其缘故原由多是在C中不像在Perl或在PHP中那样简单地完成文本处置和内存办理,而且这些处置和办理在Web使用程序中大批地利用。
■Perl,像C一样,合适于编写自力的程序。但是,关于Web站点的开辟,Perl也长短常有效的,比方经由过程利用CGI.pm模块。这使Perl成为编写毗连MySQL和Web的使用程序的便当的言语。如许的使用程序能够经CGI.pm模块与Web接口,并可使用DBI与MySQL互相感化。
■PHP是计划用来编写Web使用程序的言语,以是这个情况明显是最合适的。并且,数据库会见是PHP最年夜的上风之一,以是它是完成与MySQL相干的义务的Web使用程序最天然的选择。也能够将PHP作为一个自力的注释程序(比方,从外壳程序中运转剧本),但不克不及十分频仍地利用它。
依据以上这些必要思索的成绩,关于自力的使用程序,C和Perl是最好言语。关于Web使用程序,Perl和PHP是最符合的。假如必要编写这两品种型的使用程序,但又不会利用这些言语的任何一种,并想用尽量少的精神来进修,则Perl多是您最好的选择。
5.2.2功能
我们一般喜好使用程序尽量快地运转。但是,实践上功能的主要性取决于所利用的程序的频次。关于一个月运转一次早晨准时事情的程序,功能大概不长短常主要的。而关于在Web站点上一秒钟运转多少次的程序,则每当扫除一点有效性城市带来伟大的分歧。后一种
情形下,在站点的无效性和哀求中,功能发扬侧重要的感化。一个迟缓的站点是令用户忧?的,不管站点的内容怎样,假如您依托站点作为一项支出来历,则功能的下降间接影响支出。假如不克不及一次为多个毗连供应服务,会见者只会发生腻烦心情而往其他的站点。
功能评价是一个庞大的成绩。当编写特定的API时,使用程序完成得优劣的最好目标是在这个API情况下编写并举行测试。并且最好的对照测试是在分歧的API情况下屡次运转该使用程序,来对照每一个版本。固然,那不是一样平常的事情。一样平常来讲,您只想猎取编写的使用
程序。一旦它事情了,假如它必要运转得更快,您就能够思索优化它,利用更少的内存,或有某些必要用其他办法进步的方面。可是,最少有以下两个要素会影响功能:
■编译的程序比注释的程序运转得更快。
■关于在Web高低文情况中利用的注释言语,在注释程序作为Web服务器本身的一部分而不是独自的历程模块被挪用时,功能更好。
1.相对注释言语的编译言语
编译的使用程序比用剧本言语编写的程序的一样版本效力更高、利用的内存更少,而且实行得更快,这是基础纪律。这是因为实行剧本的言语的注释程序的开支成绩。由于C是编译的,而Perl和PHP是注释的,以是C程序一般比Perl或PHP剧本运转得更快一些。关于大批利用的程序,一般用C是最好的选择。在MySQL分发包中包含的mysql命令行客户机程序就是最好的样例。
固然,有一些要素能使这类分明的不同减小。关于一项义务,可用C编写出更快的程序,但也很有大概编写出低效力的C程序。用编译言语编写的程序其实不主动地包管更好的功能。以是必要不休地思索所做的事变。别的,假如一个剧本化的使用程序需消费年夜部分工夫来实行毗连到注释程序引擎的MySQL客户机库例程的代码,则编译程序息争释程序之间的不同将有所削减。
2.相对言语注释程序模块版本的自力程序
关于基于Web的使用程序,剧本言语注释程序一般以两种情势之一来利用,最少对Apache是如许,当编写Web使用程序时,Apache是我们将利用的Web服务器:
■能够布置Apache往挪用这个注释程序作为独自的历程。当Apache必要运转Perl或PHP剧本时,它启动响应的程序,并告诉它来实行该剧本。在这类情形下,Apache利用该注释程序作为CGI程序,也就是说,它利用大众网关接口(CommonGatewayInterface,CGI)协定与它们通讯。
■注释程序可用作间接毗连到Apache二进制程序和作为其历程本身的一部分运转的模块。在Apache前提下,Perl和PHP注释程序取得mod_perl和mod_php3模块的情势。
Perl和PHP的倡始者们尽力宣传注释程序有速率上风,但一切的人都批准之以是喜好注释程序是由于其运转的情势比言语自己有更年夜的勾引力。在这二者中,注释程序作为模块运转比作为自力的CGI使用程序运转更快。
关于自力的使用程序,每当运转一个剧本时都必需启动该注释程序,以是将招致严重的创立历程的开支。当在已运转Apache历程的外部作为模块利用时,注释程序能够当即从Web页面中会见。经由过程削减开支明显地进步了功能,并间接转换为疾速处置猎取的哀求并发
送它们的才能的增添。
自力注释程序启动的功能比模块注释程序的功能最少差一个数目级。当思索Web页面服务包含大批处置的疾速事件处置而不是具有很多处置时,注释程序启动的开支出格主要。假如消费很多工夫只是为了启动而不是用于实践实行该剧本,则年夜部分资本一向处于守候形态。一天中的年夜部分工夫大概消费在筹办事情上,4点抵达,然后5点回家。
您大概想晓得,为何注释程序的模块版本因为必需一向启动Apache而能节俭工夫呢?。这个缘故原由是,当Apache启动时,它当即发生一些子历程,用于处置收到的哀求。当包含剧本实行的哀求抵达时,已有Apache历程在筹办守候去向理它。一样,Apache的每一个实例可服务于多个哀求,以是该历程启动的开支只招致每组哀求一次,而不是每一个哀求一次。
当Perl和PHP以模块情势安装时(像mod_perl和mod_php3),哪个完成得更好一些?那就是争辩的主题,以下是合用于一样平常性的指南:
■Perl将剧本转换为外部可编译的情势;而PHP却不如许。因而,一旦该剧本经由过程语法剖析,则Perl可更快地实行它,出格是关于具有大批迭代的轮回。
■mod_perl能够运转剧本高速缓存来进步反复实行的剧本的功能。假如剧本在高速缓存中,则Perl可更快地入手下手实行剧本,由于它不必要再一次剖析。不然,PHP入手下手实行的该剧本的速率更快。
■mod_perl比PHP有更年夜的内存掩盖区;使用mod_perl毗连的Apache历程比使用mod_php3的更年夜。PHP被假定必需在另外一个历程的外部协同存在,而且在谁人历程外部能够屡次激活或取消。Perl被计划成从命令行作为自力程序运转,而不是作为被嵌进在Web服务器历程中的一个言语举行运转。这大概使它支付较年夜的内存掩盖区;
Perl是模块,因而它不运转在本身情况中。剧本的高速缓存和该剧本利用的附加Perl模块是支付较年夜的内存掩盖区的别的的要素。在这两种情形下,有更多的代码利用内存,并将运转的Apache历程保存在内存中。
在剧本运转速率方面,Perl不管有甚么可凌驾PHP的上风,都被PHP4撤除了。PHP4在它的才能和接口方面相似于PHP3,但它兼并了Zend,Zend是一种更高功能的注释程序的引擎。
不管怎样,一切的这些要素只招致Perl和PHP的模块版本之间功能比分歧。不管您选择哪一种言语,最主要的是尽量地制止自力的注释程序。
注释程序的自力版本切实其实有一个长处凌驾它的模块版本,便可以布置它在分歧的用户ID下运转。模块版本一直运转在与Web服务器不异的用户ID下,出于平安缘故原由,该用户是一个典范的具有很少权限的账号。关于必要特别权限的剧本来讲不克不及很好地运转(比方,假如您必要能读写受回护的文件)。假如乐意,能够将模块办法和自力办法分离起来:缺省情形下利用模块版本,而在具有特定用户的权限的剧本的情形下利用自力版本。
下降mod_perl的内存需求
有些手艺同意您只能对mod_perl利用某些的Apache历程。如许,只对运转Perl剧本的那些历程发生分外的内存开支。ApacheWeb站点的mod_perl部分有可选择的各类战略的会商(有关的具体信息,请参阅http://perl.apache.org/guide/)。综上思索,也就是说,选择Perl仍是PHP,您应当试着从Apache模块中而不是经由过程挪用一个独自的注释程序历程来利用它。只对不克不及由模块处置的那些情形利用自力的注释程序,比方必要特别权限的剧本。关于这些实例,能够经由过程利用Apache的suEXEC机制在给定的用户ID下启动注释程序来处置剧本。
5.2.3开辟工夫
方才形貌的这些要素影呼应用程序的功能,但不克不及只思索运转效力。工夫及编程的浅易性也是主要的,以是为MySQL编程选择API时要思索的另外一个要素是怎样很快地开辟出本人的使用程序。假如开辟一样程序,用Perl剧本只需用C言语一半的工夫,那您大概宁肯利用PerlDBIAPI,而非CAPI,即便开辟出的使用程序运转速率不长短常快也云云。思索程序的运转工夫比思索编写程序时花的工夫更少一些一般是公道的,出格是对不常常运转的使用程序更是云云。您的一小时比呆板的一小时要值钱很多!
一样平常来讲,剧本言语编写程序更快,出格是失掉使用程序的原型更快,这是因为以下两个缘故原由:
第一,剧本言语供应更初级其余布局。这同意您在笼统的更初级别长进行思索,以便会合思索要做些甚么,而不是思索怎样做。比方,Perl的联系关系数组(散列)关于保护具有键/值系(如先生ID/先生姓名对)的数据节俭了大批工夫。C没有如许的机关。假如想在C中完成如许的事变,则大概必要编写代码来处置很多初级的细节,个中包含内存办理和串利用的成绩,而且必要调试它,这也要花工夫。
第二,剧本言语的开辟周期的步骤较少。用C开辟使用程序时,要履历一般的编纂―编译―测试的轮回周期。每次修正程序时,在测试之前都必需从头编译它。而用Perl和PHP,因为每次修正后不必编译就能够当即运转剧本,因而,开辟周期可简化为编纂―测试。另外一方面,编译程序对程序在严厉的范例反省情势方面有更多的束缚前提。编译程序施加的更多束缚前提有助于制止在松懈言语(如Perl和PHP)中不容易捕捉的毛病。在C中,假如您毛病地拼写了变量的称号,则编译程序将告诫您。PHP不如许,Perl也不如许,除非向它扣问。当使用程序变得更年夜且更难于保护时,这些更严厉的束缚前提大概出格有效。
一样平常来讲,在编译息争释言语之间衡量的是开辟工夫与功能的折中:是想要利用编译言语开辟程序,以便在运转时能够更快,但消费更多的工夫来编写它?仍是想要用剧本言语编写程序,以便在延长编程工夫,但要丧失一些运转速率?
将两种办法兼并起来也是大概的。编写一个剧本作为“第一个草案”来疾速地开辟出一个使用程序原型以测试其逻辑性,断定算法的可用性。假如这个程序有效,而且被频仍利用,则功能成为体贴的核心,这时候可作为编译的使用程序从头对它编写代码。如许做给您带来两种办法的长处:疾速失掉使用程序的初始开辟原型,同时失掉终极产物的最好功能。从某种严厉的意义来讲,PerlDBI和PHPAPI并没有给您在C客户机库中没有的才能。这是由于这两种API经由过程MySQLC库毗连到Perl和PHP注释程序来猎取对MySQL的会见。但是,关于嵌进MySQL的情况,C与Perl或PHP有很年夜的分歧。招考虑在与MySQL服务器互相感化时要做的事变并发问每一个API言语怎样匡助您完成这些事变。上面有一些样例:
■内存办理。在C中,您发明本人对任何义务,包含静态分派数据布局都利用malloc()和free()来事情。Perl和PHP可为您处置这些义务。比方,数组的巨细主动地增添,而且可使用静态长度的字符串而不必思索内存办理。
■文本处置。在这点Perl具有最年夜的开辟才能,而PHP位于第二。对照起来,C长短常低级的。固然,能够用C编写本人的库,将内存办理和文本处置如许一些义务封装成更简单事情的函数。可是,然后还必需调试它们,而且您也想使本人的算法效力更高。在这两个方面,基础上能够判定,因为它们已具有了经由过程很多双眼睛反省过的优点,对这些事变Perl和PHP中的算法通常为易于调试而且有公道的效力。经由过程使用其别人的事情能够节俭您的工夫(另外一方面,假如注释程序偶然有一个毛病,您大概必需照顾它,直到这个成绩改正为止。而用C编写时,能够更细地把持程序功能)。
这些言语的分歧还在于它们的“平安性”。CAPI供应对服务器最初级其余接口,并且强迫的准绳起码。从这类意义上说,它供应最初级的平安性收集。假如您超越一般按次实行API函数,则大概取得一个“超越同步”的毛病,或使程序溃散。Perl和PHP都供应了很好的回护。假如您没有以得当的按次举行,则剧本失利,可是注释程序其实不溃散。在C程序中,呈现溃散毛病的另外一个十分大概的来历是静态分派内存和与它们相干的指针的利用。Perl和PHP为您处置内存办理,以是您的剧本很少大概由于内存办理的毛病而瘫痪。
开辟工夫受言语可用的内部撑持的影响。C可用的内部撑持是将MySQLCAPI函数封装为更简单利用的实例的包装库的情势。这些库关于C和C++都可用。Perl无疑具有最年夜数目的附加软件,都是Perl模块的情势(与在Apache模块中具有的观点相似)。乃至有一个基本布局被计划来简单地定位并猎取这些模块(即综合Perl回档收集ComprehensivePerlArchiveNetwork,CPAN)。利用Perl模块,不必编写代码就能够猎取对一切范例的函数的会见。想要编写从数据库中天生呈报的剧本,然后作为一个附件发送给或人吗?只需猎取MIME模块中的一个,就当即具有附件天生的才能。
PHP没有一样水平的内部撑持(这其实不使人惊异,由于它是较新的言语)。大概所晓得的最好的附加软件是PHP基础库(PHPBaseLibrary,PHPLIB)。依据称号和口令机制的一些排序,假定您正在编写必要限制只要经受权的用户才能够对某个Web页面会见的Web使用程序。能够用恣意言语编写对它的撑持程序,可是假如利用PHPLIB,则不用消费工夫从头做这件事变。PHPLIB供应确认而且同意经由过程会话跟踪经受权的用户(从作为单个逻辑会见部分的给定客户机中一连页面的射中)。还能够分派给用户允许权,这同意您举行像界说具有更多权限的办理用户的事情。
5.2.4可移植性
可移植性的成绩与为会见MySQL引擎所编写的程序如何才干简单地修正为利用分歧引擎的程序有关。您大概不忧虑这个事变。但是,除非能够预知将来,不然,说“除MySQL之外,我永久都不会将这个程序用在任何其他的数据库上”大概有些冒险:假定您找到另外一
份事情,并想利用本人的旧程序,但您的新老板利用分歧的数据库体系呢?假如可移植性是必要优先思索的事变,则应当思索在API之间的区分:
■DBIAPI的可移植性最好,由于它自力于数据库是DBI计划的一个明白方针。
■PHP的可移植性稍差,由于它不供应对DBI供应的各类数据库引擎的一样范例的一致接口。对每一个撑持数据库的PHP函数的挪用相似于在响应的基本CAPI中的那些。稍有一些分歧,但很少,必要变动您挪用的数据库相干函数的称号。另有大概要修正一点使用程序的逻辑,由于分歧数据库的托言其实不都是以一样的体例事情的。
■CAPI供应的数据库之间的可移植性最差。由于它生来就是为MySQL计划的。当必要在统一个使用程序中会见多个数据库体系时,自力于数据库的可移植性出格主要。这大概包含像将数据从一个RDBMS挪动到另外一个RDBMS中的复杂义务,或更庞大的义务,如基于从很多数据库体系中失掉的信息天生呈报。
DBI和PHP都供应对会见多个数据库引擎的撑持,以是对分歧的数据库,乃至在分歧的主机上,都能够很简单地同时毗连到服务器上。但是,DBI和PHP在关于从多个异构数据库体系中检索和处置数据的义务的合适性方面有所分歧。而DBI更好些,由于不管利用哪一种数据库,它都利用一组独自的会见挪用。假定想在MySQL、mSQL和Postgres数据库之间传送数据。利用DBI,则利用这三种数据库的唯一分歧的地方在于用于毗连到每一个服务器的DBI->connect()挪用。而用PHP时,大概必要有更庞大的剧本,该剧本将含有三组读取挪用和三组写进挪用。
多半据库使用程序的一个极好的例子是MySQL分发包中的crash-me剧本,它可测试很多分歧的数据库服务器的才能。该剧本是用DBI编写的,关于如许的使用程序,这类选择是很分明的,由于您能够一样的体例会见一切的数据库。


与其他数据库相比,MySQL易学易用。

金色的骷髅 发表于 2015-1-19 10:08:50

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

只想知道 发表于 2015-1-28 06:06:08

不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?

若相依 发表于 2015-2-5 18:54:57

比如日志传送、比如集群。。。

愤怒的大鸟 发表于 2015-2-13 06:50:22

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

不帅 发表于 2015-3-3 18:45:29

这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?

蒙在股里 发表于 2015-3-11 12:44:15

SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。

海妖 发表于 2015-3-18 19:09:35

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

简单生活 发表于 2015-3-26 14:37:00

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
页: [1]
查看完整版本: MYSQL教程之在MYSQL中怎样利用API