您的位置:首页 > 编程语言 > Ruby

No Sql 读书笔记1(安装、配置、ruby使用cassandra)

2011-01-04 15:24 495 查看
看来我始终是于数据脱不了干系,心里也是始终渴望这探求这一领域。

本科自学数据挖掘,当初考研也是数据挖掘,继走马观花地看了BigTable的架构之后,终于真正踏上了研究之旅,并希望能在近期能真正用起来。实践中再巩固,提升。

今天看的文章是:

分布式 Key-Value 存储系统:Cassandra 入门

http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/

Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和
Google's BigTable 的数据结构和功能特点,采用 Memtable 和 SSTable 的方式进行存储。在 Cassandra
写入数据之前,需要先记录日志 ( CommitLog ),然后数据开始写入到 Column Family 对应的 Memtable
中,Memtable 是一种按照 key 排序数据的内存结构,在满足一定条件时,再把 Memtable 的数据批量的刷新到磁盘上,存储为
SSTable 。

//Memtable

//SSTable

//CommitLog

这文章原理性的东西不多,主要是些配置以及使用的细节。

Cassandra 节点的安装和配置

获取 Cassandra

# wget  http://labs.renren.com/apache-mirror/cassandra/0.6.0/apache- 
cassandra-0.6.0-rc1-bin.tar.gz

# tar -zxvf apache-cassandra-0.6.0-rc1-bin.tar.gz

# mv  apache-cassandra-0.6.0-rc1 cassandra

# ls Cassandra

Cassandra
的目录说明


bin
存放与 Cassandra 操作的相关脚本
conf
存放配置文件的目录
interface
Cassandra 的 Thrift 接口定义文件,可以用于生成各种编程语言的接口代码
Javadoc
源代码的 javadoc
lib
Cassandra 运行时所需的 jar 包
配制 Cassandra
节点的数据存储目录和日志目录

修改配制文件 storage-conf.xml:

默认的内容

<CommitLogDirectory>/var/lib/cassandra/commitlog</CommitLogDirectory>

<DataFileDirectories>

<DataFileDirectory>/var/lib/cassandra/data</DataFileDirectory>

</DataFileDirectories>

配置后的内容

<CommitLogDirectory>/data3/db/lib/cassandra/commitlog</CommitLogDirectory>

<DataFileDirectories>

<DataFileDirectory>/data3/db/lib/cassandra/data</DataFileDirectory>

</DataFileDirectories>

修改日志配制文件 log4j.properties:

log4j.properties 配置

# 日志路径

#log4j.appender.R.File=/var/log/cassandra/system.log

# 配置后的日志路径 :

log4j.appender.R.File=/data3/db/log/cassandra/system.log

创建文件存放数据和日志的目录

# mkdir – p /data3/db/lib/cassandra

# mkdir – p /data3/db/log/Cassandra

配制完成后,启动 Cassandra

# bin/Cassandra

显示信息

INFO 09:29:12,888 Starting up server gossip

INFO 09:29:12,992 Binding thrift service to localhost/127.0.0.1:9160

看到这两行启动回显信息时,说明 Cassandra 已启动成功。

连接到 Cassandra 并添加、获取数据

Cassandra 的 bin 目录已自带了命令行连接工具 cassandra-cli,可使用它连接到
Cassandra,并添加、读取数据。

连接到 Cassandra,并添加、读取数据

# bin/cassandra-cli --host localhost --port 9160

Connected to: "Test Cluster" on localhost/9160

Welcome to cassandra CLI.

Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.

cassandra>

cassandra> set Keyspace1.Standard2['studentA']['age'] = '18'

Value inserted

cassandra> get Keyspace1.Standard2['studentA']

=> (column=age, value=18, timestamp=1272357045192000)

Returned 1 results

停止 Cassandra 服务

查出 Cassandra 的 pid:16328

# ps -ef | grep cassandra

# kill 16328

Cassandra 配制文件
storage-conf.xml 相关配制介绍

清单 1. storage-conf.xml 节点配制说明清单

<!-- 集群时显示的节点名称 -->

<ClusterName>Test Cluster</ClusterName>

<!-- 节点启动时,是否自动加入到集群中,默认为 false -->

<AutoBootstrap>false</AutoBootstrap>

<!-- 集群的节点配制 -->

<Seeds>

<Seed>127.0.0.1</Seed>

</Seeds>

<!-- 节点之间通迅的监听地址 -->

<ListenAddress>localhost</ListenAddress>

<!--

基于 Thrift 的 cassandra 客户端监听地址,

集群时设为:0.0.0.0 表示侦听所有客户端 , 默认为:localhost

-->

<ThriftAddress>localhost</ThriftAddress>

<!-- 客户端连接的端口 -->

<ThriftPort>9160</ThriftPort>

<!--

FlushDataBufferSizeInMB   将 memtables 上的数据写入在 Disk 上,

超过设定好的限制大小时 ( 默认 32M),则将数据写入磁盘,

FlushIndexBufferSizeInMB  超过设定的时长(默认 8 分钟)后,

将 memtables 由的数据写入磁盘中

-->

<FlushDataBufferSizeInMB>32</FlushDataBufferSizeInMB>

<FlushIndexBufferSizeInMB>8</FlushIndexBufferSizeInMB>

<!--

节点之间的日志记录同步模式。

默认:periodic, 对应配制 CommitLogSyncPeriodInMS

启动 batch 时,则对应的配制 CommitLogSyncBatchWindowInMS

-->

<CommitLogSync>periodic</CommitLogSync>

<!-- 	默认为每 10 秒同步一次日志记录 -->

<CommitLogSyncPeriodInMS>10000</CommitLogSyncPeriodInMS>

<!--

<CommitLogSyncBatchWindowInMS>1</CommitLogSyncBatchWindowInMS> -->

清单 6. Ruby 连接 Cassandra,写入并读取数据

> require 'rubygems'

> require 'cassandra'

# 建立数据库连接

> cdb = Cassandra.new('Keyspace1',"192.168.10.1:9160", :retries => 3)

# 写入数据

> cdb.insert(:Standard1, 'studentA', {'age' => '18'})

# 读取数据

> cdb.get(:Standard1, :studentA)

# 关闭连接

> cdb.disconnect

//Ruby果然是最简洁的。

//集群还是算了,以后有需求再看吧,选错文章了,本来打算看一些原理方面的文章,结果来了个实战的,再找找。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: