`
edwardpro
  • 浏览: 310292 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

<![CDATA[zend select小议]]>

阅读更多
因为最近一直在做zend ext的工作,因此花了不少时间读了zend framework的代码,也比较深入地在使用这个东西.下面有些小小的个人体会.

首先是select对象的一些小问题.select中有很多组语句的函数,但这些函数却不会判断是否传入是空字符串,导致输出变成两个单引号,这就要求开发人员在自己的函数里判断,这点不是太灵活.

接下来select的毛病是不支持外连接,实际上这个有些让我意外,意外的原因是居然不能支持,而从目前zend的机制来看它对于这个的支持是非常良好的,因为它已经加入了lazy概念也就是在1:n中常使用的一种性能优化模式,也是外连接支持的一个必备因素,这点很有点问题.但是当你仔细看看你会发现这个东西是一个半成品.实际上要做到无限联级的首要就是,必须把数据表映射成代码中的数据对象,虽然在php中没有pojo这个概念,但实际上你可以理解一个具有数据表所有功能的对象为数据表实体(entity bean).但zend目前的db构架显然还不是太完全,它给我的感觉更多的是把db作为了一个颗粒,也就是数据库或者叫做数据连接,这个颗粒度的分层我认为是有问题的.当然你完全可以封装上去,但是这意味着我们需要抛起zend的很多东西,也许这就是zend framework本身开放性带来的弊端.我说过,zf是一个本身完全oo但是可以让开发者完全不用懂oo也能写出好的php分层结构的东西,这就注定了它会具有很多弊端.

另外我发现zend的fetchrow有性能问题,虽然他返回第一个结果集,但实际上他没有对数据库查询做优化,也就是说当你传入一个select * from user 那么在zend里用fetchall和fetcherow性能本身差别不大,而理想的做法是在前面的语句中加入limit 1这样才会对性能有本质提高,否则这个方法的存在意义就不大了.

另外在数据层它没有预留cache接口,实际上大量的实践证明要提高php低下的io能力只能用缓存技术,否则任何一种主流语言的数据库连接性能都可以秒杀php.而cache接口没有预留意味着我们又要很费劲地在外面包上一层,这也是我在我的zend ext中所干的活.
分享到:
评论

相关推荐

    Mybatis 中的&amp;lt;![CDATA[ ]]&amp;gt;浅析

    [CDATA[ SELECT newsEdit,newsId, newstitle FROM shoppingGuide WHERE 1=1 AND newsday &gt; #{startTime} AND newsday &lt;= #{endTime} ]]&gt; &lt;if test="etidName!=''"&gt; AND newsEdit=#{etidName} &lt;/if&gt; &lt;/select&gt; 在...

    JAVA对象转换成XML(CDATA)

    [CDATA[ 文本内容 ]]&gt;`,其中"文本内容"部分不能包含字符串"]]&gt;",以防止提前结束CDATA段。同时,CDATA段不能嵌套,也就是说,一个CDATA段内部不能再有另一个CDATA段。 要将Java对象转换成XML并包含CDATA,我们可以...

    微信小程序支付(已调试通过).rar

    微信小程序支付JSAPI交易类型 已通过测试 返回例子如下: &lt;xml&gt;&lt;return_code&gt;&lt;![CDATA[SUCCESS]]&gt;&lt;/return_code&gt; &lt;return_msg&gt;&lt;![CDATA[OK]]&gt;&lt;/return_msg&gt; &lt;result_code&gt;&lt;![CDATA[SUCCESS]]&gt;&lt;/result_code&gt;

    上传xml文档

    &lt;preconditions&gt;&lt;![CDATA[1.使用udp_bi用户在PLSQL正常登陆UAT数据库&lt;br&gt; (UAT数据库IP: 10.0.13.178)&lt;br&gt; 2.数据库脚本已下载至本地环境]]&gt;&lt;/preconditions&gt;&lt;importance&gt;&lt;![CDATA[2]]&gt;&lt;/importance&gt;&lt;steps&gt; &lt;step&gt;

    微信开发文档

    [CDATA[toUser]]&gt;&lt;/ToUserName&gt; &lt;FromUserName&gt;&lt;![CDATA[fromUser]]&gt;&lt;/FromUserName&gt; &lt;CreateTime&gt;1348831860&lt;/CreateTime&gt; &lt;MsgType&gt;&lt;![CDATA[text]]&gt;&lt;/MsgType&gt; &lt;Content&gt;&lt;![CDATA[this is a test]]&gt;&lt;/...

    微信时间开发源码

    [CDATA[%s]]&gt;&lt;/ToUserName&gt; &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt; &lt;CreateTime&gt;%s&lt;/CreateTime&gt; &lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt; &lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt; &lt;FuncFlag&gt;0&lt;/FuncFlag&gt; &lt;/xml...

    一个简单的xml文件

    ATTLIST 电话 类别 CDATA "移动电话"&gt; ]&gt; &lt;联系人列表&gt; &lt;说明&gt;&content;&lt;/说明&gt; &lt;联系人&gt; &lt;姓名&gt;刘保文&lt;/姓名&gt; &lt;ID&gt;201003101115&lt;/ID&gt; &lt;公司&gt;腾飞汇通有限公司&lt;/公司&gt; &lt;电话 类别="移动电话"&gt;18993380967&lt;/...

    asp微信开发者回复代码

    [CDATA["&fromusername&"]]&gt;&lt;/ToUserName&gt;" &_ "&lt;FromUserName&gt;&lt;![CDATA["&tousername&"]]&gt;&lt;/FromUserName&gt;" &_ "&lt;CreateTime&gt;"&now&"&lt;/CreateTime&gt;" &_ "&lt;MsgType&gt;news&lt;/MsgType&gt;" &_ "&lt;ArticleCount&gt;3&lt;/...

    省市区表,xml省市区

    自己将数据导入到xml中的,希望有需要的朋友可以自己下载,格式为&lt;!DOCTYPE PCAroot[ &lt;!ELEMENT PCAroot (Province*)&gt; &lt;!ELEMENT Province (City*)&gt; &lt;!ELEMENT City (Area*)&gt; &lt;!ELEMENT Area (#PCDATA)&gt; &lt;!...

    DTD入门知识与使用方法

    ATTLIST square width CDATA "0"&gt; 这个声明指定了 square 元素是一个空元素,带有一个 width 属性,属性类型是 CDATA,默认值是 0。 在 XML 文档中,可以使用以下语法来使用这个 DTD: &lt;square width="100" /&gt; ...

    xml教程<<无废话xml>>

    &lt;title&gt;无废话XML&lt;/title&gt; &lt;author&gt;张三&lt;/author&gt; &lt;/book&gt; ``` #### 3. 属性 - 元素可以带有属性,提供额外的信息。例如: ```xml &lt;book id="001"&gt; &lt;title&gt;无废话XML&lt;/title&gt; &lt;author&gt;张三&lt;/author&gt; &lt;/...

    DTD教程,来自3cSchool

    &lt;/body&gt; &lt;/note&gt; ``` 在这个例子中,`&lt;!DOCTYPE note [...]&gt;`定义了文档类型为`note`,并且规定了`note`元素包含`to`、`from`、`heading`和`body`这四个子元素,每个子元素都允许包含字符数据(#PCDATA)。 外部...

    微信小程序支付统一下单报错CDATA[商户号mch_id与appid不匹配]

    [CDATA[FAIL]]&gt;&lt;/return&gt; &lt;return&gt;&lt;![CDATA[商户号mch_id与appid不匹配]]&gt;&lt;/return&gt; &lt;/xml&gt; 原因是我拿到的商户号不是这个公众号的。一定要检查是不是这个公众号的商户号。 免责声明:本站所有文章和...

    PHP cdata 处理(详细介绍)

    2. '&lt;':当遇到 '&lt;' 时,状态变化到 '&lt;',以判断是否是CDATA部分的起始。 3. '&lt;!':继续往后读,检查是否是CDATA的开始。 4. '&lt;![':继续,检查是否是CDATA的开始。 5. '&lt;![C':继续,检查是否是CDATA的开始。 6. '...

    Mobile Atlas Creator.exe

    [CDATA[http://t{$serverpart}.tianditu.cn/DataServer?T=cia_w&X={$x}&Y={$y}&L={$z}]]&gt;&lt;/url&gt; &lt;serverParts&gt;0 1 2 3 5 6 7&lt;/serverParts&gt; &lt;backgroundColor&gt;#00000000&lt;/backgroundColor&gt; &lt;/customMapSource&gt; &lt;/...

    xml实现留言簿xml+asp+xml+css

    [CDATA[留言内容]]&gt;&lt;/content&gt; &lt;/message&gt; &lt;/messages&gt; &lt;/gbook&gt; ``` 4. **DTD定义**: - 用于定义XML文档的结构和约束条件。 - 例如,`&lt;gbook&gt;` 元素包含了 `&lt;info&gt;` 和 `&lt;messages&gt;` 两个子元素。 ```xml...

    微信接口ASP版

    [CDATA[gh_33bb5907f91e]]&gt;&lt;/ToUserName&gt; &lt;FromUserName&gt;&lt;![CDATA[ojLh3jkYtiszyEY-_sM_8yrNxSc4]]&gt;&lt;/FromUserName&gt; &lt;CreateTime&gt;1363231643&lt;/CreateTime&gt; &lt;MsgType&gt;&lt;![CDATA[text]]&gt;&lt;/MsgType&gt; &lt;Content&gt;&lt;...

    DTD(文档类型定义)语法[归类].pdf

    &lt;/body&gt; &lt;/note&gt; ``` 对应的`note.dtd`文件内容与内部声明相同。 使用DTD的好处主要包括: 1. **自包含性**:每个XML文件都可以携带其格式描述,方便理解和处理。 2. **标准化**:为不同的人提供了一种共同理解数据...

    xmlspy教程.pdf

    在文件中,我们可以看到DTD定义了Contacts文档的结构,包含了对&lt;Contacts&gt;、&lt;Person&gt;、&lt;Name&gt;、&lt;Address&gt;、&lt;Country&gt;、&lt;Province&gt;、&lt;City&gt;、&lt;Phone&gt;、&lt;Email&gt;等元素的定义,以及对&lt;Contacts&gt;和&lt;Person&gt;元素如何嵌套...

Global site tag (gtag.js) - Google Analytics