mysql 数据处理(杂谈)

来源:互联网 发布:java反转单链表递归 编辑:程序博客网 时间:2024/05/17 22:31

1.mysql数据

+数据思考

数据:状态 类型 格式

验证:参数 返回 缓存

存取:事务 索引 队列


/*model
 * 属性:
 * const  数据状态
 * public 变量声明
 * 
 * 方法:
 * 1.set/get
 * 
 * 2.curd:
 * 参数验证
 * 缓存验证
 * delete update insert 事务 or队列
 * 返回验证(返回...


+数据类型

//data type
$str = "10";
$num = (int)$str;
if ($str === 10) echo "String";
if ($num === 10) echo "Integer";//right

//diff : intval or int

//intval
intval("A"); //0; 
intval(12.3223); //12; 
intval("1123Asdfka3243"); //1123;

//int()
$a=0.13;
$b=(int)$a; //$b=0;

$a=0.99;
$b=(int)$a; //$b=0;

$a=1.01;
$b=(int)$a; //$b=1;

$a=1.99;
$b=(int)$a; //$b=1; 

$str = 'test10';
echo (int)$str;  //0
echo intval($str);  //0

/*
“10” - > 10
“10.5” - > 10
“10,5” - > 10
“10” - > 10
“10” - > 10
“10test” - > 10
“test10” - > 0 
*/
?> 

+事务处理,自动提交关闭后,虽说没执行回滚了,但是自增ID是跳过的了,

$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
$time = date('Y-m-d H:i:s',time());

//mysql_query("SET AUTOCOMMIT=0"); 
$sql = "INSERT INTO `test`.`test`
            (`id`,
             `name`,
             `create_time`)
VALUES (null,
        '123',
        '{$time}');";

$res = mysql_query($sql);

if(1){
mysql_query("ROLLBACK");
echo '提交成功。';
}
//OR 
if(1>0){
mysql_query("COMMIT");
echo '提交成功。';
}

mysql_query("END"); //事务处理完时别忘记mysql_query("SET AUTOCOMMIT=1");自动提交


2.json or serialize


error_reporting(0);
//$user = 'user';
//echo serialize($user);
echo serialize(null).PHP_EOL;  //N;
echo serialize(''); // s:0:"";
echo serialize(array('key'=>'val'));//a:1:{s:3:"key";s:3:"val";}
echo serialize(array('keys'=>array(0,1,2)));//a:1:{s:4:"keys";a:3:{i:0;i:0;i:1;i:1;i:2;i:2;}}
echo serialize($user = 'user');//s:4:"user";
echo serialize($users);//N;
echo serialize(1.234);//d:1.234;
echo serialize(12);//i:12;
echo serialize(true);//b:1;
echo serialize(false);//b:0;

echo '===================================<br>';

echo json_encode(null).PHP_EOL;  //null 
echo json_encode(''); //"";
echo json_encode(array('key'=>'val'));//{"key":"val"}
echo json_encode(array('keys'=>array(0,1,2)));//{"keys":[0,1,2]}

echo json_encode($user = 'user');//"user";
echo json_encode($users);//null;
echo json_encode(1.234);//1.234;
echo json_encode(12);//12;
echo json_encode(true);//true;
echo json_encode(false);//false;
echo json_encode(array('keys'=>array(0,1,2),'key2'=>array('d','w','o')));//{"keys":[0,1,2],"key2":["d","w","o"]}
/*
json fast==> simple([] : {} ,) list(有序)

json 比 serialize快了一个级别

json_encode :0.90479207038879
json_decode :1.753741979599

serialize :1.3566699028015
unserialize :1.3003630638123

//
数据分类:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),又叫做数组(array)或列表(List),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(Name/value),


serialize有更加详细的类型区分,而json只有四种类型,
1) 并列的数据之间用逗号(", ")分隔。
2) 映射用冒号(": ")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。

数组表示有序数据的集合,而对象表示无序数据的集合,数组的数据没有名称,对象的数据有名称
json无法处理对象方法等数据。目前JSON只支持UTF-8编码的数据。
 

+session

//$user = 'user';
//echo serialize($user);
error_reporting(0);
$session_file = 'ok|s:2:"kk";ok22|s:3:"kkk";'; // key | unserialize($val)
$arr = explode(';', trim($session_file,';'));
echo '<pre>';
$realKey = array();
$realVal = array();
foreach($arr as $k=>$v){

   $realArr = explode('|', $v);

   foreach($realArr as $key=>$val){
     
       if ($key==0){
          array_push($realKey, $val);
       }else{
 
          array_push($realVal,unserialize(trim($val)));
       }
   }

  $merge = array_combine($realKey, $realVal);
}

print_R($merge);


3.缓存

+redis:bgrewriteaof  快照 主从 单点等问题的方法:

  1.Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。

  2.如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

  3.为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。

  4.尽量避免在压力较大的主库上增加从库

  5.为了Master的稳定性,主从复制不要用图状结构,用单向链表结构更稳定,即主从关系为:Master<--Slave1<--Slave2<--Slave3.......,这样的结构也方便解决单点故障问题,实现Slave对Master的替换,也即,如果Master挂了,可以立马启用Slave1做Master,其他不变。


+memcache 高级

    /*
                getExtendedStats($key)
                getExtendedStats('cachedump','$key->key',0)
            */
            $memcache = memcache_connect('127.0.0.1', 11211);
            $memcache->set('items',1,0,3600);
            $ar = array();

            echo '<pre>';
            $items = $memcache->getExtendedStats('items');    

            $items = $items["127.0.0.1:11211"]['items'];


            foreach ($items as $key=>$values){
                $number=$key;

                $str = $memcache->getExtendedStats('cachedump',$number,0);
                $line=$str["127.0.0.1:11211"];
                var_dump($line);


                if (is_array($line)&&count($line)>0){
                        foreach ($line as $key=>$value){
                            if(substr($key,0,2)=='it'){
                                $ar[] = $memcache->get($key);
                            }
                        }
                }
            }
                      print_r($ar);

/*
stats 功能:

检查Memcache服务器状态:
stats\r\n
在这里可以看到memcache的获取次数,当前连接数,写入次数,已经命中率等;

pid : 进程id
uptime :总的运行时间,秒数
time : 当前时间
version : 版本号
……
curr_items : 当前缓存中的KeyValue数量
total_items : 曾经总共经过缓存的KeyValue数量
bytes : 所有的缓存使用的内存量
curr_connections 当前连接数
….
cmd_get : 总获取次数
cmd_set : 总的写入次数
get_hits : 总的命中次数
miss_hits :  获取失败次数
…..
bytes_read : 总共读取的流量字节数
bytes_written : 总的写入流量字节
limit_maxbytes : 最大允许使用的内存量,字节

7、高级缓存细节查看方法:
stats reset
清空统计数据

stats malloc
显示内存分配数据

stats cachedump slab_id limit_num
显示某个slab中的前limit_num个key列表,显示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本显示的是  访问时间(timestamp)
1.2.4以上版本,包括1.2.4显示 过期时间(timestamp)
如果是永不过期的key,expire_time会显示为服务器启动的时间

stats cachedump 7 2
ITEM copy_test1 [250 b; 1207795754 s]
ITEM copy_test [248 b; 1207793649 s]

stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等

stats items
显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)

stats detail [on|off|dump]
设置或者显示详细操作记录

参数为on,打开详细操作记录
参数为off,关闭详细操作记录
参数为dump,显示详细操作记录(每一个键值get、set、hit、del的次数)


+elasticsearch   原理:不用建表,直接写入不同的文件

install + pluign + use


+baidu api

//http://developer.baidu.com/console#app/6583653
//http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding



0 0
原创粉丝点击