由于项目需要上传大文件,网上找到了开源框架Plupload
但是有时候上传的文件会不一致
在多次测验后发现是由于chunk丢失造成
增加log日志发现,如果请求是连接中断等问题,下个chunk会继续上传
到最后就算上传成功,文件也是有丢失
修复Plupload 1.5.8版本网络断开问题chunk会继续向后增加上传
修改方法xhr.onreadystatechange
if (httpStatus >= 400)
后面的else增加
else if (!xhr || !xhr.responseText || xhr.responseText == '' || xhr == '') {
console.log('xhr', xhr);
uploadNextChunk();
}
2015年5月6日星期三
2015年3月11日星期三
MySQL触发器自动更新memcache
mysql
5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for
MySQL,就能够实现memcache的自动更新。简单记录一下安装测试步骤。
安装步骤
- 安装memcached,这个步骤很简单,随处可见
- 安装mysql server 5.1RC,安装办法也很大众,不废话了
- 编译libmemcached,解压后安装即可
./configure; make; make install
- 编译Memcached Functions for
MySQL,在http://download.tangent.org/找一个最新的版本下载就是,
./configure --with-mysql=/usr/local/mysql/bin/mysql_config --libdir=/usr/local/mysql/lib/mysql/
make
make install
- 接下来有两个办法让Memcached Functions for MySQL在mysql中生效
- 在mysql的shell中执行memcached_functions_mysql源码目录下的sql/install_functions.sql,这会把memcache function作为UDF加入mysql
- 运行memcached_functions_mysql源码目录下的utils/install.pl,这是一个perl脚本,作用同上一条
测试memcache function
以下测试脚本摘自memcached_functions_mysql的源码目录,有兴趣可以试试
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2015年1月13日星期二
Mysql多个LEFT JOIN使用ORDER不能使用索引解决方案
Mysql在多个LEFT JOIN的情况下使用ORDER BY排序,就算是其中一个表的主键也仍然使用file sort排序,数据量多的话就相当的慢。
优化前语句
SELECT * FROM a LEFT JOIN b ON a.id=b.a_id ORDER a.id DESC
优化后语句
SELECT * FROM a LEFT JOIN b ON a.id=b.a_id JOIN (SELECT id FROM a ORDER BY id DESC) a_order ON a.id = a_order.id
实际工作中100W+的几个表使用LEFT JOIN要20分钟才能得到结果,语句优化后3秒。
以下是实际操作中Durpal Views的 hook_views_query_alter() 使用代码
优化前语句
SELECT * FROM a LEFT JOIN b ON a.id=b.a_id ORDER a.id DESC
优化后语句
SELECT * FROM a LEFT JOIN b ON a.id=b.a_id JOIN (SELECT id FROM a ORDER BY id DESC) a_order ON a.id = a_order.id
实际工作中100W+的几个表使用LEFT JOIN要20分钟才能得到结果,语句优化后3秒。
以下是实际操作中Durpal Views的 hook_views_query_alter() 使用代码
$views_join = new views_join();
$views_join->extra_type = 'AND';
$views_join->table = '(SELECT aid FROM activity_log ORDER BY aid DESC)';
$views_join->left_table = 'activity_log';
$views_join->left_field = 'aid';
$views_join->field = 'aid';
$views_join->type = 'INNER';
$views_join->adjusted = true;
$query->table_queue['activity_log_order']['join'] = $views_join;
$query->table_queue['activity_log_order']['alias'] = 'activity_log_order';?>
2014年12月3日星期三
一个简单测试,看穿你的人性和欲望
这个心理测验来自西方,是与人潜意识有关。我10多年前认识个朋友,从国外读书回来,给我说了个心理测验《借船过河》,她说是读心理学时老师教的。然后我拿这个测验测过无数人,都很准。这个也不是算命,但可以让你了解自己的需要,有的人死不承认,可实际上就是这样子的。我把这个图画下来了,大家可以对照看,不过要听我先讲故事,然后再开始。

一男人M要与未婚妻F相会结婚,但两人一河相隔,M必须要借船过河才能见到F,于是他开始四处找船。
这时见一个女子L刚好有船,M跟L借,L遇到M后爱上了他,就问:我爱上你了,你爱我吗?M比较诚实,说:对不起,我有未婚妻,我不能爱你。这么一来,L死活是不把船借给M,她的理由是:我爱你,你不爱我,这不公平,我不会借你的!
M很沮丧,继续找船,刚好见一位叫S的女子,就向她借船,S说:我借给你没问题,但有个条件,我很喜欢你,你是不是喜欢我无所谓,但你必须留下陪我一晚,不然我不借你。M很为难,L不借他船,S如果再不借他的话就过不去河与F相见了,据说这个地方只有这两条船。为了彼岸的未婚妻,他不得不同意了S的要求。次日,S遵守承诺把船借给了M。
见到未婚妻F后,M一直心里有事,考虑了很久,终于决定把向L和S借船的故事跟F说了。可惜,F听了非常伤心,一气之下与M分了手,她觉得M不忠,不能原谅。M失恋了,很受打击,这时他的生活里出现了位女子E,两人也开始恋爱了,但之前的故事一直让他耿耿于坏,E问M是不是有什么话要跟她说,于是,M一五一十地把他和L、S、F之间的故事讲了一遍。E听了后,说,我不会介意的,这些跟我没关系。
故事讲完了,问题来了,请你把这几个人排列个次序,标准是你认为谁最好,谁第二,谁第三,第四,第五?这个M男也算在内的。不要想太复杂,也不需要考虑大众看法,你认为谁做得好就是好。
看到这里请先选择好你的答案,其实很简单,就是用你的潜意识告诉你最想要的是什么。不知道自己要什么,这是很普遍的问题,因为什么都挺重要的,舍弃什么都不成体统,只是每个人的人生追求确实差异很大,看别人追求事业,你也羡慕也很想这样,但不知道为什么总做不到;看别人婚姻幸福,你也很想,可实现起来确实不容易,这和运气也不是太有关系,而是你需要的决定了很多。
我说两个故事吧。这故事中的两个人是很典型的,都是测过这个游戏的。一个是我以前乐队成员,贝斯手,当时他写下的是:M、F、S、E、L,演出有点演出费就赶紧寄家去,还闹过这样的笑话,赚了400块,他好意思地跟别人借一百,说凑个整。很多年后,乐队其他人都各奔东西,他留在了那行里,不过做了歌舞厅的伴奏,每天跑场很能赚钱,据说也很快结婚,有了小孩,是个很负责的丈夫,音乐就是他赚钱的工具,生活得也不错。后来我遇到过次他,一肚子不满,虽然开上了车,但理想早破灭了,没事业没爱情,就是富裕的日子。我觉得这就是他的人生轨迹,想追求的还是自己想要的东西。
另一个是天津的一位女主持人,我当时跟她没什么话聊的,就玩了下这个。她的选择是S、M、L、F、E,我告诉她这几个符号代表什么的时候,她有点不高兴,说不准,她怎么把S放第一呢?是因为她觉得S比较公平,要比L简单,F事儿太多,E太冷漠,M不错但就是太墨迹了。每个人理解问题的方式都不同,刚好这个透露了你的潜意识。很多年后,我在北京遇到了位认识她的人,说起这个女主持来,他说,那谁可惜了,早不干主持了,跟他们单位好多男的乱七八遭,后来被单位开了,嫁了个有钱人。
答案:(见下)
M代表金钱(Money)
L代表爱情(Love)
S代表性(Sex)
F代表家庭(Family)
E代表事业(Enterprise)
我看问我的朋友,其中选择E为首的占大多数,说明事业对不少来说人还是很重要的,还有距离问题,比如你选择了事业和金钱互相挨着,这很正常,这两项都是有关联的,可如果你把爱情排第一,却又把家庭排最后,那就说明,你未必会依赖婚姻这个形式,这排列组合是可以推理的。我想这个东西确实预示性很强,你要什么肯定会下意识地追求了什么。
2014年8月10日星期日
Drupal性能优化经验贴
性能问题一直以来都是Drupaler们最大的难题,在平台设计方面,可扩展性和高性能从来都是难以平衡的问题。
Drupal平台本身的优劣本文不做讨论,就Drupal的性能问题,这里列几个实战总结经验,以供参考。
1. 使用静态页面缓存(Boost模块)
静态页面是最快的,没有之一!
因此静态页面缓存是最佳选择,尽量把页面动态的部分独立处理,用ajax/iframe调用,整个页面是静态页面,部分用ajax刷新(当然用shtml也可以)。 Boost模块经过稍微调整和修改,可以设置某些Roles(比如一般认证用户)也读取静态缓存(apache/nginx的rewrite),并且可以很好的工作在Apache和Nginx上面,并使某些角色,比如管理员,不读取静态页面。对于一个普通网站,90%以上的都属于普通认证用户和匿名用户,因此,经过这样修改可以大大提高性能。 具体如何使用Boost模块已经如何让登录用户也使用Boost模块,可以参考这篇文章,让Drupal/Boost模块发挥到极致。
Boost 模块地址 http://drupal.org/project/boost Ajax建议使用Drupal的高效Ajax Callback模块 High-performance JavaScript callback handler
这里给出了nginx的boost设置文件,仅供参考。
2. opcode
Drupal 需要load相当多的PHP文件,所以opcode是必须的,MUST!
实践证明eAccelerator比APC和xCache好一点,注意:APC的某个版本在NFS环境下有bug,不能正确缓存,所以建议使用eAccelerator。
3. Memcache memcache是LAMP平台居家必备的缓存服务器
最好多个memcache集群使用,Memcache可以使用Drupal的Memcache模块,支持多个集成。
注意:当Memcache不在本机,那么需要占用网络带宽,并且Drupal的缓存数据比较大,比如theme信息,node-type信息等,再每页请求都要加载,这样读取cache的流量就非常大。
比如,每次读取cache 500K,那么1千次访问就需要占用流量500M,这个流量相当不小。建议把这部分不经常修改的cache保存在本机某个cache目录下面,可以把cache目录mount到内存上面,这样会大大提高缓存的效率。 memcache模块的主页 http://drupal.org/project/memcache 此外,如果一台主机上有多个memcache实例,参考了网上的一片文章,http://www.sunchis.com/html/db/memcached/2011/0909/361.html
自定义启动和停止的脚本,不必再kill和逐个启动memcache。
4. 使用CDN
要想使页面加载较快,必须使用CDN。(原理请查阅相关文档)
CDN Drupal有两个模块 Parallel 和 CDN,Parallel比较简单,推荐使用。但是Parallel目前已经并入CDN模块,所以还是得要下载CDN模块 http://drupal.org/project/cdn
5. 数据库结构合理、分表、分库
首先告诫一点:不要使用content-profile模块。
该模块把profile信息存储成一种你node-type,问题是这样会导致node表比较大,但是profile的node除了uid之外其他都是无用信息。加入一个网站有上百万、千万用户,再有很多文章(node),这样node表将会非常大,尤其是一个user有很多profile的node,比如5个,这样node表就会有5倍的user数量的node。导致查询node、user都没法处理,views之类的工具更是没法用,因为views生成的SQL将会非常慢。 把user相关表分出去,到独立的数据库,这样可以方便其他站点,比如子站,共享用户信息。 对于大型网站,不推荐使用太多第三方模块,因为大多模块都是基于node,如果跟node没有关系的独立数据,建议自己写模块来读写,这样方便数据的拆分和优化,又减轻了node表的压力。所以再使用模块前,必须了解模块的工作机制。
6. 服务器
Web服务器建议,推荐使用HAProxy/varnish作为前端代理,Nginx作为Web服务器,php-fpm作为FastCGI处理PHP程序,当然也可以使用Apache作为PHP后端处理,但是不推荐使用apache作为Web节点服务器。 Drupal有一个varnish相关的模块 http://drupal.org/project/varnish
7. 使用Drupal的Pressflow版本
Drupal本身没有太多考虑性能的优化,Pressflow是一个专门针对Drupal的优化版本,包括支持Mysql Master-Slave等等。对于大型网站,选择Pressflow是必须的。 http://pressflow.org/
8. 其他相关模块
最后一提的是关于性能分析
PHP中debug和性能分析推荐使用xdebug和xhprof,两个模块都可以详细都列出函数执行都步骤以及时间,相比较而言xhprof比较轻量级一下,可以下载drupal的xhprof模块来配合使用,效果更加~
相关链接:
Drupal性能优化相关模块列表
利用缓存提高Drupal扩展性
实战Nginx:取代Apache的高性能Web服务器 – 张宴
Drupal平台本身的优劣本文不做讨论,就Drupal的性能问题,这里列几个实战总结经验,以供参考。
1. 使用静态页面缓存(Boost模块)
静态页面是最快的,没有之一!
因此静态页面缓存是最佳选择,尽量把页面动态的部分独立处理,用ajax/iframe调用,整个页面是静态页面,部分用ajax刷新(当然用shtml也可以)。 Boost模块经过稍微调整和修改,可以设置某些Roles(比如一般认证用户)也读取静态缓存(apache/nginx的rewrite),并且可以很好的工作在Apache和Nginx上面,并使某些角色,比如管理员,不读取静态页面。对于一个普通网站,90%以上的都属于普通认证用户和匿名用户,因此,经过这样修改可以大大提高性能。 具体如何使用Boost模块已经如何让登录用户也使用Boost模块,可以参考这篇文章,让Drupal/Boost模块发挥到极致。
Boost 模块地址 http://drupal.org/project/boost Ajax建议使用Drupal的高效Ajax Callback模块 High-performance JavaScript callback handler
这里给出了nginx的boost设置文件,仅供参考。
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | ###Nginx-BOOST set $boost ""; set $boost_query "_"; |
Drupal 需要load相当多的PHP文件,所以opcode是必须的,MUST!
实践证明eAccelerator比APC和xCache好一点,注意:APC的某个版本在NFS环境下有bug,不能正确缓存,所以建议使用eAccelerator。
3. Memcache memcache是LAMP平台居家必备的缓存服务器
最好多个memcache集群使用,Memcache可以使用Drupal的Memcache模块,支持多个集成。
注意:当Memcache不在本机,那么需要占用网络带宽,并且Drupal的缓存数据比较大,比如theme信息,node-type信息等,再每页请求都要加载,这样读取cache的流量就非常大。
比如,每次读取cache 500K,那么1千次访问就需要占用流量500M,这个流量相当不小。建议把这部分不经常修改的cache保存在本机某个cache目录下面,可以把cache目录mount到内存上面,这样会大大提高缓存的效率。 memcache模块的主页 http://drupal.org/project/memcache 此外,如果一台主机上有多个memcache实例,参考了网上的一片文章,http://www.sunchis.com/html/db/memcached/2011/0909/361.html
自定义启动和停止的脚本,不必再kill和逐个启动memcache。
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #!/bin/sh # # Startup script for the server of memcached # # processname: memcached # pidfile: /etc/memcached/memcached.pid # logfile: /etc/memcached/memcached_log.txt # memcached_home: /etc/memcached # chkconfig: 35 21 79 # description: Start and stop memcached Service |
要想使页面加载较快,必须使用CDN。(原理请查阅相关文档)
CDN Drupal有两个模块 Parallel 和 CDN,Parallel比较简单,推荐使用。但是Parallel目前已经并入CDN模块,所以还是得要下载CDN模块 http://drupal.org/project/cdn
5. 数据库结构合理、分表、分库
首先告诫一点:不要使用content-profile模块。
该模块把profile信息存储成一种你node-type,问题是这样会导致node表比较大,但是profile的node除了uid之外其他都是无用信息。加入一个网站有上百万、千万用户,再有很多文章(node),这样node表将会非常大,尤其是一个user有很多profile的node,比如5个,这样node表就会有5倍的user数量的node。导致查询node、user都没法处理,views之类的工具更是没法用,因为views生成的SQL将会非常慢。 把user相关表分出去,到独立的数据库,这样可以方便其他站点,比如子站,共享用户信息。 对于大型网站,不推荐使用太多第三方模块,因为大多模块都是基于node,如果跟node没有关系的独立数据,建议自己写模块来读写,这样方便数据的拆分和优化,又减轻了node表的压力。所以再使用模块前,必须了解模块的工作机制。
6. 服务器
Web服务器建议,推荐使用HAProxy/varnish作为前端代理,Nginx作为Web服务器,php-fpm作为FastCGI处理PHP程序,当然也可以使用Apache作为PHP后端处理,但是不推荐使用apache作为Web节点服务器。 Drupal有一个varnish相关的模块 http://drupal.org/project/varnish
7. 使用Drupal的Pressflow版本
Drupal本身没有太多考虑性能的优化,Pressflow是一个专门针对Drupal的优化版本,包括支持Mysql Master-Slave等等。对于大型网站,选择Pressflow是必须的。 http://pressflow.org/
8. 其他相关模块
模块
|
版本
|
缓存类型
|
效率
|
匿名
|
更新状态
|
---|---|---|---|---|---|
1. | 5.x, 6.x | 对匿名用户直接调用文件缓存 | 非常高 | 匿名用户 | 6.xyes 5.xno |
2. | 5.x, 6.x | 文件 | 中等 | 全部 | Yes |
3. | 5.x-beta, 6.x-rc, 7.x-beta | 数据库、文件、PHP opcode和内存 | 根据设置从中等到非常高 | 根据设置 | Yes |
4. | 6.x, 7.x | 服务器 | 高 | 全部 | Yes |
5. | 5.x, 6.x | 数据库 | 中等 | 匿名用户 | Yes |
6. | 6.x | 文件 | 中等 | 全部 | Yes |
7. | 5.x, 6.x | 内存 | 高 | 大部分匿名用户 | Yes |
8. | 5.x-dev | 数据库 | 中等 | 全部 | Yes |
9. | 6.x | 数据库 | 中等 | 全部 | Yes |
10. | 6.x | 数据库 | 中等 | 全部 | 更新较少 |
11. | 6.x | 根据设置 | 中等 | 全部 | 更新较少 |
12. | 5.x, 6.x-dev | 数据库 | 中等 | 大部分注册用户 | Yes |
13. | 6.x-rc | 数据库、文件、PHP opcode和内存 | 根据设置从中等到非常高 | 全部匿名用户,大多数注册用户 | Yes |
14. | 6.x-dev | 数据库 | 中等 | 全部 | 较少更新 |
15.fastpath_fscache | 4.7.x-dev, 5.x-rc, 6.x-dev | 对匿名用户调用文件缓存(避开db) | High | 匿名用户 | Yes |
16.Varnish | 6.x-dev, 7.x-dev | Reverse proxy(虚拟内存) | 非常高 | 全部注册用户,大部分匿名用户 | 测试阶段 |
17. | 6.x, 7.x | Javascript Callback | 中等 | 全部 | Yes |
18. | 6.x-dev, 7.x-dev | 全文检索 | 高 | 主要对于搜索页面的提高 | Yes |
PHP中debug和性能分析推荐使用xdebug和xhprof,两个模块都可以详细都列出函数执行都步骤以及时间,相比较而言xhprof比较轻量级一下,可以下载drupal的xhprof模块来配合使用,效果更加~
相关链接:
Drupal性能优化相关模块列表
利用缓存提高Drupal扩展性
实战Nginx:取代Apache的高性能Web服务器 – 张宴
订阅:
博文 (Atom)
上海松善实业有限公司
上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。 主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...
-
上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。 主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...
-
Step 1: 在您的 home 底下的 .forward 檔中加入: (forward又是啥東東?) "|/usr/local/bin/procmail",以後寄給您的郵件將會先交給 procmail 程式處理。 Step 2: 在你的home底下編...
-
function run() { $j = 1; for ($i = 1; $i <= 50000; $i++) { $init = rou_init(); $row = array_rand($init, 1); ...