Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富.Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。
功能
Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。
这里有很多理由来选择Cassandra用于您的网站。和其他数据库比较,有三个突出特点:
1、模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。
2、真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
3、多数据中心识别:你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。
应用客户:Digg, Facebook, Twitter, Reddit, Rackspace, Cloudkick,
项目网址:http://cassandra.apache.org/
使用RingCache提高Cassandra读写效率
我们在之前的文章(谈谈Cassandra的客户端)中讲解了如果在Client端查询Cassandra中的数据。
为什么要使用RingCache
Cassandra的内部读写流程大概是这样的:
1 先随机找到Cassandra集群中的一台机器,然后将查询请求发送给这台Cassandra机器。
2 接收到查询请求的Cassandra机器会判断需要查询的数据是否在本机中:如果在本机中,直接查询;如果不在本机中,将请求转发给另外一台机器来查询,并等待另外一台机器的查询结果。
3 查询请求的Cassandra机器将最终的结果返回给Client端。
Cassandra 的限制
大家在使用Cassandra的时候,往往容易忽视Cassandra本身的限制。
在Wiki中,我们可以看到Cassandra的限制:CassandraLimitations
在Eclipse中开发Cassandra
在之前的文章中,我们讲解了Cassandra如何安装于配置:如何安装和配置Cassandra
在这篇文章中,我们将从svn中下载Cassandra的源代码,完成编译,并执行相应的单元测试。
配置环境
1 安装jdk6,ant。
2 安装Eclipse3.5
3 在Eclipse中安装http://subclipse.tigris.org/update_1.6.x
在Eclipse的菜单选择:Help –> Install New Software
整合Cassandra与Hadoop MapReduce
看到这个标题,大家一定会问了。这个整合如何定义?
我个人认为,所谓的整合是指:我们可以编写MapReduce程序,从HDFS中读取数据然后插入到Cassandra中。也可以是直接从Cassandra中读取数据,然后进行相应的计算。
介绍Cassandra中的压缩
在《如何安装和配置Cassandra》中,我们可以在DataFileDirectories中配置数据的存放位置。
当Cassandra启动后,向其中插入的数据就会放在DataFileDirectories的目录下,如图:
这里有2个Column Family,分别是Standrad1,Super1。
大家可以想象,如果没有压缩功能的话,那么随着数据量的增加,DataFileDirectories目录中的文件会越来越多。
在Cassandra中的压缩功能避免了在DataFileDirectories目录中存在大量的数据文件。
反转Cassandra索引
问题
通过前面的文章:《谈谈Cassandra的客户端》和《大话Cassandra数据模型》我们已经了解了Cassandra的数据模型和编程接口的情况。
假如我们在实际的应用中我们的数据是这样保存的:
每一个key对应了一些列的Column:port,Version,Service,Status等等。
通过某一个key,我们能够找到和这个key相关的所有Column的值。
假设我们要找到Column的name为Service,并且Column的值为app2的所有的Key值,那么我们应该如何操作呢?
根据Cassandra提供的Thrift API,我们并不能够直接找到这样的数据,唯一可以操作的方式就是通过KeyRange的方式:进行全表扫描,找到符合条件的值。
这种方式虽然可以解决问题,但是当数据量非常巨大的时候,进行这种查询的效率还是非常有限的。
使用Binary Memtable将大量数据导入Cassandra
在这篇《谈谈Cassandra的客户端》文章中,我们谈到了如何使用Thrift API以及更加高级的封装(Hector)如果将数据导入到到Cassandra中,但是在导入大量数据的时候这会遇到很多的问题,比如插入失败,超时等等问题。为了解决这个问题,我们可以尝试使用Binary Memtable。
在Cassandra的wiki上,对Binary Memtable的描述如下:
Binary Memtable is the name of Cassandra’s bulk-load interface. It avoids several kinds of overhead associated with the normal Thrift API:
Converting to Thrift from the internal structures and back
Routing (copying) from a coordinator node to the replica nodes
Writing to the commitlog
Serializing the internal structures to on-disk format
The tradeoff [...]
谈谈Cassandra的客户端
最近试用了一段时间Cassandra,将Oracle中的数据导入进来,遇到了问题然后解决问题,收获挺大。在这个过程中,除了设计一个合理的数据模型,再就是使用Cassandra API进行交互了。
Cassandra在设计的时候,就是支持Thrift的,这意味着我们可以使用多种语言开发。
对于Cassandra的开发本身而言,这是使用Thrift的好处:支持多语言。坏处也是显而易见的:Thrift API功能过于简单,不具备在生产环境使用的条件。
在Cassandra Wiki页面上,也有基于Thrift API开发的更加高级的API,各个语言都有,具体信息可以参考:http://wiki.apache.org/cassandra/ClientExamples。
这次只谈谈下面两类Java的客户端:
1 Thrift Java API
2 hector
基于Cassandra搭建简单Blog程序后台
在上一篇博客《大话Cassandra数据模型》中,我们讲解了Cassandra的数据模型。在这篇博客中,我们将基于Cassandra搭建一个简单的Blog程序后台。
需求
Blog程序的需求如下:
1 允许不同的用户写Blog。 2 Blog内容包括:标题,内容,ID,发布日期。 3 每一篇Blog可以打上任意多个Tag。 4 人们可以在Blog上留言,内容包括:留言内容,留言人的名字,留言时间。
大话Cassandra数据模型
Cassandra是一个开源的分布式数据库,结合了Dynamo的Key/Value与Bigtable的面向列的特点。
Cassandra的特点如下:
1.灵活的schema:不需要象数据库一样预先设计schema,增加或者删除字段非常方便(on the fly)。
2.支持range查询:可以对Key进行范围查询。
3.高可用,可扩展:单点故障不影响集群服务,可线性扩展。
我们可以将Cassandra的数据模型想象成一个四维或者五维的Hash。
分享到:
相关推荐
### Apache Cassandra 介绍 #### 一、概述 Apache Cassandra 是一套强大的开源分布式 Key-Value 存储系统,它被设计用于处理大规模数据的场景,并且能够实现高度的可伸缩性和容错性。Cassandra 不像传统的数据库...
**Cassandra详解** Cassandra是一款分布式NoSQL数据库系统,由Facebook于2008年设计,后成为Apache软件基金会的顶级项目。它被设计用于处理大规模数据,具有高可用性、可扩展性和线性可扩展性的特点。在本PPT中,...
amily 是 Cassandra 数据模型的核心组成部分,用来组织和管理 Column 和 SuperColumn。在 Cassandra 中,一个 ColumnFamily 相当于传统数据库中的表,但它不遵循严格的行与列的关系,而是以键值对的形式存储数据,...
Cassandra CQL 及其商业应用场景介绍 Cassandra 是一个分布式、支持类 SQL 的 NoSQL 数据库,具有高性能、高可用性和高可扩展性等特点。Cassandra 的核心能⼒力在于其分布式架构和高性能的读写能力。 CQL...
该书详细介绍了Cassandra的基本概念、安装、操作语言CQL的使用,以及如何高效地设计和管理数据模型。 从描述中我们可以得知,文档中可能包括了为什么选择Cassandra而不是其他数据库系统的比较,Cassandra提供的核心...
3. **Cassandra架构关键字**:介绍了Cassandra的四个关键组件,包括Gossip通信协议、Partitioner(分区策略)、ReplicaStrategy(副本策略)和Snitch(网络拓扑定义)。这些组件共同支撑起了Cassandra的分布式特性。...
本文主要介绍了基于Cassandra的实时气象数据分布式存储系统的设计和实现。该系统采用Cassandra作为分布式存储解决方案,旨在满足气象数据存储的高可用性和性能要求。 1. Cassandra关键技术点 Cassandra是一种开源...
总之,《Cassandra实战.pdf》不仅介绍了Cassandra的核心概念和技术细节,更重要的是提供了大量的实践案例和优化技巧,帮助读者从理论到实践全方位掌握这款强大的分布式数据库系统。无论是对于初学者还是资深技术人员...
综上所述,《Cassandra权威指南(中文)》涵盖了Cassandra的各个方面,不仅深入浅出地介绍了其基础知识和技术细节,还提供了丰富的实战案例和社区资源,对于初学者和专业人士来说都是一本不可或缺的手册。...
### 学习Apache Cassandra ...此外,书中还介绍了Cassandra与其他数据库系统的对比,帮助读者更好地理解Cassandra的优势所在。对于想要深入了解NoSQL数据库尤其是Cassandra的读者来说,本书是一本非常有价值的指南。
总而言之,Cassandra DataStax原理及安装的知识点涵盖了Cassandra的开源和DataStax的商业版DSE的介绍,它们的安装方法,以及如何使用OpsCenter、DevCenter等工具来管理和使用Cassandra集群。文档通过详细的步骤和...
介绍 Spring Cloud的Cassandra数据提供程序 教程 下载代码后,您必须编译,打包和安装。 该脚本启动EmbeddedCassandraService以运行JUnit测试。 mvn install 如果您的计算机中已经有一个Cassandra实例,则必须禁用...
Bigtable是由谷歌在2006年发布的一篇论文中介绍的一个分布式存储系统,它用于处理大量的结构化数据。Bigtable的数据模型基于列族概念,这直接影响了Cassandra的设计。Dynamo是由亚马逊在2007年推出的一个高可用性...
"Cassandra总体介绍" Cassandra是一款开源的、分布式的NoSQL数据库管理系统,由Facebook开发,后来捐赠给Apache基金会。Cassandra的设计目标是处理大量数据,提供高可用性和高扩展性,同时也具有良好的性能。 ...
文档《CQL for Cassandra 2.x》主要介绍了在Cassandra 2.1和2.0.x版本中使用CQL的指导。本文档详细阐述了CQL的数据建模、查询方法、数据类型、索引使用、轻量级事务处理、一致性级别跟踪以及一致性对性能影响等方面...
5. `README.md`:项目介绍和使用指南,可能包括环境配置、项目导入和运行步骤。 通过这个项目,你将深入理解Cassandra的数据模型,Spring Data Cassandra的使用方式,以及如何结合Lucene实现全文搜索。这将为你提供...
Cassandra使用手册详细介绍了数据库的安装、配置、数据模型、命令行操作、Java编程接口Thrift的使用,测试以及具体的系统实例实现。手册的目的是为了让用户能够系统地理解和掌握Cassandra的使用方法,从而在实际的...