
当咱们设计一个关系型数据库时,着手点是系统中的对象(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 数据传输及反压详解
目录
- 数据库分类维度:关系型/非关系型、交易型/分析型
- NoSQL数据库的进一步分类
- OLTP市场规模:关系型数据库仍占营收大头
- 数据库市场份额:云服务和新兴厂商主导NoSQL
- 开源数据库 vs 商业数据库
- 数据库三大阵营:传统厂商和云服务提供商
最近由于时间原因我写东西少了,在公众号上也转载过几篇搞数据库朋友的大作。按说我算是外行,没资格在这个领域品头论足,而当我看到下面这份报告时立即产生了学习的兴趣,同时也想就能看懂的部分写点心得体会分享给大家。
可能本文比较适合普及性阅读,让数据库领域资深的朋友见笑了:)
数据库分类维度:关系型/非关系型、交易型/分析型
首先是分类维度,上图中的纵轴分类为Relational Database(关系型数据库,RDBMS)和Nonrelational Database (非关系型数据库,NoSQL),横轴的分类为Operational(交易型,即OLTP)和Analytical(分析型,即OLAP)。
按照习惯我们先看关系型数据库,左上角的交易型类别中包括大家熟悉的商业数据库Oracle、MS SQL Server、DB2、Infomix,也包括开源领域流行的MySQL(MariaDB是它的一个分支)、PostgreSQL,还有云上面比较常见的SQL Azure和Amazon Aurora等。
比较有意思的是,SAP HANA正好位于交易型和分析型的中间分界处,不要忘了SAP还收购了Sybase,尽管后者今天不够风光了,而早年微软的SQL Server都是来源于Sybase。Sybase的ASE数据库和分析型Sybase IQ还是存在的。
右上角的分析型产品中包括几款知名的列式数据仓库Pivotal Greenplum、Teradata和IBM Netezza(已宣布停止支持),来自互联网巨头的Google Big Query和Amazon RedShift。至于Oracle Exadata一体机,它上面运行的也是Oracle数据库,其最初设计用途是OLAP,而在后来发展中也可以良好兼顾OLTP,算是一个跨界产品吧。
再来看非关系型数据库,左下角的交易型产品中,有几个我看着熟悉的MongoDB、Redis、Amazon DynamoDB和DocumentDB等;右下角的分析型产品包括著名的Hadoop分支Cloudera、Hortonworks(这2家已并购),Bigtable(来自Google,Hadoop中的HBase是它的开源实现)、Elasticsearch等。
显然非关系型数据库的分类要更加复杂,产品在应用中的差异化也比传统关系型数据库更大。Willian Blair很负责任地对它们给出了进一步的分类。
NoSQL数据库的进一步分类
上面这个图表应该说很清晰了。非关系型数据库可以分为Document-based Store(基于文档的存储)、Key-Value Store(键值存储)、Graph-based(图数据库)、Time Series(时序数据库),以及Wide Cloumn-based Store(宽列式存储)。
我们再来看下每个细分类别中的产品:
文档存储 :MongoDB、Amazon DocumentDB、Azure Cosmos DB等
Key-Value存储 :Redis Labs、Oracle Berkeley DB、Amazon DynamoDB、Aerospike等
图数据库 :Neo4j等
时序数据库 :InfluxDB等
WideCloumn :DataStax、Cassandra、Apache HBase和Bigtable等
多模型数据库 :支持上面不只一种类别特性的NoSQL,比如MongoDB、Redis Labs、Amazon DynamoDB和Azure Cosmos DB等。
OLTP市场规模:关系型数据库仍占营收大头
上面这个基于IDC数据的交易型数据库市场份额共有3个分类,其中深蓝色部分的关系型数据库(RDBMS,在这里不统计数据挖掘/分析型数据库)占据80%以上的市场。
Dynamic Database(DDMS,动态数据库管理系统,同样不统计Hadoop)就是我们前面聊的非关系型数据库。这部分市场显得小(但发展势头看好),我觉得与互联网等大公司多采用开源+自研,而不买商业产品有关。
而遵循IDC的统计分类,在上图灰色部分的“非关系型数据库市场”其实另有定义,参见下面这段文字:
数据库市场份额:云服务和新兴厂商主导NoSQL
请注意,这里的关系型数据库统计又包含了分析型产品。Oracle营收份额42%仍居第一,随后排名依次为微软、IBM、SAP和Teradata。
代表非关系型数据库的DDMS分类中(这里同样加入Hadoop等),云服务和新兴厂商成为了主导,微软应该是因为云SQL Server的基础而小幅领先于AWS,这2家一共占据超过50%的市场,接下来的排名是Google、Cloudera和Hortonworks(二者加起来13%)。
上面是IDC传统分类中的“非关系型数据库”,在这里IBM和CA等应该主要是针对大型机的产品,InterSystems有一款在国内医疗HIS系统中应用的Caché数据库(以前也是运行在Power小机上比较多)。我就知道这些,余下的就不瞎写了。
开源数据库 vs 商业数据库
按照流行度来看,开源数据库从2013年到现在一直呈现增长,已经快要追上商业数据库了。
商业产品在关系型数据库的占比仍然高达605%,而上表中从这列往左的分类都是开源占优:
Wide Cloumn:开源占比818%;
时序数据库:开源占比807%;
文档存储:开源占比800%;
Key-Value存储:开源占比722%;
图数据库:开源占比684%;
搜索引擎:开源占比653%
按照开源License的授权模式,上面这个三角形越往下管的越宽松。比如MySQL属于GPL,在互联网行业用户较多;而PostgreSQL属于BSD授权,国内有不少数据库公司的产品就是基于Postgre哦。
数据库三大阵营:传统厂商和云服务提供商
前面在讨论市场份额时,我提到过交易型数据库的4个巨头仍然是Oracle、微软、IBM和SAP,在这里William Blair将他们归为第一阵营。
随着云平台的不断兴起,AWS、Azure和GCP(Google Cloud Platform)组成了另一个阵营,在国外分析师的眼里还没有BAT,就像有的朋友所说,国内互联网巨头更多是自身业务导向的,在本土发展公有云还有些优势,短时间内将技术输出到国外的难度应该还比较大。(当然我并不认为国内缺优秀的DBA和研发人才)
第三个阵容就是规模小一些,但比较专注的数据库玩家。
接下来我再带大家简单过一下这前两个阵容,看看具体的数据库产品都有哪些。
甲骨文的产品,我相对熟悉一些的有Oracle Database、MySQL以及Exadata一体机。
IBM DB2也是一个庞大的家族,除了传统针对小型机、x86(好像用的人不多)、z/OS大型机和for i的版本之外,如今也有了针对云和数据挖掘的产品。记得抱枕大师对Informix的技术比较推崇,可惜这个产品发展似乎不太理想。
微软除了看家的SQL Server之外,在Azure云上还能提供MySQL、PostgreSQL和MariaDB开源数据库。应该说他们是传统软件License+PaaS服务两条腿走路的。
如今人们一提起SAP的数据库就想起HANA,之前从Sybase收购来的ASE(Adaptive Server Enterprise)和IQ似乎没有之前发展好了。
在云服务提供商数据库的3巨头中,微软有SQL Server的先天优势,甚至把它移植到了Linux拥抱开源平台。关系型数据库的创新方面值得一提的是Amazon Aurora和Google Spanner(也有非关系型特性),至于它们具体好在哪里我就不装内行了:)
非关系型数据库则是Amazon全面开花,这与其云计算业务发展早并且占据优势有关。Google当年的三篇经典论文对业界影响深远,Yahoo基于此开源的Hadoop有一段时间几乎是大数据的代名词。HBase和Hive如今已不再是人们讨论的热点,而Bigtable和BigQuery似乎仍然以服务Google自身业务为主,毕竟GCP的规模比AWS要小多了。
最后这张DB-Engines的排行榜,相信许多朋友都不陌生,今年3月已经不是最新的数据,在这里列出只是给大家一个参考。该排行榜几乎在每次更新时,都会有国内数据库专家撰写点评。
以上是我周末的学习笔记,班门弄斧,希望对大家有帮助。
参考资料《Database Software Market:The Long-Awaited Shake-up》
>
学习数据库对我来说是一直都计划学的 没接触的时候总是觉得它比较深奥或是不可接近的电脑知识 尽管自己对电脑非常感兴趣 其实还是有些心理上的陌生感 学习电脑就和我们平时的其它科目学习一样感觉它有永无止境的知识 在这从初接触电脑时连个电脑的键盘都不敢动到现在连硬盘都也修理 其中的过程是多么长啊 数据库是我在高中时候听过 到了大学渐渐了解了些 但就其原理性的内容还不知道 也就是根本就不清楚什么是数据库 只是知道一个所谓的中国字典里的名词 我认识它是从我接触网页制作开始的 初用FrontPage做网页也就是弄几个框图 没什么东西但还觉得不错 后来听朋友说这是最简单最普通的东东 朋友告诉我真真的网页起码也用到数据库这些东西了 有什么前台的后台的 听我的都晕头转向了 感觉自己是一个长不大的菜鸟了 之后我就去查找相关资料发现在数据库有很多种 这才对它有所了解 大一 大二的时候想学可不知道怎么学 从什么地方学起 当时也没注意选课本上有这类的课程 到了大三正式的课程也轻松些了 仔细观摩了选修课发现有数据库 有数据库原理和Oracle数据库 当时感觉Oracle数据库既然是单独一门课程一定会讲的比较细 也能学到真正实用的内容 选上了这门课以后发现和我想的基本是一样的 老师对学生也比较和蔼可亲 对我们要求也不是很紧 让每个人都觉得轻轻松松就能把这门课程学完 没有多么紧张的作业 也没有太苛刻的要求 当老师在最后说这个课程结束了 回顾一下以前老师给我们讲过的东西 真的有很多是我们应该去注意的 学习完Oracle数据库后感觉Oracle可分两大块 一块是开发 一块是管理 开发主要是写写存储过程 触发器什么的 还有就是用Oracle的Develop工具做form 有点类似于程序员 当然我可不是什么程序员 有几个程序员朋友他们是我的偶像 开发还需要有较强的逻辑思维和创造能力 自己没有真正做过 但感觉应该会比较辛苦 是青春饭 管理则需要对Oracle数据库的原理有深刻的认识 有全局 *** 纵的能力和紧密的思维 责任较大 因为一个小的失误就会down掉整个数据库 相对前者来说 后者更看重经验 这些东西都是从老师哪里和朋友的讨论中得到的心得 也希望其他朋友能多多向老师和朋友请教 如果是个人单独靠自己来完成一个完美的数据库我觉得比较困难 现在基本上都是团队类型的 而且他们的效率高开发的周期也快 在烟台的 NET俱乐部认识几个比较历害的人 他们的团队精神我比较佩服 像我这样一个大学生和他们说起来太菜了 由于数据库管理的责任重大 很少公司愿意请一个刚刚接触Oracle的人去管理数据库 对于我们这些初出茅庐的新手来说 个人认为可以先选择做开发 有一定经验后转型 去做数据库的管理 当然 这个还是要看人个的实际情况来定 其实在烟台大学里学生中有做的好的也是有 只不过通常象这些兄弟们我觉得很少能发现在 因为我只知道一个 在烟雨楼台的BBS版块里有个程序版块 这位版主以前就是学校网络中心的牛人 他曾告诉我学习的方法就是 看书 思考 写笔记 做实验 再思考 再写笔记 我觉得说的很对 对于新手来说就要这样 不断的去努力奋斗 最后一定能得到自己想要的成果 对于学习Oracle数据库从网络上找资料我认为是比较好的 现在的网络又这么的发达应该去充分利用 我知道Oracle的官方网站 这里有Oracle的各种版本的数据库 应用工具和权威的官方文档 虽然我是个新手 但是常到哪些相关的数据库论坛或是网站觉得每次的收获都不小 网络对我来说可是个重要的东西 除了Oracle数据库对于其它的一些电脑知识都从网络里学习了不少 我常用的一个搜索网站就是大家都熟悉的百度了() 以前没接触过它 现在认识了它才知道Oracle的体系很庞大 要学习它 首先要了解Oracle的框架 它有物理结构(由控制文件 数据文件 重做日志文件 参数文件 归档文件 密码文件组成) 逻辑结构(表空间 段 区 块) 内存分配(SGA和PGA)算机的实际内存中得以分配 如果实际内存不够再往虚拟内存中写 后台进程(数据写进程 日志写进程 系统监控 进程监控 检查点进程 归档进程 服务进程 用户进程) SCN(System Change Number) 这些东西感觉都比较专业 我对它们也就是个知道 想要真真去认识我还得努力去做 虽然懂得还不是很多 起码会了基本的软件 *** 作 老师说我们用的都是客户端 服务端看不到 也不知道服务端是什么样的 只知道客户端就挺多东西的 没有真正的去学习利用是很难掌握的 Oracle数据库的学习使我对数据库的有了新的进步 以后再看到也就不至于什么也不懂 其实那么多数据库我觉得学好一门就行 只是他们的语言可能不大一样 学好一门后就可去认识其它的 这样应该有事半功倍的效果 就像我学习C语言 当时不能说是学习的棒 但不算差 所以我对以后的语言感觉都不是很困难 了解了VB C++还有网页中用的Html语言 asp语言都能看懂 起码可以对别人的东西进行了一下修改 因此 我感谢Oracle数据库老师给了我有用的知识 以便我在以后学习或认识更多的内容能有新的方法和思维 也能更加有效和快速的去消化吸收新的东西 希望在今后中 Oracle能给我更多帮助 让我在我熟悉的VB中运用上去 我以前的一个目标是要为学校的选课做一个选课助手来帮助大学 就用我的VB 不过因为种种原因一直没有完成 也包括我对数据库的不了解 因为学了Oracle以后知道第一项内容是通过SQL查询后得到的 如果去把它们联系起来还不是真正明白 不过我相信我的目标能在学习Oracle后得到进展 lishixinzhi/Article/program/Oracle/201311/18934
权限包括:
SELECT
INSERT
UPDATE[(col1,col2)]; 可以加括号表示只赋予特定列的权限
DELETE
ALTER
ALL PRIVILEGES
CREATE INDEX
CREATE TABLE
ALL PRIVILEGES
PUBLIC 关键字可以替换用户名 代表全体用户
ALL 关键字替代权限 代表所有权限
WITH GRANT OPTION 表示 赋予用户权限的权限
GRANT OPTION FOR表示撤销赋予用户权限的权限
我们可以把权限赋予角色 然后将角色赋予用户 简化 *** 作。
创建角色
CREATE ROLE ROLENAME;
GRANT 权限 ON 表名 TO 角色;
将角色赋予用户
GRANT ROLENAME TO USERNAME;
GRANT CONNECT TO laurent IDENTIFIED BY motDePasse
mysql
MySQL数据库总结笔记第三章

OpenSource_
原创
关注
0点赞·77人阅读
第三章
总结笔记:
表数据的 *** 作 增 删 改 查
1插入数据
insert into 表名(字段1,字段2,字段n) values(字段值1,字段值2,字段值n);
insert into 表名 values(列1的值,列2的值,列n的值);
注意省略列的时候,后面值应与建表时列的顺序一致
insert into 表名 values(列1的值,列2的值,列n的值),(列1的值,列2的值,列n的值);
多条语句的添加,多条数据之间用逗号隔开
2外键(依赖于某一张表)
主要是维护表之间的关系的,保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键
学生表student 外键classno 班号
班级表class 主键classno 班号
学生表中:classno int(4) references class(classno
注意:一个表中可以有多个外键约束,添加外键的值一定要来源于参照表的主键的值
删除的时候 先删子表,再删父表
3查询数据 代表所有列
select from 表名 [where条件表达式];
select name from student where id=2; 查什么 在哪里查 是否有条件
4修改数据 不添加条件的话,会修改表中所有信息
update 表名 set 字段名1=字段1值,字段名2=字段2值,字段名n=字段n值 [where条件表达式];
5删除数据 不添加条件的话,会删除表中所有信息
delete from 表名 [where条件表达式];
初学数据库应该从以下几点进行学习:
一、编程语言基础
新手学大数据,首先要掌握基础的编程语言基础,比如Java、C++等,要初步掌握面向的对象、抽象类、接口及数据流及对象流等基础,如果有疑问,可以去网上搜索相关书籍,再结合自己的疑问去翻书,就能很快的熟悉了解数据库的基础技术原理。
二、Linux系统的基本 *** 作
Linux系统的基本 *** 作是大数据不可分割的一部分,企业的MySQL大数据的组件都是跑在linux环境下的,所以学会linux常用命令不能缺少,重点是要学习一下Linux环境的搭建,搭建平台,,能写shell程序就会更好了。
三、学习Hadoop架构设计
要学大数据,首先要了解的是如何在单台Windows系统上通过虚拟机搭建多台Linux虚拟机,从而构建Hadoop集群,再建立spark开发环境,环境搭建成功后在网上搜罗一些demo,sql脚本之类,直接动手敲进去一点一点体会。
四、采用机器学习模式
为了发挥出大数据的优势,提升你的办公效率,就需要实 *** 并应用其中的内容,必然也会涉及大量机器学习及算法,这能最大化的发挥出计算机的性能,也是大数据的优势所在。
想了解更多有关数据库的相关信息,推荐咨询达内教育。作为国内IT培训的领导品牌,达内的每一名员工都以“帮助每一个学员成就梦想”为己任,也正因为达内人的执着与努力,达内已成功为社会输送了众多合格人才,为广大学子提供更多IT行业高薪机会,同时也为中国IT行业的发展做出了巨大的贡献。
以上就是关于valuelesscolumn的好坏全部的内容,包括:valuelesscolumn的好坏、一份难得的数据库市场分析报告、学习Oracle数据库的心得体会等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)