没有合适的资源?快使用搜索试试~ 我知道了~
近些年来,各种互联网+的公司如雨后春笋般出现,做一个在线平台或者做一个APP基本成为这些公司的标配。Web系统的流行,数据收集越来越容易,促使各类数据库系统应用得越来越广泛。我们在平时的技术讨论或者实际应用中经常会提到传统数据库。提到传统数据库,很多人会很容易联想到Oracle、MySQL、SQL Server等带有很明显关系型数据库特征的数据库系统。在我看来,传统数据库并不等于这些数据库,而是看你怎么用的。一般来说,传统数据库包括以下三个鲜明的特点:ACID一言以蔽之就是原子性、一致性、隔离性、持久化事务,它是四个单词的缩写:1.A
资源推荐
资源详情
资源评论
分布式数据库分布式数据库HBase的架构设计详解的架构设计详解
近些年来,各种互联网+的公司如雨后春笋般出现,做一个在线平台或者做一个APP基本成为这些公司的标配。Web系统的流
行,数据收集越来越容易,促使各类数据库系统应用得越来越广泛。
我们在平时的技术讨论或者实际应用中经常会提到传统数据库。提到传统数据库,很多人会很容易联想到Oracle、MySQL、
SQL Server等带有很明显关系型数据库特征的数据库系统。在我看来,传统数据库并不等于这些数据库,而是看你怎么用
的。一般来说,传统数据库包括以下三个鲜明的特点:
1、事务的保障:ACID
ACID一言以蔽之就是原子性、一致性、隔离性、持久化事务,它是四个单词的缩写:
1.Atomicity 原子性 事务中所有操作要么全部完成,要么全失败。
2.Consistency 一致性 在事务开始时或者结束时,数据库应该处于同一状态。
3.Isolation 隔离性 事务将假定只有它自己在操作数据库,彼此不知晓。
4.Durablity 一旦事务完成,就不能返回。
要做到ACID,从编程的角度来说,数据库系统一定会用到锁。
一般对事务要求比较高的主要是交易场景,银行系统、大型在线电商交易系统用得比较多。对于绝大多数创业公司而言,事务
是一个偏理论的概念。实际上在,在线系统中,事务是一个很有用的东西,我们举个栗子:
用户A在平台购买增值服务的场景,会有很多种处理方式。
一般的程序员会如下处理:
1.在财务表中增加一条用户A的扣费记录。(扣费)
2.在用户增值服务表中增加一条用户A的增值服务记录。(开通服务)
用户至上的程序员会如下处理:
1.在用户增值服务表中增加一条用户A的增值服务记录。(开通服务)
2.在财务表中增加一条用户A的扣费记录。(扣费)
三年以上工作经验的程序员会如下处理:
1.在财务表中增加一条用户A的扣费记录。(扣费)
2.判断财务表中是否扣费成功,不成功通知系统交易失败。
3.在用户增值服务表中增加一条用户A的增值服务记录。(开通服务)
4.判断用户增值服务表中是否增加成功,不成功删除财务表中的扣费并且通知系统交易失败。
那么用上事务之后,你只要提交给数据库一般程序员操作,数据库就会给你三年以上工作经验的程序员的操作结果,在主从架
构读写分离的数据库结构中效果还会更好。
2、丰富的数据类型和SQL的操作方式
传统的数据库系统可以存很多种类型的数据,主要包括:
1.数字家族、整数和小数。整数又可以分为32位的,64位的…
2.字符串类型。字符串又分为固定长度的和可变长度的…
3.时间家族。日期、时间…
4.二进制流…
这么多类型,确实很丰富。我们所看到的,都可以是字符,就算二进制流,也可以通过Base64转码用字符串表示。当然,在
讲字符串的时候,我们是把编程语言进化到了一个很高级的程度,开发的友好性大于存储成本。
对于传统数据库系统的常用操作,我们一般会说CURD。即对表的增删改查,基本都用SQL语句来实现。SQL语句的结构主要
分为以下几大部分:
1.操作,select、insert、update、delete。
2.表对象。
3.字段范围(*/f1/f2…)。
4.Where条件。
5.Order排序(desc/asc)。
6.查询范围限制(top/limit)。
……
SQL语句是为使用者友好而设计的,无论何种数据库引擎,SQL最后都被映射成为IO和内存操作。
3、严格的数据模型:行式存储
在传统数据库系统中,一般来说在第一次写入数据之前,都需要创建库和创建表,而每一个表都有确定的表头,确定列数,每
一列的名字以及确定的数据类型。在新数据的写入或者数据的修改的时候,数据库系统会根据创建好的表结构严格校验数据的
合法性,对表结构的调整一般都需要很大的修改代价。
在存储单元里,同一行的数据会分布在相邻的存储单元里。
列式存储相对于行式存储而言,其同一列的数据会分布在相邻的存储单元里。
题外话:除了行存储和列存储,常见还有文档模型,典型的代表就是MongoDB。如果用传统的行的角度来看,不同的行列数
可以不一样,列的名字和数据类型也可以不一样,列里面可以是另一个嵌套的行。
互联网的需求
在互联网化的大环境下,很多系统都很容易在短时间内系统收集上亿的数据,并且这些数据经过加工,还要为几十万、几百万
甚至更多用户提供访问。从平台角度来说,一般就是从小到大,从简单到复杂的过程。主要来说,具有一下三方面特点:
1.对数据高并发读写的要求
数据库读写压力巨大,硬盘IO无法承受。一般处理方法是主从架构,读写分离,分库、分表,缓解写压力,增强读库的可扩
展性。
2.对海量数据的存储和访问
存储记录数量有限,SQL查询效率极低的情况下。通过分库、分表,缓解数据增长压力。
3.伸缩性,可用性,可靠性方面的需求
剩余8页未读,继续阅读
资源评论
weixin_38668243
- 粉丝: 5
- 资源: 956
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功