2015年5月6日星期三

修复Plupload 1.5.8版本网络断开问题

由于项目需要上传大文件,网上找到了开源框架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年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的源码目录,有兴趣可以试试
 1 drop table if exists urls;
 2 create table urls (
 3   id int(3not null,
 4   url varchar(64not null default '',
 5   primary key (id)
 6   );
 7 select memc_servers_set('localhost:11211');
 8 select memc_set('urls:sequence'0);
 9 DELIMITER
10 DROP TRIGGER IF EXISTS url_mem_insert;
11 CREATE TRIGGER url_mem_insert
12 BEFORE INSERT ON urls
13 FOR EACH ROW BEGIN
14     SET NEW.id= memc_increment('urls:sequence');
15     SET @mm= memc_set(concat('urls:',NEW.id), NEW.url);
16 END
17 DELIMITER ;
18 insert into urls (url) values ('http://google.com');
19 insert into urls (url) values ('http://www.ooso.net/index.php');
20 insert into urls (url) values ('http://www.ooso.net/');
21 insert into urls (url) values ('http://slashdot.org');
22 insert into urls (url) values ('http://mysql.com');
23 select * from urls;
24 select memc_get('urls:1');
25 select memc_get('urls:2');
26 select memc_get('urls:3');
27 select memc_get('urls:4');
28 select memc_get('urls:5');

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() 使用代码

    $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';?>

上海松善实业有限公司

    上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。     主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...