背景
cassandras是由facebook的两位工程开发出来的一款nosql数据库。它兼有Dynamo和BigTable的优点。主要有下面一些特点:
- 分布式,无单点失败
- 基于列族的数据模型
- 可水平扩展,添加或删除节点不需要重启任何进程
安装与配置
cassandra的安装和配置都比较简单。如果不做集群,直接把下下来的压缩包解压后,就可以使用。如果要做集群,那就需要配置conf目录下的storage-conf.xml文件。storage-conf.xml文件中的主要配置参数解释如下:
- ClusterName 集群名.两台机器要处于同一个集群,必须配置相同的集群名
- AutoBootstrap 如果设置为true,当有新结点加入集群时,不再需要额外的操作
- KeySpace 相当于关系数据库中的scheme或database
- Partitioner 分区器.如果要使数据均匀的分布到各个结点上,可以使用RandomPartitioner
- Seeds 种子结点.
- ListenAddress 结点间互相通信使用的ip地址
配置完storage-conf.xml文件后,执行bin目录下的cassandra文件就可以启动cassandra.要监视集群的运行状态可以使用nodeprobe命令.
客户端API
连接cassandra可以使用两种api,一种是thrift api,另一种是高级api.下面是一段用thrift api连接cassandra的代码
Ttransport tr = new Tsocket(“192.168.0.1”, 9160);
TProtocol proto = TBinaryProtocol(tr);
tr.open();
Cassandra.Client client = new Cassandra.Client(proto);
ColumnPath cp = new ColumnPath(“Super1”,
“SuperColumn_1”.getBytes(“utf-8”), null);
ColumnOrSuperColumn cosc = client.get(“Keyspace1”, key, cp,
ConsistencyLevel.ONE);
SuperColumn sc = cosc.super_column;
for (Column col : sc.columns) {
String colname = new String(col.getName(), “UTF-8”);
String colvalue = new String(col.getValue(), “UTF-8”);
… …
}
tr.close();
假设集群有三个结点组成: 192.168.0.1, 192.168.0.2, 192.168.0.3,那么上面这段连接cassandra的代码就有一个问题: 代码中只连接192.168.0.1这一个结点,一旦这个结点宕机就与整个集群失去了联系.但其实cassandra是没有中心结点的,一个结点宕机不会影响整个集群(假设复制因子大于1),所以在连接cassandra时不能只尝试连接一个结点,而应当尝试连接多个结点.
数据的读取和写入
写入过程如下:
1) 写入提交日志
2) 发送数据到合适的结点
3) 写入本地日志并且更新memtables
4) 把memtable中的数据刷新到磁盘上
5) 删除提交日志
6) 如果需要,则对存储的数据进行compact
读取过程如下:
1) 通过api访问任一个结点
2) 如果该结点存在这个key指定的数据,则返回,否则根据partioner计算该key对应的value在哪个结点,并从该结点取得数据返回.
一致性哈希和Gossip协议
cassandra能做到没有单点代失败实际上是由一致性哈希和gossip协议保证的.
限制
使用cassandra时要注意下面这些限制:
- 一行数据必须要能放到一个结点上.cassandra不会把一行数据分开存储
- 一列数据的长度不能大于2GB
- 一行最多可以包含有20亿列
- key必须限制在64kb以下
分享到:
相关推荐
在DTCC 2014中国数据库技术大会上,360的大数据团队分享了Cassandra应用的现状、存在的问题以及未来的改进方向。首先,他们给出了Cassandra集群的现状,包括存储规模、主机规模、备份规模和数据规模,以及单集群规模...
- **最佳实践**:分享Cassandra使用过程中的经验和教训,帮助新用户快速上手。 综上所述,《Cassandra权威指南(中文)》涵盖了Cassandra的各个方面,不仅深入浅出地介绍了其基础知识和技术细节,还提供了丰富的...
- **活跃的社区支持**:Cassandra拥有一个较为活跃的开发者社区,能够提供技术支持和解决方案。 ### 二、360公司的Cassandra应用与改进措施 #### 数据读写策略 - **数据冗余**:为了确保数据的安全性和可用性,...
这篇博客“cassandra Example”的作者可能分享了他在探索Cassandra实例过程中的一些见解和遇到的问题。通常,这样的示例会涵盖Cassandra的基本操作,如创建表、插入数据、查询数据以及集群管理等。作者可能会通过...
同时,鼓励读者参与社区讨论,分享经验,共同推动技术发展。 #### 结语 通过本教程的学习,读者应能建立起一个功能完备的开发环境,对如何在Cassandra的方式下建模数据有了深入理解,并掌握了Twitter的Cassandra ...
2. **技术支持**:虽然社区版没有商业版那样的官方技术支持,但社区活跃,有许多用户和开发者分享经验和解决问题,对于熟悉开源文化的人来说,这是一个宝贵的资源。 3. **版本1.2.5**:dsc-cassandra-1.2.5是...
《PyPI官网下载:una-django-cassandra-engine-3.1.0的全面解析》 在Python的世界里,PyPI...在不断发展的技术环境中,像una-django-cassandra-engine这样的工具,无疑为我们的开发工作提供了更多的选择和可能性。
【大数据技术分享 大数据处理 MediaV聚合分析实时数据处理】是本次分享的主题,主要涵盖了以下几个方面的内容: 1. **聚合分析总体架构**:MediaV的聚合分析系统旨在为B2C电商企业提供专业的数据统计分析服务,通过...
### 大数据技术分享:深入探索Spark SQL与高级性能调优 #### 一、引言 随着大数据时代的到来,高效处理海量数据成为企业面临的重要挑战之一。Apache Spark作为一款开源的大规模数据处理框架,因其出色的性能表现而...
- **Cassandra**:分布式NoSQL数据库,支持高可用性和高性能。 #### 查询技术 - **Spark SQL**:结合SQL查询和DataFrame API的模块。 - **Impala**:提供低延迟的SQL查询服务。 - **Drill**:支持动态模式发现的...
标题中的“谷歌师兄的leetcode刷题笔记”表明这是一份由在谷歌工作的人分享的关于LeetCode编程题目的学习资料,而“hectorsharp:Cassandra的高级.NET客户端”则指出这份笔记特别关注Cassandra数据库的高级.NET接口...
结合描述中的博文链接,我们可以推测这篇文章可能是在ITEYE博客平台上发表的一篇关于IT技术的分享,但具体内容由于链接无法直接访问,我们需要根据标签和提供的文件名来推测。 标签“源码”和“工具”暗示了文章...
PyPI是Python开发者发布和分享他们软件包的主要平台,用户可以通过pip(Python的包管理器)轻松安装这些包。 标签"Python库"表明CassandraLauncher是一个Python编程语言的库,它可能包含了一系列功能,允许开发者在...
2. 大数据存储:探讨适合大数据的存储解决方案,如分布式文件系统(HDFS)、NoSQL数据库(如HBase、Cassandra)和列式存储(如Hive)。 3. 大数据处理:讲解数据清洗、转换、集成的过程,以及批处理和实时流处理的...
PyPI是Python开发者发布和分享自己开发的Python模块、库或工具的平台,用户可以方便地通过pip安装这些包。 描述中提到的“资源全名:CassandraLauncher-1.0.1.1.tar.gz”,进一步确认了这个包的完整名称和压缩格式...
分布式数据库,如Apache Cassandra、Google Spanner和Amazon DynamoDB,它们为大规模数据存储提供了高可用性和可扩展性。分布式事务则涉及如何在多节点间保证数据的一致性,例如两阶段提交、三阶段提交和Saga模式等...
2. **NoSQL数据库**:如MongoDB、Cassandra,它们适合处理非结构化和半结构化数据,提供水平扩展能力。 3. **流处理技术**:如Apache Kafka、Spark Streaming,用于实时处理高速流入的数据流。 4. **内存计算**:...
4. 数据库技术:可能涵盖了NoSQL数据库的兴起,如MongoDB、Cassandra等,对比传统的关系型数据库,分析其在大数据处理和高并发场景下的优势。 5. 容器技术:Docker尚未发布,但容器化概念可能已经初具雏形,杂志...