带你入门NoSQL(真的是太全了)

引子:

在我们开发过程中,数据库是一个很常用的数据存储工具,我们对sql运用的可以说如火纯情了,但不知道大家有没有想过,传统关系型数据库是关系的,而存储结构是面向对象的,这种情况下,每次存储或者查询时,都需要对数据进行转换,随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题。在数据存储方面,关系数据库只能存储关系型数据,不能进行页面、图表存储。

我们不禁会思考,为什么不能有数据库可以适应多种数据结构的存储
有没有数据库在经过简单便捷的配置之后就可以解决高数据并发问题

正题

本文将大家带从正面侧面全面了解NoSQL数据库。
首先从概念说起:

1. 概念

NoSQL,直译:不仅仅是sql,是传统数据库的简化版本,减少不常用的功能,来大幅度提高产品性能

2. 为什么会出现Nosql呢?

以我们最常用的MySQL关系型数据库对比
(1)结构方面:
关系型数据库由于结构的限制不能满足高性能查询需求;
java编程是面向对象的,但数据库是关系型数据库。存储结构是面向对象的,单数据库却是关系的,所以在每次存储或查询时,都需要进行数据转换,对性能要求不高时,MyBatis、Hibernate可以简化优化,但在高数据高性能时效率就有些达不到
(2)扩展方面:
应用程序规模的变大时,扩展复杂;
在网络应用程序的规模变大,数据存储量变大时,我们需要不停地扩展。扩展有以下两种方式
①纵向扩展:提高机器性能
②横向扩展:组建集群,关系型数据库组建集群使用Mycat,需要配置多个数据源,相对复杂
但上述方式要不然增加资金成本,要不然增加人力成本,实现不方便
通俗来讲,就是关系型数据库在某些方面不能满足开发者的需求了,需要改变创新,这时NoSQL就慢慢的出现在大众的视野中。

3. 意义

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

4. NoSQL数据库类型

(1)键值(key-value)对形式存储

代表性数据库:【Redis/Memcached】
键值对形式存储,通过key快速查询到其value,规定了key必须是String类型,而value可以为String、list、hash、set、zset五中数据类型,限制性比较小,并且读写速率也是非常快的。

(2)数据可以使用XML\JSON\JSONB形式等面向文档存储

代表性数据库【MongoDB】
可以使用多种形式存储数据,说明我们在开发时不需要考虑数据库表的设计,大大提高了我们的开发效率
MongoDB自带了副本集的概念,通过设计适合自己业务的副本集和驱动程序,可以非常有效和方便地实现高可用,读负载均衡

(3)列存储

代表性数据库【HBASE】
每一行都有一个可以排序的rowKey和任意多的列,列可以根据需要动态增加,同一张表的不同行可以有截然不同的列。

(4)图存储

代表性数据库【Neo4J】
比起传统的信息存储和组织模式,图数据库能够很清晰揭示复杂的模式
常用于网络拓扑分析图存储

5. 传统关系型数据库与NOSQL区别

关系型:
(1)高度组织化结构化数据
(2)查询语句结构化
(3)数据和关系存储在单独的表中
(4)数据操纵语言,数据定义语言
(5)严格的一致性
(6)基础事务
NOSQL
(1)没有生命性查询语言
(2)没有预定义的存储模式
(3)最终的一致性,而非ACID[原子、一致、隔离、持久]属性
(4)非结构化和不可预知的数据
CAP定力【一致性、可用性、容错性】

6.Nosql的特点:

(1)易扩展  
(2)大数据量高性能
(3)多样灵活的数据关系

7、总结,如何选择

选择数据库是一个相对性问题,需根据系统的功能以及性能选择出适合自己的数据库
这里只对我自己的想法做以陈述:
(1)管理类系统实时性不高数据量小时使用关系型数据库就够了;

(2)商城类秒杀功能的并发量高,性能要求高,可将关系型数据库与【Redis】数据库结合使用

(3)市场分析、社交,物流,金融风控行业系统需要用图片来反应数据的,可使用【Neo4J】图处理数据库

(4)交通、 金融、电商、信息类系统,需要进行海量数据存储,并需要准实时查询的情况,可使用【Hbase】数据库

(5)对象或JSON 数据存储网站实时存储的系统,可使用【MongoDB】数据库
到这里,整个文章就结束了,能看到这里的都是努力小码农

简单介绍一下。我是Myy,一个有灵魂的程序员。两年开发经验,想和大家一起学习,一起成长,我创建了“烧脑程序杂谈”这个公众号,专注于分享有趣的
Java 技术编程和有益的程序人生。

你在看这篇文章的时候,应该也能发现,我们都是努力的小码农,如果你也喜欢我的文章,请记得微信搜索「烧脑程序杂谈」关注我的原创公众号,公众号中有我工作学习中整理的
Java 面试攻略,以及各位老师们的技术视频哦。绝对不容错过,期待与你一同成长,一同进步。

由于个人经验较少,不能保证写的文章中没有问题,但能保证文章中每句话都是我认真推敲、仔细斟酌之后写出来的。
如果你有发现文中有写的不对的地方,欢迎提出您宝贵的意见

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一部分  NoSQL入门 第1章  NoSQL的概念及适用范围 2 1.1  定义和介绍 3 1.1.1  背景与历史 3 1.1.2  大数据 5 1.1.3  可扩展性 7 1.1.4  MapReduce 8 1.2  面向列的有序存储 9 1.3  键/值存储 11 1.4  文档数据库 14 1.5  图形数据库 15 1.6  小结 16 第2章  NoSQL上手初体验 17 2.1  第一印象——两个简单的例子 17 2.1.1  简单的位置偏好数据集 17 2.1.2  存储汽车品牌和型号数据 22 2.2  使用多种语言 30 2.2.1  MongoDB驱动 30 2.2.2  初识Thrift 33 2.3  小结 34 第3章  NoSQL接口与交互 36 3.1  没了SQL还剩什么 36 3.1.1  存储和访问数据 37 3.1.2  MongoDB数据存储与访问 37 3.1.3  MongoDB数据查询 41 3.1.4  Redis数据存储与访问 43 3.1.5  Redis数据查询 47 3.1.6  HBase数据存储与访问 50 3.1.7  HBase数据查询 52 3.1.8  Apache Cassandra数据存储与访问 54 3.1.9  Apache Cassandra数据查询 55 3.2  NoSQL数据存储的语言绑定 56 3.2.1  Thrift 56 3.2.2  Java 56 3.2.3  Python 58 3.2.4  Ruby 59 3.2.5  PHP 59 3.3  小结 60 第二部分  NoSQL基础 第4章  理解存储架构 62 4.1  使用面向列的数据库 63 4.1.1  使用关系型数据库中的表格和列 63 4.1.2  列数据库对比RDBMS 65 4.1.3  列数据库当做键/值对的嵌套映射表 67 4.1.4  Webtable布局 70 4.2  HBase分布式存储架构 71 4.3  文档存储内部机制 73 4.3.1  用内存映射文件存储数据 74 4.3.2  MongoDB集合和索引使用指南 75 4.3.3  MongoDB的可靠性和耐久性 75 4.3.4  水平扩展 76 4.4  键/值存储Memcached和Redis 78 4.4.1  Memcached的内部结构 78 4.4.2  Redis的内部结构 79 4.5  最终一致性非关系型数据库 80 4.5.1  一致性哈希 81 4.5.2  对象版本 82 4.5.3  闲话协议和提示移交 83 4.6  小结 83 第5章  执行CRUD操作 84 5.1  创建记录 84 5.1.1  在以文档为中心的数据库中创建记录 85 5.1.2  面向列数据库的创建操作 91 5.1.3  键/值映射表的创建操作 93 5.2  访问数据 96 5.2.1  用MongoDB访问文档 96 5.2.2  用HBase访问数据 97 5.2.3  查询Redis 98 5.3  更新和删除数据 98 5.3.1  使用MongoDB、HBase和Redis更新及修改数据 98 5.3.2  有限原子性和事务完整性 99 5.4  小结 100 第6章  查询NoSQL存储 101 6.1  SQL与MongoDB查询功能的相似点 101 6.1.1  加载MovieLens数据 103 6.1.2  MongoDB中的MapReduce 108 6.2  访问HBase等面向列数据库中的数据 111 6.3  查询Redis数据存储 113 6.4  小结 116 第7章  修改数据存储及管理演进 117 7.1  修改文档数据库 117 7.1.1  弱schema的灵活性 120 7.1.2  MongoDB的数据导入与导出 121 7.2  面向列数据库中数据schema的演进 124 7.3  HBase数据导入与导出 125 7.4  键/值存储中的数据演变 126 7.5  小结 126 第8章  数据索引与排序 127 8.1  数据库索引的基本概念 127 8.2  MongoDB的索引与排序 128 8.3  MongoDB里创建和使用索引 131 8.3.1  组合与嵌套键 136 8.3.2  创建唯一索引和稀疏索引 138 8.3.3  基于关键字的搜索和多重键 139 8.4  CouchDB的索引与排序 140 8.5  Apache Cassandra的索引与排序 141 8.6  小结 143 第9章  事务和数据完整性的管理 144 9.1  RDBMS和ACID 144 9.2  分布式ACID系统 147 9.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值