Submitted by gouki on 2010, October 17, 12:18 AM
在开始今天的话题之前,先感谢一下傲骨,在我向板子申请小海豚未果后,他让出了他的sun海豚。
再,感谢ThinkInLamp 组委会(http://www.thinkinlamp.com),也正是由于他们的努力,我们才有了今天这么一个专场(而且很多参与者也放弃了今天同时举办的其他几个专场,比如在篱笆网的前端专场(?UED??),还有复旦的ubuntu 10.10的专场等,好象还有一个,三马说了,也没有记清)
再,StingChen【http://my1930.com】在我们听讲的时候,努力的在新浪围脖【http://t.sina.com.cn/thinkinlamp】上拼命的在直播(如果他没有PPT,那就是他打字特别快了。。。)
然后就是赞助商和几位嘉宾了(感觉今天就是Action【爱可生】和盛大的专场,有些内容就不多写了,因为StingChen的新浪围脖直播上的内容详细程度堪比PPT啊【点击查看】,可惜不支持倒排。看的会稍微有点累)。
当然我们不能忽略一些幕后工作者,ThinkInLamp的组委会和一些志愿者,他们非常努力的想办好这次专场(据说很多人都是几乎一夜没睡,看到板子【http://blog.thephper.com】的脸都是白的,虽然他们没有经验,但非常努力)
OK,开始讲讲今天的内容吧。对于一些广告我就直接无视了,只记录讲技术的。
先是老谭(谭浚青)给大家介绍了Mysql的myisam与innodb的比较,虽然很多资料大家在应用中都有接触和了解,但他还是对于myisam的key buffer和innodb的bufferpool的调优有了介绍。其中他也介绍了一个小经验,是innodb调优的,说是如果raid卡上有电源模块,那么也就可以利用raid卡上的内存来优化redo log的传输性能。(好象没记错)老谭在介绍这些信息前也介绍了Action公司正在测试的一款新产品,利用服务器上的agent来进行mysql的监控(采用WEB方式进行管理,看他的几个截图倒是真的不错)
接下来就是盛大的赵佳佳介绍了SNS数据库的设计,主要介绍了一些数据库的拆分方案,可能由于小姑娘有点拘谨,虽然内容不错,但讲的一般,大概还是紧张了吧(不过,如果要是换成我,我还会更紧张)。对于数据库的拆分,还是传统的水平拆分和垂直拆分,这两点我就不多说了,网上资料更多。完了结束时,她介绍了Amoeba:分布式数据库Proxy(希望没说错)。
Oracle的杜玉松介绍了Mysql被收购后未来的一些roadmap,也算是让我们对MYSQL的未来有些信心,不至于过份迷惘吧。傲骨倒是对电信级的server非常感兴趣,只是我却对这些没有太大兴趣。当然分区表,也是我们关心的,用lvan的话来说这点在5.5的时候就会有很大的改进,不再象现在还会存在一些BUG,让人不太敢用(感觉好象说是可以智能分区了)
接下来又是盛大的哥们介绍数据库mangoDB【被人批评写错了,应该是mongodb】,对于这个数据库,了解的人真的很多,而且不管数据量的大小,很多人都也在进行尝试(只是我们的条件不如盛大,不太可能是一下子放上几十台服务器进行尝试)。这点就是小公司的DBA不如大公司的地方了,学习环境不够好啊(结束的时候,他略介绍了几个类似的数据库redis,tc等,在介绍memcache的时候说memcache的value最大只能有1M,而mangodbmongodb可以达到4M,但事实上从最近的1.4.2版开始,memcache在启动的时候加上参数,也可以指定value的最大值了)
最后让我有印象的是Action的杨涛涛,他是直接从代码上来介绍了数据库优化的了,讲的非常简洁,真的很简洁,几句话就带过了。不过有些技巧和经验还是让我眼前一亮。。
比如以下几个sql:
SQL代码
- Select * from t where name like '%de%'
- Select * from t where name like 'de%' 这是可优化的
- Select * from t where name >= 'de' and name < 'df' 如果字符串有规律也可以利用这种方式
-
- Select * from where 1
- Select * from where 1 limi 10
-
- Left join 不能仅对子表判断,可以对主表加过滤条件,避免全表扫描 。
-
- Select sql_no_cache * from new_ext order by id asc limit 20000,20
- Select sql_no_cache * from new_ext where id >= (select id from new_exit order by id ASC limit 20000,1) limit 20
- 这样的效率比上面略高
可惜杨涛涛对于存储过程、触发器、视图等没有过多的介绍,只是说了一下,视图,玩玩可以,不要在开发机上用就成(存储过程、触发器,我都在几年前看过,也做过一些小应用,只是,全忘光了,前段时间在导数据时,连个查询循环都搞不定了)
最后一位MM的mysql高可用性,我没有记录更多。。因为她介绍的几个方法,其实都已经在正式应用中了,虽然有考虑过換新的系统架构,但換的成本也会太高,不敢尝试。
当然也得提点建议,这次餐券的初衷挺好的,但给KFC造成了很大的压力呀,一下子,并发处理不过来了。
最后,感谢傲骨的小海豚,上两张相片:
Tags: thinkinlamp, mysql
PHP | 评论:1
| 阅读:20534
Submitted by gouki on 2010, October 11, 11:09 PM
cnbeta上看到篇文章,不敢独乐,全文引用一下,与君共乐。事实上,今天在PHPRPC群里已经被人鄙视了,那位兄台说,现在除了c#和as比较高级外,其他的都不行。一下子觉得好自卑啊,原来我们就是处于边缘线上的人物。那位兄台也说PHP将死,于是我又感觉自己行走在死亡线上,鸭梨真的很大。
上原文:新闻来源:外刊IT评论
是到了PHP落幕的时候了。就在我这个顽固的PHP分子正要把一个现有的Ruby on Rails代码库转换成PHP时,我要说这样的话。历史在重演 我认为PHP将亡,因为我以前见到过。大概十年之前,PHP灭掉了Perl。当然了,并不十分彻底;它还坚守在某些环境里,它还有相当可观数量的顽固粉 丝,遗留下来的应用程序也需要维护,持续几十年。但这种语言对于新一代的人,特别是web开发者,它在1999年就开始灭亡了,到2005年左右几乎完全 死了。 作为在那个时期出现的新的web开发者,事情显的很明白而且水到渠成:Perl已经不适应新的应用开发环境了。在Perl里,页面需要冗长的公 式化的CGI方式实现,而这些在PHP里却可以用基本的、缺省的编程方式实现。Perl语言里到处都是旧时代的特征 — 引用,不方便的数据结构,还有其他许多的小的古怪语法语义 —— 这使得web开发冗长,不稳定,不方便。无怪乎没有一个出色的web应用是用Perl写成的,而用PHP你却能做的又快又简单,尽管PHP存在着在当时就 显而易见的缺陷。
在1999年支持Perl反对PHP的争论有很多:Perl要快的多,有更多的程序库和驱动支持,CPAN是个神奇的地方,里面预先写好的代码能让你绝大 部分任务省去80%的工作量。现在看起来这些就有点可笑了,但“PHP缺乏可扩展性”却是个真正的缺点。但总之PHP赢了,因为上面所说的这些问题并不是 这种语言固有的。PHP解释器可以变得更快,程序库可以被开发出来,PERA和PECL目前已经变得相当庞大,这还不包括各种厂商希望人们去使用他们的 API而提供的非正式的程序库。
时间在推移 十年之后,我可以感觉到历史大潮正在重演。开发人员对语言的期望在前进。如果说Perl最缺乏的是PHP里令人惊讶的灵活的“关联数组”(也就是智能哈希 表),那么PHP现在缺乏的就是lambdas和方法链(method chaining)了。同时PHP往往是用在只要20行代码就能写出一个网页的地方,而如今却是如果你不使用什么MVC框架之类的东西就会被认为没有把事 情做对。公式化的代码表明了问题所在:这种语言需要一个框架来替人们做这些事情。
退回到以前,我认为那些顽固的使用Perl来做web开发的人很傻。现在,经历了十年的PHP开发,我处在相同的位置上了。我可以在一个小时里用PHP敲 出一个不错的网站,在一两天里开发出一个优秀的网站。PHP的性能众人皆知,我可以无限的扩展它。我雇佣过的每个开发人员都会它,我集成过的每个系统里都 有一个用它写出的打包的代码库。我深陷于PHP的方便性,尽管它对于我的任务并不是一个合适的语言。
转向Ruby on Rails 最明显有潜在能力继任PHP的是Ruby on Rails。Ruby是一个新的、干净的语言,具有现代的语言特征,松散、优雅的语法(很像Python)。Rails省去了我们常见的任务,省去了集成 web应用里的公式化的做法,把PHP里三、四行的习惯写法变成了first-class语言结构。这看起来极其像我需要的PHP替代品、能让开发工作再 一次提速的东西。
我每天使用Rails,修改一个喜爱这种框架和语言的有经验的Rails专家所写的Rails应用,七个月后,我却不能断言Rails是一个正确的选择了,原因很难表达。我这篇文章的目的就是想试图把原因说清楚。
我的主要的抱怨,必须要提的,就是性能。我之前就说过这种问题不应该被当作一种语言的致命缺陷,它只是语言实现中的暂时的问题。所以我不能把这当作一个真 正的问题,尽管它是我把现在的应用移植到PHP的最主要的一个原因。我可以让Rails跑的跟PHP一样快,但那需要提供2到4倍高的硬件条件。我估计五 年内将还会这样,五年后我也许不必把程序移植到PHP。但现在,它不能满足我的要求。
第二,我讨厌Active Record。Active Record是一种模式,并不是Ruby固有的,在Rails的最新版本里是可选择的,但是对它的使用和这种模式已经深入到了Rails的DNA里了。我 之前曾解释过为什么我认为这数据库上的ORM不是个好做法,所以我不会再重复解释,但有一点我需要总结的就是你省去了手工写CRUD所获得的效能要大于 ActiveRecord做傻事所损失的效能,要花时间搞清楚它是怎么工作的,顺应框架原则,防止它做这样的事情。
第三,我十分的不信任代码自动生成。工具能帮你生成模板式的代码很有用,但你的程序了却多出了成堆的毫无用处的代码来实现这些目的,这就变的不好了。代码 生成喜欢“神奇推理”,因为生成器并不确定代码某些特别有用的特征究竟是专门写出的还是语言环境固有自带的。神奇推理是危险的。
代码生成让我想到了Ruby on Rails的一个可能是最根本的问题,就是它并不是一种语言。Ruby是一种语言。但Ruby,它在解决了PHP上的一些基本问题外,并没有解决核心问 题,那就是现代web应用需要一系列的改进:像routing,model/view分类,drop-in功能性等都是很常见的特征。Rails里有,但 这跟PHP里的Zend,Symfony 和 Code Igniter之类的MVC框架一样只是绑上去的绷带。
那么缺的是什么? 能够取代PHP的语言必须十分优秀于PHP,就如同PHP优秀于Perl一样。它必须承担起web应用的主要实现任务,就像PHP那样,你的代码的主要功 能就是输出网页 —— 一个有点激进的要求,它要不适合去做其它的事情,例如当中shell脚本语言。我希望有这样一种语言,它能够承担起我开发一个MVC式的web应用时的所 有的任务,所有功能都是核心内置的,不能仅是一个程序包。
问题是,没有这样的一种语言。有一段时间服务器端JavaScript看起来将会成为下一个重要的语言,它能统一web应用前端和后端的编程语言。但是这些JavaScript上的伟大思想总是徘徊在一些跑题的行为上,比如nodejs:事件驱动模式非常的激进和强大,能让你开发出高性能的应用程序,最大化的使用新式硬件,但这是一种开发服务器端应用程序的思路,不是web页面。并且你仍然需要去写一大堆可怕的web页面。另外一些CommonJS的成果例如ejScript开始尝试着取代PHP,但仍没有解决框架问题。
仍在等待 我不得不做出结论,PHP的替代者还不存在。Ruby on Rails很好,但并不比一个PHP之上的类似的MVC框架强多少,更别提由于Ruby自身的效率不高和ActiveRecord的ORM恶搞带来的双重 打击。Python看起来并不感兴趣于作为下一代的web语言,JavaScript的服务器端解决方案还刚刚只是个开始。
我等待下一个大目标的出现。我希望能从PHP上转走,真的。我可不想成为Perl式的古董。但不管怎样,这种语言看起来还不存在。我判断错了吗?
[英文出处]:PHP needs to die. What will replace it?
cnbeta来源:http://www.cnbeta.com/articles/124058.htm
PHP | 评论:1
| 阅读:16245
Submitted by gouki on 2010, October 9, 9:31 AM
虽然neatpic的功能不强大,我的时间也不是特别多。
但我还是准备为它建立一个QQ群,接受需求和发布版本。
目前我本地的版本还没有发布,基本上也就是实现了我在博客里说的一些新功能。
准备发布两种版本,一种是尽量用上PHP5的特性的。一种是面向过程的。(其实所谓用上php5特性的也差不多面向过程)
当然还是采用模版和楥存,也会生成缩略图,方便展示。
同时代码仍然采用开源方式发布,也没有什么授权不授权的。
不管你是商用也好非商用也好,都无所谓了。保留一个版权,留下本站一个链接就行,其他无所谓
QQ群号:4278705,加入时需要暗号:neatstudio
防止茶农进驻。。
Tags: neatpic, qq群
PHP | 评论:7
| 阅读:41760
Submitted by gouki on 2010, September 30, 2:51 AM
好象,大多时候,我们对于字符串的比较都是采用了 strtolower或者strtoupper之后,再判断是否相等。只是这样就需要转换两次。大多时候,我们是针对字符集转换的时候才会这样,比如判断参数传进来是否utf-8,这5个字符的写法,可就多了,比如UTF-8,Utf-8,utf-8等,那我们怎么办呢?strtolower?strupper?不需要啦。。
strncasecmp($a,$b,$length)就可以了。。
如果返回是0则相等,那我们怎么判断呢?
strncasecmp($str,'utf-8',5) == 0那么,传入的参数就是utf8的,是否很方便呢?
只是这些函数我们平时不太用得到,我看到这个函数的用法却是在 yii framework,他在处理事件的时候,判断前两个字符是否为 on 的时候,就是这样判断的。我也因此学到了一招。
PHP | 评论:0
| 阅读:14998
Submitted by gouki on 2010, September 26, 6:49 PM
昨天,把我的http://neatcn.com迁移到了VPS上(准备过两天,这个站也迁走),迁移过去后用Firefox访问白屏,一直不清楚是什么原因。
后来用IE访问,显示服务器500错误,心里就纳闷了,因为前两天我说过我迁移了ucapi.com,里面也有一个wordpress,那个是正常的,于是我怀疑是.htaccess文件的问题。然后把ucapi.com/wiki/目录下的.htaccess文件CP到了http://neatcn.com的根目录下,结果问题依旧(firefox显示白屏,但如果使用FireBug看,是可以看到显示500错误的。)
心里想着.htaccess文件可能有问题,因为ucapi.com下的.htaccess文件不是在根目录下,那文件里应该是带路径的。把路径去掉后,问题依旧。
然后,把.htaccess文件删除,可是问题仍然存在。
最后没办法,google一下,发现网上说的很多都是指.htaccess文件(还有人说是插件或者皮肤不兼容,我也尝试了删除所有插件和皮肤,结果还是不正常)。这个。。。我就没办法了,于是想到一个最喷血的办法。把wp-config.php备份,原文件删除,进行重装。
安装到最后一步,说是无法生成wp-config.php,让我把内容COPY到原来的wp-config.php文件中,OK,COPY完毕,结果继续安装的时候又显示500错误了,这个时候我就真的不知道做什么了。然后检查一下wp-config.php,突然发现,他与我原来的wp-config.php相比多了一点内容,那就是define("WP_DEBUG",false);,这个玩意看来是从3.0开始才开放的吧?我的博客是从2.x升级上去的,所以没有这个定义。
既然有debug功能,那就打开喽,定义WP_DEBUG为true,继续运行,这时候才发现原来我有一个文件不存在,报了fatal error,然后根据出错提示信息,从本地的wordpress程序中将缺少的文件COPY过去。如此做了大约三次,终于顺利的打开后台界面,兴冲冲的登录进去,选择更新系统,以防还有文件不存在的情况发生。
更新系统的时候,出现了好久不见的FTP用户密码框,这个在以前其实有介绍过Wordpress自动升级和plugin插件更新的问题,但这次我不想这么解决,于是我直接进入命令行,把我的目录的权限改成apache用户,就Over了。
最后,忙到凌晨2点多,http://neatcn.com终于可以正常访问。比较欣慰的在微勃上说了一下,结果被人鄙视说网站速度太慢。。唉,VPS嘛,将就点了。
Tags: wordpress, 500
PHP | 评论:6
| 阅读:33288