注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

讲给自己听的故事

~~~写给未来的片言只语~~~

 
 
 

日志

 
 

Cassandra和phpCassa安装及测试笔记  

2011-08-02 18:52:15|  分类: 笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Cassandra和phpCassa安装及测试笔记 - kiko - 讲给自己听的故事

 

Cassandra的安装
安装包
apache-cassandra-0.8.2-bin.tar.gz,目前最新,安装环境需要 JDK>=1.6,而且PHP>=5.2。

另外,如果使用虚拟机的,要把虚拟机的内存调成2GB以上。
Cassandra启动了就立刻吃256MB内存,再加上原来的系统可能小号的比较厉害,内存少了可能启动有问题。
安装
  * sudo mkdir -p /var/log/cassandra
  * sudo chown -R `whoami` /var/log/cassandra
  * sudo mkdir -p /var/lib/cassandra
  * sudo chown -R `whoami` /var/lib/cassandra
将解压缩包存放在一处即可,后在/etc/bashrc中加入bin目录,用以方便启动,格式如下:
PATH=$PATH:/usr/local/cassandra/bin

配置文件位置
/usr/local/cassandra/conf/cassandra.yaml


启动关闭cassandra
#启动
bin/cassandra -f
启动到最后会出现“ Listening for thrift clients...”的提示,把窗口缩小到任务栏就可以了

若启动出错,可将mx4j-tools.jar包copy至/usr/local/cassandra/lib中。
若执行 bin/cassandra-cli --host localhost 出现连接拒绝,可修改cassandra.yaml
将rpc_address: localhost
改为rpc_address: 0.0.0.0

#关闭
pgrep -u `whoami` -f cassandra | xargs kill -9
杀进程,linux极度没人性,安装麻烦卸载麻烦连结束进度都这么麻烦

登陆
bin/cassandra-cli -h localhost -port 9160
或者直接bin/cassandra-cli进去之后在使用connect命令连接数据节点

命令行
cassandra> ?
List of all CLI commands:
                                                                 Same as help.
help                                                          Display this help.
connect <hostname>/<port>                             Connect to thrift service.
describe keyspace <keyspacename>                              Describe keyspace.
exit                                                                   Exit CLI.
quit                                                                   Exit CLI.
show config file                                Display contents of config file.
show cluster name                                          Display cluster name.
show keyspaces                                           Show list of keyspaces.
show api version                                        Show server API version.
get <ksp>.<cf>['<key>']                                  Get a slice of columns.
get <ksp>.<cf>['<key>']['<super>']                   Get a slice of sub columns.
get <ksp>.<cf>['<key>']['<col>']                             Get a column value.
get <ksp>.<cf>['<key>']['<super>']['<col>']              Get a sub column value.
set <ksp>.<cf>['<key>']['<col>'] = '<value>'                       Set a column.
set <ksp>.<cf>['<key>']['<super>']['<col>'] = '<value>'        Set a sub column.
del <ksp>.<cf>['<key>']                                           Delete record.
del <ksp>.<cf>['<key>']['<col>']                                  Delete column.
del <ksp>.<cf>['<key>']['<super>']['<col>']                   Delete sub column.
count <ksp>.<cf>['<key>']                               Count columns in record.
count <ksp>.<cf>['<key>']['<super>']            Count columns in a super column.

数据模型
  set Keyspace1.Standard2['jsmith']['first'] = 'John'
       \            \         \        \          \
        \            \         \_ key   \          \_ value
         \            \                  \_ column
          \_ keyspace  \_ column family

phpCassa的安装
首先下载
phpCassa 0.8,解压缩到apache的根目录下,默认是/var/www/html,然后重命名为phpcassa
***注意,这里和网上很多文章介绍的方法不一样,phpcassa 0.8和0.7版在语法上和调用上有不同的地方,我也在这里耗费了好长时间。

在建好的phpcassa目录下进入phpcassa/thrift/ext/thrift_protocol,然后执行下面的命令:
# phpize
# ./configure
# make
# sudo make install
然后把/etc/php.ini文件改一下,添加一行
extension=thrift_protocal.so
重启一下httpd
#apachectl restart
设置完成

测试程序
先在命令行状态下建立好一个keyspace和一个colume,在访问网页
index.php
<?php
  require_once('phpcassa/connection.php');  //此处是接口引用
  require_once('phpcassa/columnfamily.php');
try {
/*  
//多节点
    $servers[0] = array('host' => '192.168.1.100', 'port' => 9160);
    $servers[1] = array('host' => '192.168.1.134', 'port' => 9160);
    $servers[2] = array('host' => '192.168.1.144', 'port' => 9160);
    $server_array=array($servers[0],$servers[1],$servers[2]);
    $pool = new ConnectionPool('myspace', $servers_array);
*/
    $pool = new ConnectionPool('myspace', array('192.168.1.100')); //单节点
    $column_family = new ColumnFamily($pool, 'Users');
    $now1=time(); $seed=10000; //测试次数
    
    for ($i=1;$i<=$seed;$i++){
      $name='test'.(string)$i;
      $email='test'.(string)$i."@abc.com";
      $pw='password'.(string)$i;
      $column_family->insert($name, array('email' => $email, 'password' =>$pw));
//    echo "$i is done.<br>";
          }

    for ($i=1;$i<=$seed;$i++){
      $name='test'.(string)$i;
      $rs = $column_family->get($name);
//    echo "test$i is "; print_r($rs); echo "<br>";
          }

    $now2=time();
    $now3=$now2-$now1;
    echo "time1=$now1 //// time2=$now2 /// $now3";
} catch (Exception $e) {
    echo 'Exception: ' . $e->getMessage().'<br>';
      }
?>

测试结果
在单节点,机器配置为(CPU_Intel_E4160、DDR2_4GB、WinXP_SP2、GoogleChrome_Dev14),虚拟机(VirtualBox_4、CentOS_5.6、Apache_2.2、PHP_5.2),用主机访问虚拟机的环境下测试:

* 顺序插入N条数据耗时:
1000条,2s、2s、1s,平均秒插600;
5000条,8s、8s、9s,平均秒插600;
10k条,三次时间是17s、17s、18s,平均秒插588条数据。

* 顺序读取N条数据时:
1000条,2s、3s、3s,平均秒读375;
5000条,15s、13s、13s,平均秒插365.8;
10k条,三次时间是28s、26s、26s,平均秒插375条数据。

初步分析原因,首先是虚拟机环境肯定会对速度有影响,其次每次插入数据之前都没有清理上次插入的数据,可能会对插入的结果有一定影响。另外Cassandra在新推出的0.8版本中加入二级索引的功能,本次测试只是最简单的测试,没很好的优化,所以也会对读取的结果有一定的降低。但是从测试结果来看,Cassandra的表现都算稳定,不会因为瞬间的大量请求而造成明显的延迟。

总之,在测试机器上,应用Cassandra做一个中小型的网站数据库是没问题的,要考虑的反而是网站面向的业务对象和数据处理存储需求是不是适合用这种非关系型的数据库来担当了。

进一步测试
实验室 Dell Vostro 230s (CPU_Intel_E7500、DDR3_2GB、CentOS_5.6、Apache_2.2、PHP_5.2、FireFox_3.6) 环境下测试:

# 拔掉网线,在一台机单节点情况下:
* 顺序插入N条数据耗时:
1000条,<1s、<1s、<1s,平均秒插1000+;
5000条,<2s、<2s、<1s,平均秒插3000+;
10K 条,<4s、<4s、<4s,平均秒插2500+。
* 顺序读取N条数据时:
1000条,<1s、<1s、<1s,平均秒读1000+;
5000条,<2s、<2s、<2s,平均秒读3000+;
10K 条,<4s、<3s、<4s,平均秒读3333+。

# 插上网线,重启服务加入集群,在三台机集群已建立完成的情况下:
* 顺序插入N条数据耗时:
1000条,<1s、<1s、<1s,平均秒插1000+;
5000条,<3s、<4s、<3s,平均秒插1500+;
10K 条,<6s、<6s、<7s,平均秒插1579+。
* 顺序读取N条数据时:
1000条,<1s、<1s、<1s,平均秒读1000+;
5000条,<3s、<3s、<3s,平均秒读1667+;
10K 条,<7s、<7s、<6s,平均秒读1500+。

# 随机(乱序)key读取10000条。。。测试5次,结果速度跟顺序读取的一样

初步分析结果:
1、由于集群需要同步,心跳时钟也是有间隔的,所以集群反而比单机慢这个不奇怪;
2、估计Cassandra不会立刻把数据写盘,而且前面也说到服务开启之后要占用256MB内存,利用内存作高速缓存,所以读写速度都相近;
3、由于程序没有取得千分秒的数据,所以不能准确反应1000条下的速度,但从后面两个数据可以看到,Cassandra在顺序发生10K个请求的情况下能保持一定的效率。

参考
phpcassa 0.8.a.2 Documentation
Cassandra wiki
groups.google.com/phpcassa
Cassandra 0.8 Documentation
  评论这张
 
阅读(1299)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018