NoSQL非关系型数据库
2015-10-09 09:06
309 查看
本文主要讲述我对NoSQL非关系型数据库的一点理解
1.NoSQL特点
a.模式自由:增删数据时不必进行数据完整性检查。不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式
b.逆范式化:为了减少数据冗余,增强数据一致性,SQL要进行范式要求第三范式,大量的连接操作会降低存储效率。nosql用空间换时间
c.多分区存储:传统SQL数据库将数据存储在单一节点上,通过增加内存和磁盘空间提升效率,这叫纵向扩展,不可持续,因为系统总会达到一个极限。NoSQL会将数据进行分区,将数据存储在多个节点上,横向扩展方式,提高性能,满足大数据时代要求
d.弹性可扩展:可在系统运行的过程中动态的删除或增加节点。NoSQL可再系统运行过程中动态的增加或删除节点,数据块可以在节点之间自动移动
e.多副本异步复制:为了保证数据的安全,NoSQL数据库会存储多个副本,比如Hadoop生态系统中的Hbase,借助于底层的HDFS分布式文件系统,默认情况下可以有三个副本,且存储在不同的三个节点上
f.软事务:不能完全满足事务的ACID特性,保证事务的最终一致性。事务是SQL数据库的概念,一个事务包含多个数据库操作,且这些操作要么全做要么都不做,比如银行转账,转账和收款就是一个完整的事务,他们是不可拆分的,这样才能保证系统中数据的一致性。NoSQL保证的是事务的最终一致性,即一个用户立即进行数据更新后,其余的用户不能立即得到最新的数据,会有一定延迟。比如12306中看到有票,可是点击买票的时候告诉我们票已售完,火车票数量的更新不能立即同步到所有的节点
2.什么是ACID特性?
A(atomic原子性) C(consistency一致性) I(isolation隔离性) D(durability持久性)
SQL数据库是必须要满足ACID特性的,但是NoSQL非关系型数据库对此没有任何要求
3.NoSQL适用的一些场景
一般对数据冗余程度比较高,并且对数据库不要求有事务一致性,比如像SNS网站,他们并不要求更新的东西要时刻同步在用户的界面,比如新浪微博这个app,实时更新的只有新鲜事下面的那个气泡提示,还有信息推送等,这些必须保证事务一致性,但是新鲜事里面的内容如果保证实时对用户更新的话,那对服务器的压力实在是太大了,并且有大量僵尸粉,服务器会做很多无用功。这时就没必要采用事务一致性,我们点刷新再更新信息,就算信息不是同步的,是过去式的,对我们也没有任何影响。
但是像银行系统就不行了,我们在转账的时候转入方和接收方的信息必须是同步的,如果钱转过去但是接收方的钱款没收到,那在电影里估计早就撕票了。
不能完全满足事务的ACID特性,保证事务的最终一致性
1.NoSQL特点
a.模式自由:增删数据时不必进行数据完整性检查。不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式
b.逆范式化:为了减少数据冗余,增强数据一致性,SQL要进行范式要求第三范式,大量的连接操作会降低存储效率。nosql用空间换时间
c.多分区存储:传统SQL数据库将数据存储在单一节点上,通过增加内存和磁盘空间提升效率,这叫纵向扩展,不可持续,因为系统总会达到一个极限。NoSQL会将数据进行分区,将数据存储在多个节点上,横向扩展方式,提高性能,满足大数据时代要求
d.弹性可扩展:可在系统运行的过程中动态的删除或增加节点。NoSQL可再系统运行过程中动态的增加或删除节点,数据块可以在节点之间自动移动
e.多副本异步复制:为了保证数据的安全,NoSQL数据库会存储多个副本,比如Hadoop生态系统中的Hbase,借助于底层的HDFS分布式文件系统,默认情况下可以有三个副本,且存储在不同的三个节点上
f.软事务:不能完全满足事务的ACID特性,保证事务的最终一致性。事务是SQL数据库的概念,一个事务包含多个数据库操作,且这些操作要么全做要么都不做,比如银行转账,转账和收款就是一个完整的事务,他们是不可拆分的,这样才能保证系统中数据的一致性。NoSQL保证的是事务的最终一致性,即一个用户立即进行数据更新后,其余的用户不能立即得到最新的数据,会有一定延迟。比如12306中看到有票,可是点击买票的时候告诉我们票已售完,火车票数量的更新不能立即同步到所有的节点
2.什么是ACID特性?
A(atomic原子性) C(consistency一致性) I(isolation隔离性) D(durability持久性)
SQL数据库是必须要满足ACID特性的,但是NoSQL非关系型数据库对此没有任何要求
3.NoSQL适用的一些场景
一般对数据冗余程度比较高,并且对数据库不要求有事务一致性,比如像SNS网站,他们并不要求更新的东西要时刻同步在用户的界面,比如新浪微博这个app,实时更新的只有新鲜事下面的那个气泡提示,还有信息推送等,这些必须保证事务一致性,但是新鲜事里面的内容如果保证实时对用户更新的话,那对服务器的压力实在是太大了,并且有大量僵尸粉,服务器会做很多无用功。这时就没必要采用事务一致性,我们点刷新再更新信息,就算信息不是同步的,是过去式的,对我们也没有任何影响。
但是像银行系统就不行了,我们在转账的时候转入方和接收方的信息必须是同步的,如果钱转过去但是接收方的钱款没收到,那在电影里估计早就撕票了。
不能完全满足事务的ACID特性,保证事务的最终一致性
相关文章推荐
- oracle SQL *Plus常用命令
- MYSQL数据库关联查询
- Freecms商业版 oracle添加信息时报错”转换请求无法实施或不合理”
- Entity FrameWork Oracle SQL参数问题
- [MSSQL]在Visual Studio 2008中调试本地SQL Server2005存储过程
- [MSSQL]SQL Server2000存储过程调试
- SQL Server 服务无法启动。有关详细信息,请参阅 SQL Server 联机丛书中的主题“如何查看 SQL Server 2005 安装日志文件”和“手动启动 SQL Server”
- win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程
- sql server 2005 32位+64位、企业版+标准版、CD+DVD 下载地址大全
- oracle手注
- mysql使用source导入,会自动断开并无法连接(编码问题)
- 监控 MySQL的多种方法
- 深入浅析Oracle数据库管理之创建和删除数据库
- Oracle Scott创建视图权限不足解决办法
- MYSQL在Windows 7下迁移安装路径教程
- MySQL锁表
- 如何正确的完全卸载MySQL
- mysql server has gone away的原因
- mongodb $exists
- mysql主从数据一致性校验及纠错工具