分类目录归档:图片/文字

cornerstone2.0永久试用的方法

open  ~/Library/Preferences/ByHost/.GlobalPreferences.6F1617DF-DDD5-5F2D-ACA0-F7F3EE5F7B41.plist, 或者是.GlobalPreferences.*.plist类似格式的文件。

打开之后,删除com.zennaware.Cornerstone:2.0这条记录即可。

重新打开cornerstone,就又可以重新试用15天了

安装配置Varnish3.0手记

在内网的vps上安装Varnish的最新版3.0来用做测试

Varnish有centos下的rpm和ubuntu下的deb二进制包下载,但我选择的是源码编译安装

先下载 wget http://repo.varnish-cache.org/source/varnish-3.0.0.tar.gz

分分享一个Varnish老版本的中文手册,比起看英文原版的省事的多。

tar -xzvf varnish-3.0.0.tar.gz

解压varnish进行编译安装

cd varnish-3.0.3

./autogen.sh

./configure

make

make install

安装成功后

varnish -V 查看版本,看是否安装成功

测试varnish

先编辑配置文件

vim /user/local/varnish/etc/varnish/default.vcl

backend default {
.host = “192.168.1.154”;
.port = “80”;
}

表示,通过varnish访问192.168.1.154的80端口

varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,50m -T 127.0.0.1:200 -a 0.0.0.0:80

启动varnishd服务,端口号绑定80   设最大内存50m  (VPS内存小,没办法,将就着做试验)

现在可以打开varnish了

http://192.168.1.153    (开启varnish的端口号)

戴图显示,nginx 为154上运行的web服务器,出现了varnish字样,表示缓存架设成功,已正常工作了。

29号回南昌过年了,拍了些照片做纪念

来上海三个多月了,一直在嘉定就没怎么出过门,前二天去买好了回南昌的车票,运气还算不错,竟然买到了动车票。5个多小时就可以到南昌了。今天是回家过年的最后一个周末,下周这个时候就要准备回家了,再加上今天天气还不错,在租的房子附近转了转,拍了一些照片。

今天在mac ox上把android开发环境配置好了

android sdk官方站被墙了,还好找到了一个估计是appspot搭的代理站

http://androidappdocs-staging.appspot.com/sdk/index.html

eclipse还是比较好下载的,安装及配置的方法与在windows上相同!

第一个练手项目,准备开发一个android2.1下的用于显示黄金、白银、美指等数据的小APP。数据源初步打算用php从和讯或cngold等比较及时的站点采集得到,然后封装成接口供app调用!

博客更新了主题,启用了反垃圾评论插件

主题用的是Lightword最新版,修改了一下css,让它显示中文更好,默认字体改为微软雅黑。

另博客里的垃圾评论太多了,以前一直不愿整理,后来才知道wp自带了一个非常棒的反垃圾评论插件Akismet,只是没启用而以,今天也把它打开了,500多个评论99%拉到了垃圾评论里面,确实不错!

之前wp的自动升功能一直不好使,同样也是今天才发现wp的文件所有者是root,用ftp的方式根本改不了wp的文件,chown了一下,就ok了.

另诚招独立博客友情链接!

windows下安装mongodb及php驱动

mongodb是nosql的典型了,采用是json类似的存储格式

mongodb官网下载windows平台下的服务端: http://www.mongodb.org/downloads

mongodb的php驱动:http://github.com/mongodb/mongo-php-driver/downloads

mongodb下载后,解压到D盘,最终地址是:D:\mongodb\bin

php驱动 php_mongo.dll 解压至php的ext文件夹下,然后修改php.ini,添加 extension=php_mongo.dll

新建数据库存放文件夹  D:\mongodb\db

mongodb的启动:

在命令行输入  D:\mongodb\bin\mo\mongod –dbpath D:\mongodb\db

到这里,mongodb已启动,打开http://127.0.0.1:28017/ 可以看到mongodb运行情况

为了方便以后每次不必启动mongod,可以把mongod注册成windows服务

mongodb php使用方法:

3 用PHP操作Mongondb


简单列子 //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017,如果端口是27017,端口可以省略
$m = new Mongo();

// 选择comedy数据库,如果以前没该数据库会自动创建,也可以用
$db = $m->comedy;

//选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用
$collection = $db->collection;
$db->selectCollection("collection");

/* —– 添加一个元素 —–*/
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);     //将$obj 添加到$collection 集合中

/* —– 添加另一个元素 —–*/
$obj = array(
"title" => "XKCD",
"online" => true
);
$collection->insert($obj);

$cursor = $collection->find();

//遍历所有集合中的文档
foreach ($cursor as $obj) {
echo $obj["title"] . "\n";
}   

//断开MongoDB连接
$m->close();

3.2 常用函数

		$query = array( "i" => 71 );    
$cursor = $collection->find( $query );      // 在$collectio集合中查找满足$query的文档    
 
while( $cursor->hasNext() ) {    
var_dump( $cursor->getNext() );    
}    
 
$collection -> findOne();            //返回$collection集合中第一个文档    
 
$collection -> count();              //返回$collection集合中文档的数量    
$coll->ensureIndex( array( "i" => 1 ) );  // 为i “这一列”加索引 降序排列    
$coll->ensureIndex( array( "i" => -1, "j" => 1 ) );  // 为i “这一列”加索引 降序排列 j升序

3.3 查询时,每个Object插入时都会自动生成一个独特的_id,它相当于RDBMS中的主键,用于查询时非常方便
如:

		<?php    
 
$person = array("name" => "joe");    
 
$people->insert($person);    
 
$joe = $people->findOne(array("_id" => $person['_id']));    
 
?>

昨天mysql生成了100w条文章数据(2G数据)做测试用

昨天写了个php程序,给mysql插入随机的文章数据,仿照真实文章,中文数据,主要是测试在100w级数量时查询上的优化及测试mysql内置的全文检索与其它类似全文检索引擎的差距等。总数据量:article 101w左右  user表10w左右,总计占用硬盘2G左右

今天开始测试在海量数据查询时的优化手段

  1. 测试添加索引对数据查询的影响:
    sql语句:select * from article as article order by time limit 10;
    没有对time字段建立索引时查询所花时间:31.237657s
    新建time字段的索引,花掉近二分钟,建立了111298条索引,没有建立完phpmyadmin就timeout了。
    建立time索引后,同样的sql语句执行只花了:0.380957s,不过time索引没有建完,但是时间相差不大;
    总结:在关键字段的索引上,建与不建速度相差近100倍!
     
  2. 测试limit在不同的基数上的影响:
    sql语句:select * from article as article order by id limit  0,10
    当limit的基数为0时【limit  0,10】,执行时间:0.001557s
    当limit的基数为20000时【limit  20000,10】,,执行时间:0.572288s
    当limit的基数为100000时,执行时间:2.793380s
    当limit的基数为50W 时,执行时间:14.444422s
    当limit的基数为100W时,执行时间:28.270054s
    总结:在海量数据中要想查找比较靠后的数据时,要注意limit的基数,因为随着数据量的加大,查找时间继续增长!在取比较后面的数据时,可以通过desc方式把数据反向查找,以减少对前段数据的扫描,让limit的基数越小越好!
     
  3. 测试field为*或是id对查询速度的影响:
    sql语句:select id from article as article order by id limit 100000,10
    为了数据更真实,所以通过limit让sql执行时间长些,以便更容易看出区别
    当field为id时,执行时间:2.617519s
    当field为*时,执行时间:2.867721s
    总结:由数量可见,二者在sql执行时间上相差并不大,但是限定field可以大幅度的减少内存开支
     
  4. 测试limit限定结果与between限定结果上的区别:
    当用limit          select * from article as article order by id limit 1000000,10      [31.163212s]
    当用between  select * from article as article where id between 1000000 and 1000010 order by id       [0.001433s]
    总结:between 限定上比limit快太多了,所以当在海量数据访问时,建议用between或是where把limit替换掉,但是between也有缺陷,如果id中间有断行或是中间部分id不读取的话,总读取的数量会少于预计数量!
     
  5. 测试left join对读取数据的影响
    user表,数据为100000条
    select id from article as article order by id limit 500000      [14.980397s]
    select article.id from article as article left join user as user on user.uid=article.uid order by article.id,user.username limit 500000      [60.488099s]
    总结:当数据量比较大时,用left join做连接是非常慢的,速度是查单表的4倍多,所以如果在大数据量的情况下,如果要实现刚实现用户表与文章表的连表功能,还是把全部的会员数据预先存入memcache等内存缓存中,10万条用户数据也不过5m不到,用户更新资料或登陆时,把用户的数据更新入memcache的指定用户中就ok了。这样速度就快了!


 

最后附上一截图

ssss.jpg