Cassandra数据模型设计

本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使用Cassandra数据模型设计的一些实践。其中一些最佳实践我们是通过社区学到的,有些对我们来说也是新知识,还有一些仍然具有争议性,可能在要通过进一步的实践才能从中获益。

本文中,我将会讲解一些基本的实践以及一个详细的例子。即使你不了解Cassandra,也应该能理解下面大多数内容。

说说Cassandra在ebay的使用情况

我们尝试使用Cassandra已经超过1年时间了。Cassandra现在正在服务一些用例,涉及到的业务从大量写操作的日志记录和跟踪,到一些混合工 作。其中一项服务是我们的“Social Signal”项目,支撑着ebay的pruduct pages里like/own/want特性。我们开发的一些用例已经上线运行,但更多的还是处于开发阶段。

我们的Cassandra集群规模并不庞大,但正在稳步的增长中。在过去几个月里,我们共部署了几十个节点,它们分布在几个跨机房的小型集群中。你可能会 问,为什么要多个集群?我们通过的职能部门和业务来划分集群。相同职能部门的相同业务的用例共享一个集群,但它们存在于不同的keyspaces中。

RedLaser, Hunch和其它ebay的合作伙伴也在尝试cassandra解决现实中各种问题。除了Cassandra,我们也在使用MongoDB和Hbase,本文中我不会讨论它们,但我相信它们都有各自的优点。

我相信此时你一定有很多问题,在这篇文章里暂时不会一一说明。在即将到来的Cassandra Summit大会,我将更详细的讲解我们每个用例场景,数据模型和多数据中心部署,以及经验教训和其它知识。

本文重点讲述我们在ebay应用的Cassandra数据模型设计最佳实践。下面让我们先看看这系列文章会用到的一些术语。

术语和约定

  • 术语“Column Name” 和 “Column Key”被认为是一样的。同样的,“Super Column Name” 和 “Super Column Key”也认为是相同的。
  • 下图表示一个 Column Family (简称CF)中的一个row

    基于上面的内容,让我们开始第一个实践吧!

    不要把Cassandra model想象成关系型数据库table

    取而代之,应该把它想象成事一个有序的map结构。

    对于一个新手来说,下面关系型数据库术语常常被对应到Cassandra模型

    这种对比可以帮助我们从关系型数据库转换到非关系型数据库。但是当设计Cassandra column famiy的时候请不要这样去类比。取而代之,考虑它是一个map中嵌入另一个map:外部map的key为row key,内部map的key为column key,两个map的key都是有序的。如下:

    • 下图表示一个 Super Column Family (简称SCF)中的一个row

    • 下图表示一个Column Family中一个row,它包含Composite Columns。Composite Columns的属性通过分隔符’|’连接。请注意,这里看到的只是数据的表现形式,Cassandra内置了Composite Column,它是一个对象,并不是使用’|’作为属性分隔符的字符串。(顺便说下,本文不要求你掌握Super Column和Composite Column方面知识。)

时间: 2024-10-12 19:07:34

Cassandra数据模型设计的相关文章

Cassandra 数据模型设计,根据你的查询来制定设计——反范式设计本质:空间换时间

转自:http://www.infoq.com/cn/articles/best-practice-of-cassandra-data-model-design 不要把Cassandra model想象成关系型数据库table 取而代之,应该把它想象成事一个有序的map结构. 对于一个新手来说,下面关系型数据库术语常常被对应到Cassandra模型 这种对比可以帮助我们从关系型数据库转换到非关系型数据库.但是当设计Cassandra column famiy的时候请不要这样去类比.取而代之,考虑

数据模型设计

数据模型设计 1.整体框架约束下的迭代渐进 谈到关系数据模型设计,首先想到的可能会是"概念数据模型设计"及实体关系图(ER图),但我认为完整的数据库数据模型设计需要经过三个阶段:(1) 数据总体结构设计:(2) 概念数据模型设计:(3) 构建数据库模式. 2 数据总体结构设计 由于总体结构只是一个静态框架,因此总体结构设计只涉及静态对象建模,建模工具采用UML. 根据面向对象分析与设计方法,总体结构设计工作可按下列流程开展:(1) 剖析问题域(工作流与数据流分析):(2) 划分对象(面

如何在spark中读写cassandra数据 ---- 分布式计算框架spark学习之六

由于预处理的数据都存储在cassandra里面,所以想要用spark进行数据分析的话,需要读取cassandra数据,并把分析结果也一并存回到cassandra:因此需要研究一下spark如何读写cassandra. 话说这个单词敲起来好累,说是spark,其实就是看你开发语言是否有对应的driver了. 因为cassandra是datastax主打的,所以该公司也提供了spark的对应的driver了,见这里. 我就参考它的demo,使用scala语言来测试一把. 1.执行代码 //Cassa

Cassandra 数据如何更新

数据如何更新 Apache Cassandra™(DDAC)数据库的DataStax分发将每个新行都视为upsert:如果新行的主键与现有行的主键相同,则数据库会将其作为对现有行的更新进行处理. 在写入过程中,Cassandra会将每个新行添加到数据库中,而无需检查是否存在重复记录.此策略使数据库中可能存在同一行的许多版本. 定期将存储在内存中的行流式传输到磁盘中,称为SSTables结构.在某些时间间隔,数据库会将较小的SSTable 压缩为较大的SSTable.如果在此过程中数据库遇到同一行

大数据运营之渠道数据模型设计

渠道是企业将产品和服务交付给客户的一种手段.渠道可以整合各种产品和服务,在产品日益同质化的今天,渠道在社会中的重要性越来越突出. 渠道在产品和服务的提供方和消费方之间的作用如图3-4-5所示: 图3-4-5渠道是连接客户与产品/服务的桥梁和纽带 按产权归属,可以将渠道分为自有渠道和社会渠道:按照存在形态,可以将渠道分为实体渠道和电子渠道. 企业的渠道服务体系如图3-4-6所示: 图3-4-6企业渠道服务体系示例 电子渠道可以降低产品和服务交付成本,提供客户获取产品和服务的便捷性,在互联网发达的今

低调、奢华、有内涵的敏捷式大数据方案:Flume+Cassandra+Presto+SpagoBI

基于FacebookPresto+Cassandra的敏捷式大数据 目录 1      概述...3 1.1       Cassandra.3 1.1.1        特点...3 1.1.2        系统架构...4 1.2       Presto.4 1.2.1        特点...4 1.2.2        系统架构...5 2      环境准备...5 2.1       主机...5 2.2       用户...5 2.3       程序包...6 2.4   

Cassandra简介

在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介绍. 接触Cassandra的原因与接触Neo4J的原因相同:我们的产品需要能够记录一系列关系型数据库所无法快速处理的大量数据.Cassandra,以及后面将要介绍的MongoDB,都是我们在技术选型过程中的一个备选方案.虽然说最后我们并没有选择Cassandra,但是在整个技术选型过程中所接触到的一系列内部

NoSQL数据建模技术

原文来自“NoSQL Data Modeling Techniques”,由酷壳网陈皓编译<NoSQL数据建模技术>.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西.总体来说,我觉得NoSQL更适合做Cache. 下面是正文: NoSQL数据库经常被用作很多非功能性的地方,如,扩展性,性能和一致性的地方.这些NoSQL的特性在理论和实践中都正在被大众广泛地研究着,研究的

NoSQL 数据建模技术(转)

本文转载自:http://coolshell.cn/articles/7270.html ================================================ 全文译自墙外文章"NoSQL Data Modeling Techniques",译得不好,还请见谅.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西.总体来说,我觉得NoSQL