Cassandra是由Facebook贡献的开源分布式数据库。其遵从NoSql理念,是结合了Dynamo与BigTable的产物。最近Twitter和Digg都将其数据库由MySql迁往Cassandra。看到其发展势头不错,我就下载下来,做了个测试。
测试环境:
分别在两台机器上部署cassandra.这里说明下关键配置:
配置文件路径是%Cassandra_Home%\conf\storage-conf.xml
<Storage>
<!--两台机器的ClusterName必须相同,作为集群标识 -->
<ClusterName>BurceServers</ClusterName>
<AutoBootstrap>false</AutoBootstrap>
<Keyspaces>
<Keyspace Name="Keyspace1">
<KeysCachedFraction>0.01</KeysCachedFraction>
<ColumnFamily CompareWith="BytesType" Name="Standard1"/>
<ColumnFamily CompareWith="UTF8Type" Name="Standard2"/>
<ColumnFamily CompareWith="TimeUUIDType" Name="StandardByUUID1"/>
<ColumnFamily ColumnType="Super"
CompareWith="UTF8Type"
CompareSubcolumnsWith="UTF8Type"
Name="Super1"
Comment="A column family with supercolumns, whose column and subcolumn names are UTF8 strings"/>
</Keyspace>
</Keyspaces>
<Partitioner>org.apache.cassandra.dht.RandomPartitioner</Partitioner>
<InitialToken></InitialToken>
<EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
<ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy>
<ReplicationFactor>1</ReplicationFactor>
<CommitLogDirectory>c:/cassandra/lib/cassandra/commitlog</CommitLogDirectory>
<DataFileDirectories>
<DataFileDirectory>c:/cassandra/lib/cassandra/data</DataFileDirectory>
</DataFileDirectories>
<CalloutLocation>c:/cassandra/lib/cassandra/callouts</CalloutLocation>
<StagingFileDirectory>c:/cassandra/lib/cassandra/staging</StagingFileDirectory>
<!--在这里可以添加多个cassandra服务器-->
<Seeds>
<Seed>10.219.101.101</Seed>
<Seed>10.219.101.121</Seed>
</Seeds>
<RpcTimeoutInMillis>5000</RpcTimeoutInMillis>
<CommitLogRotationThresholdInMB>128</CommitLogRotationThresholdInMB>
<!--监听地址必须是本机IP-->
<ListenAddress>10.219.101.101</ListenAddress>
<StoragePort>7000</StoragePort>
<ControlPort>7001</ControlPort>
<!--基于Thrift的cassandra客户端监听地址-->
<ThriftAddress>10.219.101.101</ThriftAddress>
<ThriftPort>9160</ThriftPort>
<ThriftFramedTransport>false</ThriftFramedTransport>
<SlicedBufferSizeInKB>64</SlicedBufferSizeInKB>
<ColumnIndexSizeInKB>64</ColumnIndexSizeInKB>
<MemtableSizeInMB>64</MemtableSizeInMB>
<MemtableObjectCountInMillions>0.1</MemtableObjectCountInMillions>
<MemtableFlushAfterMinutes>60</MemtableFlushAfterMinutes>
<ConcurrentReads>8</ConcurrentReads>
<ConcurrentWrites>32</ConcurrentWrites>
<CommitLogSync>periodic</CommitLogSync>
<CommitLogSyncPeriodInMS>10000</CommitLogSyncPeriodInMS>
<GCGraceSeconds>864000</GCGraceSeconds>
<BinaryMemtableSizeInMB>256</BinaryMemtableSizeInMB>
</Storage>
除增加了一个cassandra的服务器外,基本采用默认配置。
测试代码:
/**
*
*/
package com.tpri.sis.test;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import me.prettyprint.cassandra.service.CassandraClient;
import org.apache.cassandra.service.Cassandra;
import org.apache.cassandra.service.ColumnPath;
import org.apache.cassandra.service.ConsistencyLevel;
import org.apache.cassandra.service.InvalidRequestException;
import org.apache.cassandra.service.TimedOutException;
import org.apache.cassandra.service.UnavailableException;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
/**
* @author brucepang
*
*/
public class CassandraClientDemo {
/**
*
*/
public CassandraClientDemo() {
}
/**
* @param args
*/
public static void main(String[] args) {
try {
TTransport tr = new TSocket("10.219.101.101", 9160);
TProtocol pro = new TBinaryProtocol(tr);
Cassandra.Client cli = new Cassandra.Client(pro);
tr.open();
String key = null;
String name, age;
ColumnPath namePath = new ColumnPath("Standard1", null, "name"
.getBytes("UTF-8"));
ColumnPath agePath = new ColumnPath("Standard1", null, "age"
.getBytes("UTF-8"));
String keySpace = "Keyspace1";
long time = 0;
long l1 = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
key = String.valueOf(i);
name = RandomStringUtils.random(5,"abcdefghefsdf");
time = System.currentTimeMillis();
cli.insert(keySpace, key, namePath, name.getBytes("UTF-8"),
time, ConsistencyLevel.ONE);
cli.insert(keySpace, key, agePath, key.getBytes("UTF-8"), time,
ConsistencyLevel.ONE);
}
long l2 = System.currentTimeMillis();
long ch = l2 - l1;
System.out.println(ch);
} catch (TTransportException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidRequestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimedOutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试结果:1 写100条数据,耗时59922毫秒,将近1分钟;
分享到:
相关推荐
Cassandra是一款高性能、高可用性的分布式NoSQL数据库,其架构设计主要应对大数据环境下的高并发读写需求。在架构上,Cassandra避免了传统主从式数据库架构的单点故障问题,其节点之间通过Gossip协议进行通信,实现...
为了提升Cassandra的开发效率和运维便捷性,一系列生态工具应运而生。例如,CQL(Cassandra Query Language)提供了类似SQL的查询语言,简化了数据的增删改查操作;DataStax Enterprise提供了企业级的Cassandra发行...
在IT领域,Cassandra是一个分布式NoSQL数据库系统,被广泛用于处理海量数据。而Thrift是一种跨语言的服务框架,它允许不同编程语言之间进行高效、轻量级的通信。本主题将深入探讨如何利用C#结合Thrift快速读写...
分布式存储系统:Cassandra:Cassandra的读写操作与数据一致性.docx
Cassandra 1.0版本引入了一系列关键改进,旨在增强其存储能力、读写效率以及整体系统稳定性。以下是该版本中值得注意的新特性: 1. **列簇压缩**:这一功能是Cassandra社区最期待的改进之一。列簇压缩不仅显著提升...
Cassandra 1.2 版本是在其早期版本的基础上进行了一系列优化和改进,增强了性能和稳定性,使其在大数据处理和实时分析领域更为出色。 ### 1. 分布式架构 Cassandra 的核心设计原则是分布式,它能够在多台机器上...
从描述中我们可以得知,文档中可能包括了为什么选择Cassandra而不是其他数据库系统的比较,Cassandra提供的核心特性,例如水平扩展性、高可用性、写优化、结构化记录、二级索引、高效结果排序、即时一致性、可离散...
在Cassandra 3.11.3版本中,我们看到了许多优化和改进,使其成为企业级应用的可靠选择。 首先,Cassandra的核心特性之一是它的分布式架构。它采用了一种主从复制模型,每个节点都可以接受写入和读取请求,使得系统...
Cassandra的核心特性在于其高可靠性、可伸缩性和分布式架构,它不是一个单一的数据库,而是由多个数据库节点组成的分布式网络服务。 - **数据模型**:Cassandra采用基于列集(Column Family)的数据模型,类似于...
1. **分布式架构**:Cassandra 的核心特性是其分布式架构,它可以在多台服务器上分布数据,提供无单点故障的设计。这种架构使得Cassandra能够支持水平扩展,只需添加更多的节点就能增加存储容量和处理能力。 2. **...
- 写优化:Cassandra设计时更侧重于写操作,采用多版本并发控制(MVCC)实现高写入性能。 2. **集群管理** - 安装与启动:文档会详细介绍在不同操作系统上安装和启动Cassandra的步骤。 - 配置文件:`cassandra....
Cassandra支持分布式写操作,可以在任何地方任何时间集中读或写任何数据。 2. 数据模型 Cassandra的数据模型可以看作是一个四维或者五维的Hash。 2.1 Column Column是Cassandra中最小的数据单元。它是一个3元的...
9. **CQL(Cassandra Query Language)**:Cassandra引入了类似SQL的查询语言CQL,简化了数据操作,提高了开发效率。 10. **Cassandra的数据分区与复制**:通过分区函数,Cassandra将行键映射到特定的节点,每个...
综上所述,Cassandra在处理大规模数据时表现出了其强大的能力,但同时也暴露出了一些问题,特别是随着数据规模的增加,如何保证数据的高可靠性、提升运维效率以及控制成本成为关键挑战。通过不断地实践和探索,360...
- **水平可扩展性**:Cassandra能够轻松地通过增加更多的节点来扩展其存储能力,这种特性使得它非常适合处理快速增长的数据集。 - **高可用性**:Cassandra通过多副本复制数据,在多个数据中心之间提供高可用性和...
标题与描述均提到了“MariaDB与Cassandra的互操作性”,这主要指的是MariaDB中的Cassandra存储引擎(Cassandra Storage Engine)。这是一个重要的知识点,它实现了MariaDB与Cassandra数据库之间的桥梁,允许用户在...
然而,需要注意的是,Cassandra作为NoSQL数据库,其数据模型与传统的关系型数据库有所不同,设计时应遵循Cassandra的数据分布和分区策略,以充分利用其性能优势。 总之,Spring Boot与Cassandra的集成结合了Spring ...
将 YCSB 与 Cassandra 结合,我们可以对 Cassandra 数据库进行压力测试,了解其在不同工作负载下的性能表现。 ### YCSB 简介 YCSB 的设计目标是提供一个通用的框架,以便于对比和分析不同云存储系统的性能。它提供...