`
pangyi
  • 浏览: 33648 次
  • 性别: Icon_minigender_1
  • 来自: 古城西安
社区版块
存档分类
最新评论

试用Cassandra,其写效率太差

阅读更多
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分钟;
         
   
1
1
分享到:
评论
9 楼 悬空90 2013-05-30  
cassandra 1.2.5

2台linux集群

100W数据

10个线程

耗时:80 秒

还有优化的空间吗?
8 楼 eyesmore 2012-09-28  
这个版本的没用过。但从原理上说,你这边配置:
<CommitLogSync>periodic</CommitLogSync> 
<CommitLogSyncPeriodInMS>10000</CommitLogSyncPeriodInMS> 
CommitLog是异步周期持久化,数据部分都是Memtable内存的,是不可能影响写性能的。你的实验有问题,或者之前的版本有问题。
7 楼 linliangyi2007 2010-07-10  
楼主杯具了,cassandra被你用成残废了。你的配置中seed为啥又两个啊,做群集seed 1个就够了。
6 楼 machoche 2010-06-07  
有些库找不到?
5 楼 pangyi 2010-05-17  
最近试用了下MongoDB,其读写效率都不错。
4 楼 zdyhlp 2010-04-19  
我在windows机器上单节点试了下。4秒写了10000条记录。

TTransport tr = new TSocket("localhost", 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");
namePath.setColumn("name".getBytes("UTF-8"));
ColumnPath agePath = new ColumnPath("Standard1");
agePath.setColumn("age".getBytes("UTF-8"));
3 楼 waterdh 2010-04-02  
可能机器问题吧。
我的2台集群测试下来效果还不错,单线程插入2w条数据花了13s。
2 楼 pangyi 2010-03-22  
单机效率还可以。cassandra的主要特性是其分布特性。



1 楼 wing5jface 2010-03-19  
如果是单机的话,我跑你的程序,只用了94ms呀

相关推荐

    Cassandra-架构讲解

    Cassandra是一款高性能、高可用性的分布式NoSQL数据库,其架构设计主要应对大数据环境下的高并发读写需求。在架构上,Cassandra避免了传统主从式数据库架构的单点故障问题,其节点之间通过Gossip协议进行通信,实现...

    Cassandra实战.pdf

    为了提升Cassandra的开发效率和运维便捷性,一系列生态工具应运而生。例如,CQL(Cassandra Query Language)提供了类似SQL的查询语言,简化了数据的增删改查操作;DataStax Enterprise提供了企业级的Cassandra发行...

    C# 利用Thrift 快速读写Cassandra数据库

    在IT领域,Cassandra是一个分布式NoSQL数据库系统,被广泛用于处理海量数据。而Thrift是一种跨语言的服务框架,它允许不同编程语言之间进行高效、轻量级的通信。本主题将深入探讨如何利用C#结合Thrift快速读写...

    分布式存储系统:Cassandra:Cassandra的读写操作与数据一致性.docx

    分布式存储系统:Cassandra:Cassandra的读写操作与数据一致性.docx

    Cassandra个人学习笔记总结

    Cassandra 1.0版本引入了一系列关键改进,旨在增强其存储能力、读写效率以及整体系统稳定性。以下是该版本中值得注意的新特性: 1. **列簇压缩**:这一功能是Cassandra社区最期待的改进之一。列簇压缩不仅显著提升...

    Cassandra1.2

    Cassandra 1.2 版本是在其早期版本的基础上进行了一系列优化和改进,增强了性能和稳定性,使其在大数据处理和实时分析领域更为出色。 ### 1. 分布式架构 Cassandra 的核心设计原则是分布式,它能够在多台机器上...

    Learning_Apache_Cassandra

    从描述中我们可以得知,文档中可能包括了为什么选择Cassandra而不是其他数据库系统的比较,Cassandra提供的核心特性,例如水平扩展性、高可用性、写优化、结构化记录、二级索引、高效结果排序、即时一致性、可离散...

    cassandra-3.11.3下载

    在Cassandra 3.11.3版本中,我们看到了许多优化和改进,使其成为企业级应用的可靠选择。 首先,Cassandra的核心特性之一是它的分布式架构。它采用了一种主从复制模型,每个节点都可以接受写入和读取请求,使得系统...

    Cassandra_概要指南

    Cassandra的核心特性在于其高可靠性、可伸缩性和分布式架构,它不是一个单一的数据库,而是由多个数据库节点组成的分布式网络服务。 - **数据模型**:Cassandra采用基于列集(Column Family)的数据模型,类似于...

    apache-cassandra-3.11.13

    1. **分布式架构**:Cassandra 的核心特性是其分布式架构,它可以在多台服务器上分布数据,提供无单点故障的设计。这种架构使得Cassandra能够支持水平扩展,只需添加更多的节点就能增加存储容量和处理能力。 2. **...

    Cassandra文档

    - 写优化:Cassandra设计时更侧重于写操作,采用多版本并发控制(MVCC)实现高写入性能。 2. **集群管理** - 安装与启动:文档会详细介绍在不同操作系统上安装和启动Cassandra的步骤。 - 配置文件:`cassandra....

    Cassandra分布式架构与源代码分析

    Cassandra支持分布式写操作,可以在任何地方任何时间集中读或写任何数据。 2. 数据模型 Cassandra的数据模型可以看作是一个四维或者五维的Hash。 2.1 Column Column是Cassandra中最小的数据单元。它是一个3元的...

    Cassandra数据库

    9. **CQL(Cassandra Query Language)**:Cassandra引入了类似SQL的查询语言CQL,简化了数据操作,提高了开发效率。 10. **Cassandra的数据分区与复制**:通过分区函数,Cassandra将行键映射到特定的节点,每个...

    Cassandra应用和改进

    综上所述,Cassandra在处理大规模数据时表现出了其强大的能力,但同时也暴露出了一些问题,特别是随着数据规模的增加,如何保证数据的高可靠性、提升运维效率以及控制成本成为关键挑战。通过不断地实践和探索,360...

    Learning Apache Cassandra 2015

    - **水平可扩展性**:Cassandra能够轻松地通过增加更多的节点来扩展其存储能力,这种特性使得它非常适合处理快速增长的数据集。 - **高可用性**:Cassandra通过多副本复制数据,在多个数据中心之间提供高可用性和...

    MariaDB Cassandra interoperability Cassandra Storage Engine in MariaDB

    标题与描述均提到了“MariaDB与Cassandra的互操作性”,这主要指的是MariaDB中的Cassandra存储引擎(Cassandra Storage Engine)。这是一个重要的知识点,它实现了MariaDB与Cassandra数据库之间的桥梁,允许用户在...

    spring boot与cassandra集成,使用JPA方式。

    然而,需要注意的是,Cassandra作为NoSQL数据库,其数据模型与传统的关系型数据库有所不同,设计时应遵循Cassandra的数据分布和分区策略,以充分利用其性能优势。 总之,Spring Boot与Cassandra的集成结合了Spring ...

    ycsb cassandra 压力测试工具

    将 YCSB 与 Cassandra 结合,我们可以对 Cassandra 数据库进行压力测试,了解其在不同工作负载下的性能表现。 ### YCSB 简介 YCSB 的设计目标是提供一个通用的框架,以便于对比和分析不同云存储系统的性能。它提供...

Global site tag (gtag.js) - Google Analytics