看到很多大牌网站,都离开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:
将其中的网址改为新的,正确的网址。
重新执行,总说找不到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
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上面没试过,据说并不复杂。
再接再厉。