技术心得

mysql分表

论坛:

一,先说一下为什么要分表
当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。

根据个人经验,mysql执行一个sql的过程如下:
1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果。在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,sql的执行时间。其实这二个是一回事,等待的同时,肯定有sql在执行。所以我们要缩短sql的执行时间。

mysql中有一种机制是表锁定和行锁定,为什么要出现这种机制,是为了保证数据的完整性,我举个例子来说吧,如果有二个sql都要修改同一张表的同一条数据,这个时候怎么办呢,是不是二个sql都可以同时修改这条数据呢?很显然mysql对这种情况的处理是,一种是表锁定(myisam存储引擎),一个是行锁定(innodb存储引擎)。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。如果数据太多,一次执行的时间太长,等待的时间就越长,这也是我们为什么要分表的原因。

二,分表

mysql定时任务执行代码

论坛:

查看event是否开启

show variables like '%sche%';
将事件计划开启

set global event_scheduler =1;
创建存储过程test

CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;
创建event e_test

create event if not exists e_test
on schedule every 30 second
on completion preserve
do call test();
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.

关闭事件任务

alter event e_test ON
COMPLETION PRESERVE DISABLE;
开户事件任务

alter event e_test ON
COMPLETION PRESERVE ENABLE;

php时间戳处理

论坛:

 $t    =   time();
 $t1   =   mktime(0,0,0,date("m",$t),date("d",$t),date("Y",$t));
 $t2   =   mktime(0,0,0,date("m",$t),1,date("Y",$t));
 $t3   =   mktime(0,0,0,date("m",$t)-1,1,date("Y",$t));
 $t4   =   mktime(0,0,0,1,1,date("Y",$t));
 $e1   =   mktime(23,59,59,date("m",$t),date("d",$t),date("Y",$t));
 $e2   =   mktime(23,59,59,date("m",$t),date("t"),date("Y",$t));
 $e3   =   mktime(23,59,59,date("m",$t)-1,date("t",$t3),date("Y",$t));
 $e4   =   mktime(23,59,59,12,31,date("Y",$t));
 //测试
 echo   date("当前   Y-m-d   H:i:s",$t)."   $t
";

HipHop:facebook优化php的利器

论坛:

HipHop将PHP代码转换为高度优化的C++代码,然后再用g++编译器编译。它可以保持语义等效地执行源代码,但为了提高性能,牺牲了一些很少用到的特性,比如eval()。
HipHop开发中的主要困难在于,在PHP和C++这两种很不一样的语言之间怎么实现转换。虽然PHP也可以写一些很巧妙的动态特性,但是大多数PHP代码还是非常简单的。if (...) {...} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。HipHop生成的代码尽可能地使用函数和变量的静态绑定。同时,还使用类型推演来选出变量最可能对应的某个类型,从而节省内存。

页面

Subscribe to RSS - 技术心得