什么是非关系型数据库?

  非关系型数据库它的全称是Not Only SQL(简称 NoSQL数据库)是用于存储和检索数据的非关系数据库系统。在当今世界,我们不应该只以没有预定义固定模式的表格式存储所有数据(固定没有列)。像用户生成的数据、地理位置数据、物联网生成的数据一样,社交图是真实世界数据呈指数级增长的例子。这些庞大的数据也需要大量的处理。这时NoSQL数据库就出现了。使用NoSQL数据库,我们可以存储和退休的文件,键值,图形为基础的数据容易和更快。我们可以很容易地避免复杂的SQL连接操作。易于使用NoSQL DBs对实际问题(web和企业业务应用程序)进行水平伸缩。Carlo Strozzi是在1998年引入NoSQL术语的。使用NoSQL的动机——设计的简单性、对机器集群的水平扩展。 

NoSQL数据库类型:  

  (1)文档数据库——这些数据库通常将每个键与称为文档的复杂数据结构配对。文档可以包含键数组对、键值对甚至嵌套文档。

    优点:能够进行数据的快速查询。

    缺点:需要存储数据之间的关系。

    示例:MongoDB、CouchDB、Terrastore、CloudKit、RavenDB

  (2)键值存储——每个单独的项都存储为键值对。键值存储是所有NoSQL数据库中最简单的数据库。

    优点:对数据能快速查询,数据存储的扩展性强。

    缺点:数据库的功能有局限性。

    示例:Redis、Riak、SimpleDB、Chordless、Scalaris

  (3)宽列存储——这些类型的数据库针对大型数据集上的查询进行了优化,它们将数据列存储在一起,而不是行。

    优点:对数据结构要求不特别的严格。

    缺点:查询性的性能不好,同时缺少一种统一查询语言。

    示例:HBase、BigTable、PNUTS、HadoopDB、Cassandra

  (4)图形存储——这些存储关于图形、网络的信息,例如社会关系、路线图、交通链接。

    优点:可以方便的利用图结构相关算法进行计算。

    缺点:要想得到结果必须进行整个图的计算,而且遇到不适合的数据模型时,图形数据库很难使用。

    示例:Neo4J、GraphDB、OrientDB、InfoGrid、Infinite Graph

常见的NoSQL数据库:

  MongoDB:是一个面向文档的开源NoSQL数据库。MongoDB使用JSON之类的文档来存储任何数据。它是用c++写的。

  Cassandra:是Facebook为收件箱搜索开发的。Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。

  Redis:是最著名的键值存储。Redis是用C语言编写的。它是根据BSD授权的。

  HBase:是谷歌为BigTable数据库设计的分布式非关系数据库。

  Neo4j:称为原生图数据库,因为它有效地实现了属性图模型,一直到存储层。

  Oracle NoSQL:实现了从用户定义的键到不透明数据项的映射。

  Amazon DynamoDB:使用了一个NoSQL数据库模型,它是非关系型的,允许文档、图形和列在它的数据模型之间。

  Couchbase:是一个用于交互式web应用程序的NoSQL文档数据库。它具有灵活的数据模型,易于扩展,提供一致的高性能。

  Memcached:是一个开源、高性能、分布式内存缓存系统,旨在通过减少数据库负载来加速动态web应用程序。

  CouchDB:是一个开源的NoSQL数据库,使用JSON存储信息,JavaScript作为查询语言。

非关系型数据库的特点:

效率高(因为存储在内存中)、但不安全(断电丢失数据,但其中redis可以同步数据到磁盘中),现在很多非关系型数据库都开始支持转存到磁盘中。

常见的NoSQL数据库的优缺点:

1、MongoDB

  MongoDB是最著名的NoSQL数据库。它是一个面向文档的开源数据库。MongoDB是一个可伸缩和可访问的数据库。它在c++中。MongoDB同样可以用作文件系统。在MongoDB中,JavaScript可以作为查询语言使用。通过使用sharding MongoDB水平伸缩。它在流行的JavaScript框架中非常有用。人们真的很享受分片、高级文本搜索、gridFS和map-reduce功能。惊人的性能和新特性使这个NoSQL数据库在我们的列表中名列第一。

特点:提供高性能;自动分片;运行在多个服务器上;支持主从复制;数据以JSON样式文档的形式存储;索引文档中的任何字段;由于数据被放置在碎片中,所以它具有自动负载平衡配置;支持正则表达式搜索;在失败的情况下易于管理。

优点:易于安装MongoDB;MongoDB Inc.为客户提供专业支持;支持临时查询;高速数据库;无模式数据库;横向扩展数据库;性能非常高。

缺点:不支持连接;数据量大;嵌套文档是有限的;增加不必要的内存使用。

2、Cassandra

  Cassandra是Facebook为收件箱搜索开发的。Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。通常,这些数据分布在许多普通服务器上。您还可以添加数据存储容量,使您的服务保持在线,您可以轻松地完成这项任务。由于集群中的所有节点都是相同的,因此不需要处理复杂的配置。Cassandra是用Java编写的。Cassandra查询语言(CQL)是查询Cassandra数据库的一种类似sql的语言。因此,Cassandra在最佳开源数据库中排名第二。Facebook、Twitter、思科(Cisco)、Rackspace、eBay、Twitter、Netflix等一些最大的公司都在使用Cassandra。

特点:线性可伸缩;;保持快速响应时间;支持原子性、一致性、隔离性和耐久性(ACID)等属性;使用Apache Hadoop支持MapReduce;分配数据的最大灵活性;高度可伸缩;点对点架构。

优点:高度可伸缩;无单点故障;Multi-DC复制;与其他基于JVM的应用程序紧密集成;更适合多数据中心部署、冗余、故障转移和灾难恢复。

缺点:对聚合的有限支持;不可预知的性能;不支持特别查询。

3、Redis

  Redis是一个键值存储。此外,它是最著名的键值存储。Redis支持一些c++、PHP、Ruby、Python、Perl、Scala等等。Redis是用C语言编写的。此外,它是根据BSD授权的。

特点:自动故障转移;将其数据库完全保存在内存中;事务;Lua脚本;将数据复制到任意数量的从属服务器;钥匙的寿命有限;LRU驱逐钥匙;支持发布/订阅。

优点:支持多种数据类型;很容易安装;非常快(每秒执行约11万组,每秒执行约81000次);操作都是原子的;多用途工具(在许多用例中使用)。

缺点:不支持连接;存储过程所需的Lua知识;数据集必须很好地适应内存。

4、HBase

  HBase是谷歌为BigTable数据库设计的分布式非关系数据库。HBase的主要目标之一是托管数十亿行X数百万列。您可以随时添加服务器来增加容量。多个主节点将确保数据的高可用性。HBase是用Java 8编写的。它是在Apache下授权的。Hbase还简单地利用Java API进行客户访问。
特点:支持自动故障;线性可伸缩;提供了数据复制;与Hadoop集成,作为源和目标。
优点:为较大的表提供快速查找;提供对来自数十亿条记录的单行的低延迟访问;简单的Java API为客户端;自动分片;License-free;处理HDFS文件存储之上的大型数据集;灵活的模式设计;高速。
缺点:不支持事务;没有权限或内置身份验证;仅按键索引和排序;单点故障(当只使用一个HMaster时);不支持SQL结构;集群上的内存问题。

5、Neo4j

  Neo4j被称为原生图数据库,因为它有效地实现了属性图模型,一直到存储层。这意味着数据完全按照白板的方式存储,数据库使用指针导航和遍历图。Neo4j有数据库的社区版和企业版。企业版包括Community Edition必须提供的所有功能,以及额外的企业需求,如备份、集群和故障转移功能。
特点:它支持唯一的约束;Neo4j支持完整的ACID(原子性、一致性、隔离性和持久性)规则;Java API: Cypher API和本机Java API;使用Apache Lucence索引;简单查询语言Neo4j CQL;包含用于执行CQL命令的UI: Neo4j Data Browser。
优点:容易检索其相邻节点或关系细节,无需连接或索引;易于学习Neo4j CQL查询语言命令;不需要复杂的连接来检索数据;非常容易地表示半结构化数据;大型企业实时应用程序的高可用性;简化的调优。
缺点:不支持分片。

6、Oracle NoSQL
  Oracle刚刚用Oracle NoSQL启动了NoSQL数据库。它在2018年变得流行起来。与MongoDB和Casandra数据库相比,它不那么流行。Oracle NoSQL数据库实现了从用户定义的键到不透明数据项的映射。尽管它记录了键/值对的内部版本号,但是它只维护存储中的最新版本。Oracle的12c版本是为云而设计的,可以托管在一台服务器或多台服务器上,并支持管理包含数十亿条记录的数据库。Oracle最新版本的一些特性包括网格框架以及物理和逻辑结构的使用。Oracle Database 18c现在为客户提供了一个高性能、可靠和安全的平台,使他们的事务和分析工作负载(无论是在云环境中,还是在本地环境中,或者在混合云配置中)更容易、更经济地实现现代化。
特点:Oracle NoSQL数据库处理大数据;支持SQL,可以从Oracle关系数据库访问它;Oracle NoSQL数据库使用Java/C API读写数据;分布式数据库;通过节点为请求的密钥提供对数据的访问。
优点:基于PL/SQL编程结构;对等社区有助于解决所有问题;Oracle数据库是安全的,并确保不会通过提示更新篡改用户数据。
缺点:小型组织的高成本;安装需要大量的资源;甚至可能需要硬件升级才能实现Oracle;占用了很多空间。

7、Amazon DynamoDB
  DynamoDB使用了一个NoSQL数据库模型,它是非关系型的,允许文档、图形和列在它的数据模型之间。每个DynamoDB查询由用户标识的主键执行,主键唯一标识每个项。它还减轻了客户操作和扩展分布式数据库的负担。因此,硬件供应、设置、配置、复制、软件补丁、集群扩展等都由Amazon管理。
特点:高可伸缩性;用于索引值范围的散列范围;将数据存储在分区中;使用JSON作为传输协议,而不是存储格式。
优点:易于设置;提供底层AWS DynamoDB API;自动伸缩;降低管理高可用性和高峰使用时间伸缩的复杂性;静止加密;DynamoDB的安全性由AWS标识控制。
缺点:不免费备份您的表;大小限制。

8、Couchbase
  重点是易用性,包括web。它是一个NoSQL文档存储数据库。Couchbase Server是一个用于交互式web应用程序的NoSQL文档数据库。它具有灵活的数据模型,易于扩展,提供一致的高性能。Couchbase Server、JSON文档用于表示应用程序对象和对象之间的关系。
特点:与Kubernetes一起大规模自动故障转移部署和管理Couchbase;索引分区;通过N1QL查询本地支持JSON数据;数据压缩;事件服务。
优点:综合优化;降低网络、内存和存储的成本;极棒的管理面板,提供了大量关于您的集群如何执行的见解。
缺点:Couchbase不是开源的。

9、Memcached
  Memcached是一个开源、高性能的分布式内存缓存系统,旨在通过减少数据库负载来加速动态web应用程序。它是存储在内存中的字符串、对象等的键值字典,由数据库调用、API调用或页面呈现生成。它现在被Netlog、Facebook、Flickr、Wikipedia、Twitter和YouTube等网站使用。
特点:通过TCP或UDP的客户机-服务器应用程序;减少数据库负载;Memcached服务器是一个大哈希表;高效的网站与高数据库负荷;根据Berkeley Software Distribution license进行分发;将内存缓存合并到逻辑池中。
优点:安装快;广泛记录在一个巨大的社区中。
缺点:只支持Linux操作系统和类似于BSD的系统;不支持数据冗余;不支持锁、通读、CAS。

10、CouchDB
  CouchDB是一个开源的NoSQL数据库,它使用JSON存储信息,JavaScript作为查询语言。它采用了一种多版本控制系统,避免了DB文件在写入过程中被阻塞。Erlang。它是在Apache下授权的。它在2016年最受欢迎的NoSQL数据库中排名第一。
特点:Map/Reduce列表和显示;提供数据库级安全;身份验证像web应用程序一样通过会话cookie打开;JSONP是免费的;按照文档存储;支持ACID属性;提供最简单的复制形式;基于浏览器的GUI来处理数据、权限和配置。
优点:Map/Reduce,查询数据在某种程度上与数据本身是分离的;存储任何JSON数据。
缺点:任意查询都很昂贵;使用CouchDB需要额外的空间;不支持XML。

最新文章

  1. Python之路【第三篇】python基础 之基本数据类型 补充
  2. clang编译器简介
  3. Spring-Context之六:基于Setter方法进行依赖注入
  4. HDOJ 1576 A/B
  5. Java接口回调
  6. [BZOJ1406][AHOI2007]密码箱(数论)
  7. yii2购物车实现
  8. Unix无缓冲文件操作函数、文件信息查询
  9. JSBinding+Bridge:逻辑代码中操作二进制数据
  10. java静态初始化代码块
  11. jdbc连接数据库工具包模板
  12. QT server服务端如何判断客户端断开连接
  13. 如何找出单链表中的倒数第k个元素
  14. HDU 5025 Saving Tang Monk
  15. 【Java123】Java基础知识点
  16. SpringBoot三种配置Dubbo的方式
  17. Win7 启动修复
  18. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍
  19. centos-7安装redis服务
  20. Filter method example

热门文章

  1. Redis作缓存
  2. 字的研究(3)fontTools-TrueType轮廓坐标的获取以及基于TrueType的Glyph实例的构建
  3. 【Containerd版】Kubeadm高可用安装K8s集群1.23+
  4. Velero:备份、迁移Kubernetes集群资源和PV
  5. Springboot整合RocketMQ解决分布式事务
  6. HTTPS的基本使用
  7. vue3 最长递增子序列 diff优化
  8. ◆JAVA加密解密-DES
  9. Solution -「LOJ #6029」「雅礼集训 2017」市场
  10. Solution -「NOIOL-S 2021」「洛谷 P7470」岛屿探险