文档章节

Cassandra – 数据库启动和访问

Justina_Chen
 Justina_Chen
发布于 2013/12/09 12:13
字数 769
阅读 3693
收藏 1

使用最新的2.0.3版本,解压后进入文件目录启动Cassadra,注意:如果不带-f参数,在MAC OS X系统中Cassandra会在后台运行,Ctrl+C也无法关闭。

$ bin/cassandra -f
>> Startup completed! Now serving reads.

Cassandra的文件包中,bin下有自带的数据库操作命令行工具cassandra-cli,lib中有可供Java编程访问的Driver.我们先介绍命令行工具的基本数据库操作:

$ bin/cassandra-cli
>> Connected to: "Test Cluster" on 127.0.0.1/9160 Welcome to Cassandra CLI version 2.0.3 The CLI is deprecated and will be removed in Cassandra 3.0. Consider migrating to cqlsh. CQL is fully backwards compatible with Thrift data; see http://www.datastax.com/dev/blog/thrift-to-cql3
Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.
>> [default@unknown]

Key space类似于数据库的概念,首先需要创建一个Key space.

$ create keyspace testkeyspace; 
>> cd74ab35-72c3-3c72-a9ef-51a8a17bca18

Cassandra是列数据库,创建Column family

$ use testkeyspace; 
>> Authenticated to keyspace: testkeyspace
$ create column family testcolumnfamily; 
>> adc59964-8f3a-3a80-bc65-f692405b5278

写入数据,在此之前先设置Cassandra的字符类型,否则行列名称会无法识别:

$ assume testcolumnfamily keys as utf8; 
$ assume testcolumnfamily comparator as utf8; 
$ assume testcolumnfamily validator as utf8; 
$ set testcolumnfamily['row']['column1'] = 'avalue'; 
>> Value inserted. Elapsed time: 35 msec(s).

Cassandra有一个很有趣的功能,自动删除数据,下面是设置10秒后删除数据:

$ set testcolumnfamily['row']['column2'] = 'bvalue' with ttl = 10; 
>> Value inserted. Elapsed time: 35 msec(s).

查看数据

$ list testcolumnfamily 
>> RowKey: row => (name=column1, value=avalue, timestamp=1385639319712) 
$ get testcolumnfamily['row'] 
=> (name=column1, value=avalue, timestamp=1385639319712)

使用Java启动Cassandra服务时,注意要引用所有cassandra/lib下的文件,否则会连续遇到yaml解析错误等问题。
先创建一个Cassandra客户端:

/**
 * User: Justina Chen
 * Date: 11/28/13
 * Time: 5:57 PM
 */ 
import org.apache.cassandra.thrift.Cassandra; 
import org.apache.thrift.protocol.*; 
import org.apache.thrift.transport.*; 

public class FramedConnWrapper {

    private TTransport transport;
    private TProtocol protocol;  
    private TSocket socket;  

    public FramedConnWrapper(String host, int port) { 
        socket = new TSocket(host, port); 
        transport = new TFramedTransport(socket); 
        protocol = new TBinaryProtocol(transport);  
    }
  
    public void open() throws Exception {  
        transport.open();  
    }

    public void close() throws Exception {  
        transport.close();  
        socket.close();  
    }

    public Cassandra.Client getClient() {  
        Cassandra.Client client = new Cassandra.Client(protocol);  
        return client;  
    }
}

在单元测试中启动Cassandra内置服务,并测试访问:

/**
 * User: Justina Chen
 * Date: 11/28/13
 * Time: 7:02 PM
 */ 
import junit.framework.Assert; 
import org.apache.thrift.TException; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.apache.cassandra.service.*;  

public class UtilTest {  
   
    private static EmbeddedCassandraService cassandraService;  
    private FramedConnWrapper connWrapper;  

    @Before
    public void setUp() throws Exception {  
        cassandraService = new EmbeddedCassandraService();  
        cassandraService.start();  
        connWrapper = new FramedConnWrapper("localhost", 9160);  
        connWrapper.open();  
    }

    @After  
    public void tearDown() throws Exception {
        connWrapper.close();  
    } 

    @Test
    public void testEmbeddedCassandra() throws TException {  
        Assert.assertEquals("Test Cluster", connWrapper.getClient().describe_cluster_name());  
    }
}

数据写入:

/**
 * User: Justina Chen
 * Date: 11/28/13
 * Time: 7:11 PM
 */ 
import java.nio.ByteBuffer; 
import java.util.*; 
import org.apache.cassandra.thrift.*; 

public class GetVMultiGet {  
   
    public static void main (String[] args) throws Exception {  
        FramedConnWrapper fcw = new FramedConnWrapper("localhost", 9160);  
        fcw.open();  

        ColumnParent parent = new ColumnParent();  
        parent.setColumn_family("testcolumnfamily");  
        ColumnPath path = new ColumnPath();  
        path.setColumn_family("testcolumnfamily"); 
        path.setColumn("column1".getBytes("UTF-8"));  
        Column c = new Column();  
        fcw.getClient().set_keyspace("testkeyspace"); 
        c.setName("column1".getBytes());  
        c.setTimestamp(System.currentTimeMillis());  

        for (int j = 0; j < inserts; j++) {  
            byte[] key = (j+"").getBytes(); 
            ByteBuffer keyBuf = ByteBuffer.wrap(key);  
            c.setValue(key);  
            fcw.getClient().insert(keyBuf, parent, c, ConsistencyLevel.ALL); 
            fcw.getClient().get(keyBuf, path, ConsistencyLevel.ALL);  
        }

        long getNanos = System.nanoTime();  
        for (int j = 0; j < inserts; j++) {  
            byte[] key = (j+"").getBytes();  
            c.setValue(key);  
            fcw.getClient().get(ByteBuffer.wrap(key), path, ConsistencyLevel.ONE);  
        }  

        long endGetNanos = System.nanoTime() - getNanos;   
        System.out.println("get time " + endGetNanos); 
        fcw.close();  
    } 
}

对Cassandra初次印象是,操作和访问都比较复杂,出错时没有一个清楚的提示,加上文档很少,和其它NoSQL数据库尤其是MongoDB比起来,可用性还比较低。

原文链接:Cassandra – 数据库启动和访问

© 著作权归作者所有

Justina_Chen
粉丝 1
博文 3
码字总数 3984
作品 0
成都
私信 提问
Cassandra – 理解关键概念和数据模型

Cassandra的设计理论倾向于实现CAP原则中的AP(Availability and Partition Tolerance)——高可用性和分布式,它的分布式是基于一致性哈希环(Consistent Hash Ring)算法实现的。 面向行(...

Justina_Chen
2013/12/09
9.5K
0
Apache Cassandra 初体验 :安装和简单的demo

Apache Cassandra是一个开源的分布式数据库管理系统。它最初由Facebook开发(后来捐献给开源社区,现在 他们内部是用的是一个非开源的分支),用于储存大数据的信息。 主要特性: 分布式 基于...

小编辑
2010/05/25
3.4K
0
Cassandra数据模型

提起NoSQL这个话题,仿佛不应该是DBA要关注的事,而是架构师应该关心的。但是作为一名DBA,在使用传统的关系型思想建模时,应该有必要了解NoSQL的建模方法。 各种NoSQL数据库有很多,我最关注...

JavaGG
2010/03/24
1K
0
手把手教你用Rancher创建产品质量数据库设置

数据库对于企业来说至关重要,因此数据库体系结构迁移到容器平台显得尤为必要。本文将介绍如何用Rancher创建产品质量数据库设置,并分析在Rancher高可用和Kubernetes中可供使用的各种选项,给...

RancherLabs
2018/08/09
39
0
Cassandra – 数据结构设计概念和原则

当我们设计一个关系型数据库时,着手点是系统中的对象(Entities),再为对象加上属性描述,从而转换为表设计。在关系型数据库中我们不会考虑表的行,因为确定表的字段名称之后,数据逐行写入...

Justina_Chen
2013/12/09
3.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在改造 公羊阅读🐏 Taro 版本适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 client_mobile_taro...

dkvirus
今天
4
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部