硕鼠的博客站

范路的博客主站,时而会发些东西。

Posts Tagged ‘ruby’

折腾了半天,终于把cassandra跑起来了

看到很多大牌网站,都离开MySQL转移到Cassandra上了。于是决定自己也试试。

在ubuntu服务器上先安装ruby on rails和java环境:

sudo apt-get install ruby ri irb rdoc ruby-dev rake rubygems1.8 libsqlite3-ruby libopenssl-ruby

sudo gem install rails mongrel mongrel_cluster  -n /usr/bin

sudo apt-get install sun-java6-jdk ant

然后安装ruby的cassandra gem包。

sudo gem install cassandra -n /usr/bin

直到这里,都不需要怎么麻烦。

下一步是下载、编译、安装cassandra,这个就麻烦了。

命令很简单:

cassandra_helper cassandra

第一个遇到的错误,说cassandra的包找不到了。于是上网去查了一下,发现是cassandra的版本更新了,原来是beta2,现在是beta3了。

修改Rakefile:

sudo vi /var/lib/gems/1.8/gems/cassandra-0.8.0/Rakefile

将其中的网址改为新的,正确的网址。

重新执行,总说找不到tar包或找不到目录。

后来发现,必须到cassandra默认的目录下去执行:

cd ~/cassandra

这回文件是找到了,却又说一个目录权限不够,再将执行的语句换成: sudo cassandra_helper cassandra ,在经过了漫长的ant编译过程(需要从网上下载不少东西)之后,终于运行起来了。而且,是以debug的方式运行起来的,对其做的各种操作都可以直观的看到。

启动的过程,会显示:

DEBUG – Estimating compactions for LocationInfo

DEBUG – Estimating compactions for HintsColumnFamily

DEBUG – Estimating compactions for Comments

DEBUG – Estimating compactions for Blogs

DEBUG – Estimating compactions for InvoiceRelationships

DEBUG – Estimating compactions for Customers

DEBUG – Estimating compactions for Appointments

DEBUG – Estimating compactions for Invoices

DEBUG – Estimating compactions for CustomersByLastName

DEBUG – Estimating compactions for InvoicesByNumber

DEBUG – Estimating compactions for Payments

DEBUG – Estimating compactions for CustomerRelationships

DEBUG – Estimating compactions for Comments

DEBUG – Estimating compactions for Blogs

DEBUG – Estimating compactions for Users

DEBUG – Estimating compactions for Index

DEBUG – Estimating compactions for UserRelationships

DEBUG – Estimating compactions for StatusAudits

DEBUG – Estimating compactions for StatusRelationships

DEBUG – Estimating compactions for Statuses

DEBUG – Estimating compactions for UserAudits

DEBUG – Estimating compactions for Usernames

上面写的这些名字,比如Users、Blogs,我们可以把他们直观的理解为表的名字。这些都是默认建好的,可以直接使用。
需要建立自己的表时,可以自己到cassandra_home/conf/storage-conf.xml里面去添加。
现在说起来比较简单,但当时反复试验,非常麻烦。
终于装好了,赶快试试:测试例子来源于 http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/
进入irb,然后键入代码:
#添加引用:

require ‘rubygems’

require ‘cassandra’

include Cassandra::Constants

#建立示例

twitter = Cassandra.new(‘Twitter’)

#填充数据

user = {‘screen_name’ => ‘buttonscat’}

twitter.insert(:Users, ‘5’, user)

tweet1 = {‘text’ => ‘Nom nom nom nom nom.’, ‘user_id’ => ‘5’}

twitter.insert(:Statuses, ‘1’, tweet1)

tweet2 = {‘text’ => ‘@evan Zzzz….’, ‘user_id’ => ‘5’, ‘reply_to_id’ => ‘8’}

twitter.insert(:Statuses, ‘2’, tweet2)

twitter.insert(:UserRelationships, ‘5’, {‘user_timeline’ => {UUID.new => ‘1’}})

twitter.insert(:UserRelationships, ‘5’, {‘user_timeline’ => {UUID.new => ‘2’}})

#检索查询

timeline = twitter.get(:UserRelationships, ‘5’, ‘user_timeline’, :reversed => true)

timeline.map { |time, id| twitter.get(:Statuses, id, ‘text’) }

得到结果:

[“@evan Zzzz….”, “Nom nom nom nom nom.”]

退出irb再重新进入,将查询的部分执行一次,没有问题。结果还是正确的。

现在还有一些问题没有解决,那就是,直接运行cassandra还有问题,应该是classpath配置的有问题。这应该是java配置的问题的。每次都必须要执行cassandra_helper cassandra,通过ruby来启动cassandra。还没搞清楚怎么设置开机自动启动。

现在cassandra_helper还无法检测我已经安装过canssandra了,每次都要去下载。我将里面判断的CASSANDRA_INCLUDE设置项,写到了 /etc/environment,好像也还是无效。

到此为止,还不能说是部署完全成功了,只是能够应付一些简单的开发测试工作。

cassandra本身在windwos下安装倒是非常简单:下载,解压,执行cassandra.bat完事。但是,在windows下面安装cassandra的ruby包很麻烦,必须要有nmake,我是在是不想再在机器上装vc了。Mac上面没试过,据说并不复杂。

再接再厉。

Close Bitnami banner
Bitnami