当咱们设计一个关系型数据库时,着手点是系统中的对象(Entities),再为对象加上属性描述,从而转换为表设计。在关系型数据库中咱们不会考虑表的行,由于肯定表的字段名称以后,数据逐行写入,数据库会管理行数据空间。数据库
宽行仍是窄行(Wild Rows or Skinny Rows)apache
但在Cassandra里,咱们必须在设计时考虑列族的行数,这取决于定义的列的数目。一般会有两种选择:数据结构
宽行(Wild Rows):在每行中包含数量巨大(一般会达到百万 级之多)的列,但只有不多的行数;less
窄行(Skinny Rows):比较像关系型数据库的使用方法,有少许较为固定的列,使用不一样、不断增长的行来存储。数据库设计
列排序(Column Sorting)ide
Cassandra不支持查询语言,也不支持查询时使用Order By对数据进行排序,排序是须要设计时考虑。在定义列族时,能够包含一个名为CompareWith的元素,这个元素决定了此列族的排序规则。Cassandra提供的排序支持如下几种数据类型,包含了字符、字节、数字和日期时间:AsciiType, BytesType, LexicalUUIDType, Integer Type, LongType, TimeUUIDType, or UTF8Typeui
设计原则(Design Principles)spa
Cassandra的数据结构设计与关系型数据库彻底不一样,核心有三大设计原则:物化视图、无值列和复合键。设计
物化视图(Materialized View)rest
在关系型数据库中,咱们一般会使用Where条件查询表的部分结果集,好比咱们设计了Users表,有一个City字段,而后使用Where City = 'New York'来进行查询。
SELECT FROM USERS WHERE CITY = "New York"
在Cassandra中,咱们会直接建立一个新的列族名为CityUsers,以City为行名称,列为全部在这个City中的Users
$ create column family CityUser;
$ set CityUsers["NewYork"]["UserID"] = "1, 2, 3, 4";
这在Cassandra里是一种很是广泛和常见的设计,物化视图为查询而设计一份映射数据,而不是从原始数据中去寻找。
无值列(Valueless Column)
以上面的Users/CityUsers为例,咱们设计了行名为City,列为Users的列族,由于数据是从Users列族中映射过来的,其实咱们并不须要为列指定内容,它能够直接引用Users表中的数据。
复合键(Aggregate Key)在《Cassandra – 理解关键概念和数据模型》为你们介绍过复合键的用法,在Cassandra中,大量使用复合键也是设计原则之一。 在设计Cassandra数据结构时,应当紧紧把握的两点:
从查询开始:Cassandra不是为对象而设计,而是为查询而设计。先看看系统中须要的查询是什么样的,再着手设计;
系统时间:由于Cassandra的列结构包含时间戳,因此你必须考虑从不一样客户端过来的时间格式,有必要指定一个统一的标准时间,固然,这将带来本地时间转换问题。
数据设计示例(Data Design Sample)
需求
查询指定地区的酒店
查询指定酒店的信息,包括名称和所在地区
查询酒店附近有趣的地点
查询指定日期区间可预订的房间
查询房间的评分
提交客户信息预订房间
关系型数据库设计
Screen Shot 2013-12-01 at 103208 AM
Cassandra数据结构设计
Screen Shot 2013-12-01 at 103412 AM
设计思路:
建立数据库结构;
建立酒店和附近场所的数据结构。酒店是普通列族,附近场所是超级列族;
查询指定地区的酒店,使用第二簇索引完成;
查询一个酒店,而后查询附近场所;
预订酒店时,向Reservation列族写入行数据。
Cassandrayaml
keyspaces:
- name: Hotelier
replica_placement_strategy: orgapachecassandralocatorRackUnawareStrategy
replication_factor: 1
column_families:
- name: Hotel
compare_with: UTF8Type
- name: HotelByCity
compare_with: UTF8Type
- name: Guest
compare_with: BytesType
- name: Reservation
compare_with: TimeUUIDType
- name: PointOfInterest
column_type: Super
compare_with: UTF8Type
compare_subcolumns_with: UTF8Type
- name: Room
column_type: Super
compare_with: BytesType
compare_subcolumns_with: BytesType
- name: RoomAvailability
column_type: Super
compare_with: BytesType
compare_subcolumns_with: BytesType
本文参考自《Cassandra: The Definitive Guide》
原文连接:Cassandra – 数据结构设计概念和原则
相关文章
1 数据库 - 概念结构设计
2 数据库设计----概念结构设计(概念模型、E—R模型、概念结构设计)
3 数据库原理 概念结构设计的方法
4 数据库原理(十 一)- 概念结构设计
5 数据库结构设计概念设计
6 数据库设计(1)_概念结构设计
7 数据库原理概念结构、逻辑结构设计案例
8 数据库原理 概念结构设计-E-R图及其设计
9 设计模式-----原则概念
10 数据库学习笔记(四)数据库设计——概念结构设计
更多相关文章
• 数据库是什么?数据库的概念 - MySQL教程
• Web 创建设计 - 网站建设指南
• TiDB 在摩拜单车在线数据业务的应用和实践
• Flink 数据传输及反压详解
用数据库固然可以,但是不值当吧,为了存一些资料和笔记,个人以后查着方便,就弄到数据库里面,从我的角度来说,太极端了。要知道,数据库文件,只能由数据库软件打开,也就是意味着,数据库每天都要备份一份文件带在身上(网盘也可以了),当你换电脑了,重做系统了,用单位电脑等情况,都需要在当前的机器上安装数据库引擎,然后把你最新备份的数据库文件还原(附加也可以),才能使用,何苦呢。
我的建议是使用“印象笔记”、one note、或者有道云笔记,这样的记事本,随时同步到云端,随时随地都可以看,没安装客户端,浏览器也可以看(one note貌似不能浏览器使用,但是现在还有谁的电脑不安装office吗,onenote是office套件里的产品)
这些网络笔记本,都支持标签,可以给不同的笔记、资料放到不同的文件夹下,放上不同的标签,查找也是很方便的。
以上就是关于valuelesscolumn的好坏全部的内容,包括:valuelesscolumn的好坏、想把我学习到一些资料和笔记整理成一个数据库类型的东西,关键是方便以后的搜索查找,该怎么办、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)