学了那么多 NoSQL 数据库 NoSQL 究竟是啥

LogicAetherX
• 阅读 210

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

NoSQL 简史

  

  NoSQL 一词最早出现于 1998 年,是 Carlo Strozzi 开发的一个轻量、开源、不提供 SQL 功能的关系数据库。

  2009 年,Last.fm 的 Johan Oskarsson 发起了一次关于分布式开源数据库的讨论,来自 Rackspace 的 Eric Evans 再次提出了 NoSQL 的概念,这时的 NoSQL 主要指非关系型、分布式、不提供 ACID 的数据库设计模式。

  2009 年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false"。因此,对 NoSQL 最普遍的解释是"非关联型的",强调 Key-Value Stores 和文档数据库的优点,而不是单纯的反对 RDBMS。

  

什么是 NoSQL

  

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

  NoSQL(Not Only SQL),意思是"不仅仅是 SQL",指的是非关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称。

  NoSQL 用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

  

为什么使用 NoSQL

  

  随着互联网的飞速发展与普及,网民上网冲浪时所产生数据也逐日增多,从 GB 到 TB 到 PB。这些数据有很大一部分都是由关系型数据库管理系统(RDBMS)来进行处理的。

  由于关系型数据库的范式约束、事务特性、磁盘 IO 等特点,若服务器使用关系型数据库,当有大量数据产生时,传统的关系型数据库已经无法满足快速查询与插入数据的需求。NoSQL 的出现解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,获取性能上的提升。但是,在某些特定场景下 NoSQL 仍然不是最佳人选,比如一些绝对要有事务与安全指标的场景。

  NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至 2009 年趋势越发高涨。NoSQL 的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

  

RDBMS vs. NoSQL

  

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

  

常见的数据库管理系统

  

  根据 DB-Engineshttps://db-engines.com/en/ran... 的排行,本文截取了排行榜 Top 50 如下图所示。DB-Engines 排名根据数据库管理系统的受欢迎程度对其进行排名。该排名每月更新一次。

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

  

NoSQL 数据库四大家族

  

键值(Key-Value)存储

  

  特点:键值数据库就像传统语言中使用的哈希表。通过 Key 添加、查询或者删除数据。

  优点:查询速度快。

  缺点:数据无结构化,通常只被当作字符串或者二进制数据存储。

  应用场景:内容缓存、用户信息比如会话、配置信息、购物车等,主要用于处理大量数据的高访问负载。

  NoSQL 代表:Redis、Memcached...

  

文档(Document-Oriented)存储

  

  特点:文档数据库将数据以文档的形式储存,类似 JSON,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。

  优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构。

  缺点:查询性能不高,缺乏统一的查询语法。

  应用场景:日志、 Web 应用等。

  NoSQL 代表:MongoDB、CouchDB...

  

列(Wide Column Store/Column-Family)存储

  

  特点:列存储数据库将数据储存在列族(Column Family)中,将多个列聚合成一个列族,键仍然存在,但是它们的特点是指向了多个列。举个例子,如果我们有一个 Person 类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。

  优点:列存储查找速度快,可扩展性强,更容易进行分布式扩展,适用于分布式的文件系统,应对分布式存储的海量数据。

  缺点:查询性能不高,缺乏统一的查询语法。

  应用场景:日志、 分布式的文件系统(对象存储)、推荐画像、时空数据、消息/订单等。

  NoSQL 代表:Cassandra、HBase...

  

图形(Graph-Oriented)存储

  

  特点:图形数据库允许我们将数据以图的方式储存。

  优点:图形相关算法。比如最短路径寻址,N 度关系查找等。

  缺点:很多时候需要对整个图做计算才能得出需要的信息,分布式的集群方案不好做,处理超级节点乏力,没有分片存储机制,国内社区不活跃。

  应用场景:社交网络,推荐系统等。专注于构建关系图谱。

  NoSQL 代表:Neo4j、Infinite Graph...

  

NoSQL 的优缺点

  

优点

  

  • 高可扩展性
  • 没有标准化
  • 分布式计算
  • 有限的查询功能(到目前为止)
  • 低成本

  

缺点

  

  • 最终一致是不直观的程序
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系

  

总结

  

  NoSQL 数据库在以下几种情况下比较适用:

  • 数据模型比较简单
  • 需要灵活性更强的 IT 系统
  • 对数据库性能要求较高
  • 不需要高度的数据一致性
  • 对于给定的 Key,比较容易映射复杂值的环境

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

本文采用 知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议

大家可以通过 分类 查看更多关于 NoSQL 的文章。

  

? 您的点赞转发是对我最大的支持。

? 关注公众号 哈喽沃德先生「文档 + 视频」每篇文章都配有专门视频讲解,学习更轻松噢 ~

学了那么多 NoSQL 数据库 NoSQL 究竟是啥

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Redis01——Redis介绍
1、NoSQL数据库概述  NoSQL(NoSQLNotOnlySQL),意即“不仅仅是SQL”,泛指非关系型的数据库。  NoSQL不依赖业务逻辑方式存储,而以简单的keyvalue模式存储。因此大大的增加了  数据库的扩展能力  特点:不遵循SQL标准,不支持ACID,远超于SQL的性能  适
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
NoSQL简史汇编
NoSQL的历史非常之短,完整历史也就三段完结,本文叫汇编就更短了!(http://my.oschina.net/js/ke/plugins/emoticons/images/28.gif),只是对一些英文纪录的翻译补充.在之前SQL数据库。1990年代,NoSQL这个词才第一次被使用,具体年份是1998,用来描述一个不采用SQ
非关系型数据库(NoSQL)
NoSQL是区别于传统关系数据库的数据库管理系统的总称。NoSQL数据库的产生是为了解决和多种数据类型带来的挑战,尤其是大数据应用问题。因为NoSQL数据库去掉了关系数据模型的特点,数据之间没有关系,易于扩展。此外,得益于NoSQL数据库的无关数据模型,数
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这