精华内容
下载资源
问答
  • nosql数据库有哪些1.什么是NoSql数据库? NoSql(不仅是Sql)数据库是可水平扩展,持久保存半结构或非结构化数据并具有灵活模式的非关系数据库。 这些数据库支持多种数据模型,例如键值,文档,列族,基于图形的,...
    nosql数据库有哪些

    nosql数据库有哪些

    1.什么是NoSql数据库?

    NoSql(不仅是Sql)数据库是可水平扩展,持久保存半结构或非结构化数据并具有灵活模式的非关系数据库。 这些数据库支持多种数据模型,例如键值,文档,列族,基于图形的,内存中等,用于管理和访问数据。 NoSql数据库最适合用于构建现代应用程序,这些应用程序需要大数据和大量请求,高度可扩展,低延迟,高性能和灵活的数据模型,以提供出色的客户体验。

    在本文中,我们将讨论NoSql数据库,Cassandra,Mongo和Redis数据库的介绍,以及何时使用这些NoSql数据库以获得更好的性能。

    2. NoSql数据库的功能

    2.1多种型号支持

    NoSql数据库是持久性,管理和访问半结构化和非结构化数据的理想选择。

    2.2开源

    大多数NoSql数据库都是开源的。 大多数云提供商通过后台管理自动扩展,补丁更新等将这些数据库作为托管服务提供。

    2.3可扩展性

    通过向群集添加更多服务器,NoSql数据库可进行水平扩展,并且与可垂直扩展的关系数据库不同,该群集可分布在多个地理位置(区域)中。

    2.4低延迟

    由于数据复制到数据库群集上的多个节点,因此延迟很短。 延迟和一致性之间的折衷对于Web和移动软件应用程序很重要。 无论采用哪种复制方法,都将在一致性和延迟之间进行权衡。

    2.5灵活模式

    NoSql数据库支持具有最终一致性的灵活数据模型,并且固有地无架构。 这使NoSql数据库适合于有效地存储半结构化和非结构化数据。

    2.6高性能,可用和容错

    在NoSql数据库中,数据被复制到群集中的多个节点以及其他区域中的群集中的节点。 此特性使NoSql数据库具有高可用性和容错能力。 没有Sql数据库针对文档,键值,列族,图等数据模型及其访问模式进行了高度优化,这些模型可提供更高的性能。

    3.卡桑德拉

    Apache Cassandra是一个开源,分布式,水平可伸缩,高度可用,容错和宽列NoSql数据库。 它用Java编写,是一个列族存储数据库。 Cassandra群集中的所有节点都是对等节点,并且在Cassandra中没有主从范式。 这使得cassandra高度可用,具有容错能力并且没有单点故障。 Cassandra集群可以水平扩展,并且可以分布到多个数据中心。

    在cassandra中写入速度非常快,因为它不会先搜索然后再写入。 首先将数据写入提交日志,然后使用cassandra算法小心将数据反映到表中。 在cassandra中,围绕查询对数据模型进行建模,即首先确定应用程序查询,然后对其进行数据建模。

    4. MongoDB

    MongoDB是一个用C ++编写的开源,跨平台,面向文档,高度可用,可扩展且灵活的NoSql数据库。 它适用于集合和文档,并通过副本集提供高可用性。

    MongoDB使用类似于JSON的文档,这些文档可以具有多种结构。 由于架构较少,因此在创建文档之前无需创建文档结构。 MongoDB使用MongoDB QL(查询语言)来访问存储在MongoDB中的数据。 MongoDB具有非常强大的聚合功能和表达性聚合框架。

    5. Redis(远程字典服务器)

    Redis是一个开源且可扩展的数据存储,可以用作数据库,缓存以及消息代理。 它是用ANSI C编写的。Redis是一种内存中数据存储,可以将其状态持久保存到磁盘,即使重新启动Redis节点后也可以恢复其状态。 它的内存存储使其超快。

    6. Cassandra vs MongoDB vs Redis

    • Cassandra以Column-Family结构存储数据,而MongoDB以JSON文档格式存储数据。
    • 在Cassandra中,不建议使用二级索引,因为它们会降低性能。 在MongoDB中,索引是首选,以避免搜索所有文档以查找请求的文档并获得更好的性能。
    • Cassandra是实现高写入吞吐量的理想选择,但是如果您的应用程序需要很高的读取并发性,请使用MongoDB。
    • Cassandra没有主节点,所有节点都是对等节点,而在MongoDB中,只有一个主节点。
    • Cassandra最终将写入的数据复制到集群中复制因子中指定的节点数,以及不同区域中集群中的节点数。 MongoDB需要一些设置才能进行复制。 您可以设置辅助数据库,如果主数据库出现故障,则可以自动选择该数据库。 在MongoDB中,读取首先首先提交给主副本,然后再复制到辅助副本。
    • 在这些数据库中,您可以在每条记录上设置TTL(生存时间),因此可以在TTL过期后自动将记录逐出。
    • Redis是键值数据存储,非常有效地用作缓存来提高应用程序性能。
    • 扩展Cassandra和Mongo比Redis简单得多。
    • 在Redis中,数据存储的大小不能超过系统上的总内存空间,即RAM加交换空间。 Mongo数据库的大小没有内在限制。
    • 可以对Cassandra,MongoDB和Redis数据库进行集群,以实现高可用性,备份并增加数据存储的整体大小。
    • 如果您的应用程序需要聚合,请使用MongoDB。 如果您的应用程序需要键值临时存储,请使用Redis。 如果您的应用程序需要轻松扩展的高写入吞吐量的宽列存储,请使用Cassandra。

    7.何时使用哪个NoSql数据库?

    以下是一些使用案例,其中不同的NoSql数据库最适合并提供更好的性能。

    为以下用例选择Cassandra:

    • 线性可扩展,高度可用,容错
    • 多数据中心部署
    • 很高的写入吞吐量,但读取次数较少。
    • 您想在存储的数据之上建立一个响应Swift的报告系统
    • 实时数据分析
    • 您的应用程序不需要数据库中的ACID属性
    • 您的应用程序需要与Hadoop,HBase,Spark集成

    选择MongoDB用于以下用例:

    • 即时扩展
    • 基于文档的存储
    • 很高的读取并发
    • 缓存实时分析
    • 内容管理
    • 写入有效负载很高,即文档大小很大(最大为16MB)
    • 在快速原型制作中非常有用
    • 适合存储大文本,视频,图像,媒体文件等。

    选择以下情况的Redis DB:

    • 缓存更大的有效负载以提高应用程序的性能
    • 永久缓存到磁盘,需要在重新启动后恢复
    • 键值对存储
    • 需要非常高的性能
    • 临时数据存储,例如用户会话
    • 可以使用其发布/订阅模型用作消息传递队列

    8. Cassandra vs Mongo vs Redis DB –摘要

    了解不同的NoSql数据库对于选择适合您的应用程序需求的数据库至关重要。 根据您的应用程序使用案例选择正确的NoSql数据库。 如果您的数据关系太多并且需要ACID属性,则NoSql数据库不是一个不错的选择。 为了提高应用程序性能,请使用Redis作为缓存,因为它具有内存存储。 使用MongoDB满足内容管理和文档类型的存储需求。 将Cassandra用于高度可用的宽列存储箱。 选择正确的数据库直接影响应用程序的性能。

    翻译自: https://www.javacodegeeks.com/2019/02/nosql-databases-cassandra-vs-mongo-vs-redis-db-comparison.html

    nosql数据库有哪些

    展开全文
  • NoSQL数据库

    千次阅读 2018-05-20 15:13:36
    NoSQL简介 NoSQL概念: 图;NoSQL概念的演变 ...NoSQL最初表示的“反SQL”运动,用新型的非...通常,NoSQL数据库具有以下几个特点: 灵活的可扩展性。 灵活的数据模型 与云计算紧密融合。 现在有很多公司都...

    NoSQL简介

    NoSQL概念:

    这里写图片描述

    图;NoSQL概念的演变

    NoSQL最初表示的“反SQL”运动,用新型的非关系型数据库取代关系型数据库。

    现在NoSQL(Not only SQL)表示关系和非关系型数据库各有优缺点,彼此都无法互相取代。

    NoSQL的特点:

    通常,NoSQL数据库具有以下几个特点:

    1. 灵活的可扩展性。
    2. 灵活的数据模型
    3. 与云计算紧密融合。

    现在有很多公司都使用了NoSQL数据库:如Google,Facebook,百度,阿里等。

    NoSQL兴起的原因

    原因一:关系型数据库已经无法满足Web2.0的需求

    关系型数据库无法满足Web2.0的需求,主要表现在以下几个方面:

    1. 无法满足海量数据的管理需求。
    2. 无法满足数据高并发的需求。
    3. 无法满足高可扩展性和高可用性的需求。

    在现在1分钟的时间内:

    • 新浪可以发送2万条微博。
    • 苹果可以下载4.7万次应用。
    • 淘宝可以卖出6万件商品。
    • 人人网可以发送30万次访问。
    • 百度可以产生90万次搜索查询。

    MySQL集群是否可以完全解决问题?

    • 复杂性:部署、管理、配置很复杂。
    • 数据库复制:MySQL主备之间采用复制方式,只能是异步复制,当主库压力较大时可能产生较大延迟,主备切换可能会丢失最后一部分更新事务,这时往往需要人工介入,备份和恢复不方便。
    • 扩容问题:如果系统压力过大需要增加新的机器,这个过程涉及数据重新划分,整个过程比较复杂,且容易出错。
    • 动态数据迁移问题:如果某个数据库组压力过大,需要将其中部分数据迁移出去,迁移过程需要总控节点整体协调,以及数据库节点的配合。这个过程很难做到自动化。

    原因二:“One size fits all”模式很难适用于截然不同的业务场景:

    • 关系模型作为统一的数据模型既被用于数据分析,也被用于在线业务。但这两者一个强调高吞吐,一个强调低延时,已经演化出完全不同的架构。用同一套模型来抽象显然是不合适的。
    • Hadoop就是针对数据分析。
    • MongoDB、Redis等是针对在线业务,两者都抛弃了关系模型。

    原因三:关系型数据库的关键特性:

    关系数据库的关键特性包括完善的事务机制高效的查询机制。但是,关系数据库引以为傲的两个关键特性,到了Web2.0时代却成了鸡肋,主要表现在以下几个方面:

    1. Web2.0网站系统通常不要求严格的数据库事务。
    2. Web2.0并不要求严格的读写实时性。
    3. Web2.0通常不包含大量复杂的SQL查询(去结构化,存储空间换取更好的查询性能)。

    NoSQL与关系型数据库的比较

    NoSQL和关系数据库的简单比较:

    RDBMS即关系数据库管理系统(Relational Database Management System)。

    这里写图片描述

    这里写图片描述
    这里写图片描述

    对比总结:

    关系数据库:

    • 优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持 。
    • 劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无法较好支持Web2.0应用,事务机制影响了系统的整体性能等。

    NoSQL数据库:

    • 优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大的横向扩展能力等 。
    • 劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等。

    关系数据库和NoSQL数据库各有优缺点,彼此无法取代。

    • 关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性。
    • NoSQL数据库应用场景:互联网企业、传统企业的非关键业务(比如数据分析)。

    采用混合架构

    • 案例:亚马逊公司就使用不同类型的数据库来支撑它的电子商务应用。
    • 对于“购物篮”这种临时性数据,采用键值存储会更加高效。
    • 当前的产品和订单信息则适合存放在关系数据库中。
    • 大量的历史订单信息则适合保存在类似MongoDB的文档数据库中。

    NoSQL的四大类型

    四大类:

    NoSQL数据库虽然数量众多,但是,归结起来,典型的NoSQL数据库通常包括键值数据库、列族数据库、文档数据库和图形数据库。

    这里写图片描述

    图:键值数据库示例

    这里写图片描述

    图:列族数据库

    这里写图片描述

    图:文档数据库

    这里写图片描述

    图:图形数据库

    四大数据库的主要产品:

    这里写图片描述

    图:四大数据库的主要产品

    键值数据库:

    相关产品:

    • Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached。

    数据模型:

    • 键/值对
    • 键是一个字符串对象
    • 值可以是任意类型的数据,比如整型、字符型、数组、列表、集合等。

    典型应用:

    • 涉及频繁读写、拥有简单数据模型的应用
    • 内容缓存,比如会话、配置文件、参数、购物车等
    • 存储配置和用户数据信息的移动应用

    优点:

    • 扩展性好
    • 灵活性好
    • 大量写操作时性能高

    缺点:

    • 无法存储结构化信息,条件查询效率较低

    不适用情形:

    • 不是通过键而是通过值来查:键值数据库根本没有通过值查询的途径。
    • 需要存储数据之间的关系:在键值数据库中,不能通过两个或两个以上的键来关联数据。
    • 需要事务的支持:在一些键值数据库中,产生故障时,不可以回滚。

    使用者:

    • 百度云数据库(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Redis和Memcached)、StackOverFlow(Redis)、Instagram (Redis)、Youtube(Memcached)、Wikipedia(Memcached)

    这里写图片描述

    图:键值数据库成为理想的缓冲层解决方案

    Redis有时候会被人们称为“强化版的Memcached” 支持持久化、数据恢复、更多数据类型.

    列族数据库:

    相关产品:

    • BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS

    数据模型:列族

    典型应用:

    • 分布式数据存储与管理
    • 数据在地理上分布于多个数据中心的应用程序
    • 可以容忍副本中存在短期不一致情况的应用程序
    • 拥有动态字段的应用程序
    • 拥有潜在大量数据的应用程序,大到几百TB的数据

    优点:

    • 查找速度快
    • 可扩展性强
    • 容易进行分布式扩展
    • 复杂性低

    缺点:

    • 功能较少,大都不支持强事务一致性。

    不适用情形:

    • 需要ACID事务支持的情形,Cassandra等产品就不适用

    使用者:

    • Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Twitter(Cassandra and HBase)、Facebook(HBase)、Yahoo!(HBase)

    文档数据库:

    “文档”其实是一个数据记录,这个记录能够对包含的数据类型和内容进行“自我描述”。XML文档、HTML文档和JSON 文档就属于这一类。SequoiaDB就是使用JSON格式的文档数据库,它的存储的数据是这样的:

    这里写图片描述

    图:文档数据库示例

    文档数据库的特点:

    • 数据是不规则的,每一条记录包含了所有的有关“SequoiaDB”的信息而没有任何外部的引用,这条记录就是“自包含”的。
    • 这使得记录很容易完全移动到其他服务器,因为这条记录的所有信息都包含在里面了,不需要考虑还有信息在别的表没有一起迁移走。
    • 同时,因为在移动过程中,只有被移动的那一条记录(文档)需要操作,而不像关系型中每个有关联的表都需要锁住来保证一致性,这样一来ACID的保证就会变得更快速,读写的速度也会有很大的提升。

    文档数据库的相关产品:

    • MongoDB、CouchDB、Terrastore、ThruDB、RavenDB、SisoDB、RaptorDB、CloudKit、Perservere、Jackrabbit

    数据模型:

    • 键/值
    • 值(value)是版本化的文档

    典型应用:

    • 存储、索引并管理面向文档的数据或者类似的半结构化数据。
    • 比如,用于后台具有大量读写操作的网站、使用JSON数据结构的应用、使用嵌套结构等非规范化数据的应用程序。

    优点:

    • 性能好(高并发),灵活性高,复杂性低,数据结构灵活。
    • 提供嵌入式文档功能,将经常查询的数据存储在同一个文档中。
    • 既可以根据键来构建索引,也可以根据内容构建索引

    缺点:缺乏统一的查询语法。

    不适用情形:

    • 在不同的文档上添加事务。文档数据库并不支持文档间的事务,如果对这方面有需求,则不应该选用这个解决方案。

    使用者:

    • 百度云数据库(MongoDB)、SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)

    图形数据库:

    相关产品:

    • Neo4J、OrientDB、InfoGrid、Infinite Graph、GraphDB

    数据模型:图结构

    典型应用:

    • 专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题

    优点:

    • 灵活性高,支持复杂的图形算法,可用于构建复杂的关系图谱。

    缺点:复杂性高,只能支持一定的数据规模。

    使用者:

    • Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)

    不同类型数据库比较分析;

    这里写图片描述

    MySQL产生年代较早,而且随着(Web应用软件组合)LAMP(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)大潮得以成熟。尽管其没有什么大的改进,但是新兴的互联网使用的最多的数据库。

    MongoDB是个新生事物,提供更灵活的数据模型、异步提交、地理位置索引等五花十色的功能。

    HBase是个“仗势欺人”的大象兵。依仗着Hadoop的生态环境,可以有很好的扩展性。但是就像象兵一样,使用者需要养一头大象(Hadoop),才能驱使他。

    Redis是键值存储的代表,功能最简单。提供随机数据存储。就像一根棒子一样,没有多余的构造。但是也正是因此,它的伸缩性特别好。就像悟空手里的金箍棒,大可捅破天,小能成缩成针。

    NoSQL的三大基石

    三大基石:CAP,BASE,最终一致性。

    CAP:

    所谓的CAP指的是:

    • C(Consistency):一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据。
    • A:(Availability):可用性,是指快速获取数据,可以在确定的时间内返回操作结果,保证每个请求不管成功或者失败都有响应;
    • P(Tolerance of Network Partition):分区容忍性,是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行,也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。

    这里写图片描述

    图:CAP Theorem(理论)

    CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个,正所谓“鱼和熊掌不可兼得”。

    当处理CAP的问题时,可以有几个明显的选择:

    1. CA:也就是强调一致性(C)和可用性(A),放弃分区容忍性(P),最简单的做法是把所有与事务相关的内容都放到同一台机器上。很显然,这种做法会严重影响系统的可扩展性。传统的关系数据库(MySQL、SQL Server和PostgreSQL),都采用了这种设计原则,因此,扩展性都比较差
    2. CP:也就是强调一致性(C)和分区容忍性(P),放弃可用性(A),当出现网络分区的情况时,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务
    3. AP:也就是强调可用性(A)和分区容忍性(P),放弃一致性(C),允许系统返回不一致的数据

    这里写图片描述

    图:不同产品在CAP理论下的不同设计原则

    BASE:

    说起BASE(Basically Availble, Soft-state, Eventual consistency),不得不谈到ACID。

    这里写图片描述

    一个数据库事务具有ACID四性:

    • A(Atomicity):原子性,是指事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行。
    • C(Consistency):一致性,是指事务在完成时,必须使所有的数据都保持一致状态。
    • I(Isolation):隔离性,是指由并发事务所做的修改必须与任何其它并发事务所做的修改隔离。
    • D(Durability):持久性,是指事务完成之后,它对于系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持。

    BASE的基本含义是基本可用(Basically Availble)、软状态(Soft-state)和最终一致性(Eventual consistency):

    基本可用:

    基本可用,是指一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,也就是允许分区失败的情形出现。

    软状态:

    “软状态(soft-state)”是与“硬状态(hard-state)”相对应的一种提法。数据库保存的数据是“硬状态”时,可以保证数据一致性,即保证数据一直是正确的。“软状态”是指状态可以有一段时间不同步,具有一定的滞后性。

    最终一致性:

    ​ 一致性的类型包括强一致性和弱一致性,二者的主要区别在于高并发的数据访问操作下,后续操作是否能够获取最新的数据。对于强一致性而言,当执行完一次更新操作后,后续的其他读操作就可以保证读到更新后的最新数据;反之,如果不能保证后续访问读到的都是更新后的最新数据,那么就是弱一致性。而最终一致性只不过是弱一致性的一种特例,允许后续的访问操作可以暂时读不到更新后的数据,但是经过一段时间之后,必须最终读到更新后的数据。

    ​ 最常见的实现最终一致性的系统是DNS(域名系统)。一个域名更新操作根据配置的形式被分发出去,并结合有过期机制的缓存;最终所有的客户端可以看到最新的值。

    最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:

    • 因果一致性:如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将获得A写入的最新值。而与进程A无因果关系的进程C的访问,仍然遵守一般的最终一致性规则。
    • “读己之所写”一致性:可以视为因果一致性的一个特例。当进程A自己执行一个更新操作之后,它自己总是可以访问到更新过的值,绝不会看到旧值。
    • 单调读一致性:如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。
    • 会话一致性:它把访问存储系统的进程放到会话(session)的上下文中,只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统保证不会延续到新的会话。
    • 单调写一致性:系统保证来自同一个进程的写操作顺序执行。系统必须保证这种程度的一致性,否则就非常难以编程了。

    如何实现各种类型的一致性?

    对于分布式数据系统:

    • N — 数据复制的份数
    • W — 更新数据是需要保证写完成的节点数
    • R — 读取数据的时候需要读取的节点数

    如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步复制的关系型数据库,N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的。一般设定是R+W = N+1,这是保证强一致性的最小设定。

    如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的关系型数据库,N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱一致性。

    对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是在可用性和一致性之间取一个平衡,以适应不同的应用场景。

    如果N=W,R=1,任何一个写节点失效,都会导致写失败,因此可用性会降低,但是由于数据分布的N个节点是同步写入的,因此可以保证强一致性。 实例:HBase是借助其底层的HDFS来实现其数据冗余备份的。HDFS采用的就是强一致性保证。在数据没有完全同步到N个节点前,写操作是不会返回成功的。也就是说它的W=N,而读操作只需要读到一个值即可,也就是说它R=1。

    像Voldemort,Cassandra和Riak这些类Dynamo的系统,通常都允许用户按需要设置N,R,W三个值,即使是设置成W+R<= N也是可以的。也就是说他允许用户在强一致性和最终一致性之间自由选择。而在用户选择了最终一致性,或者是W<N的强一致性时,则总会出现一段“各个节点数据不同步导致系统处理不一致的时间”。为了提供最终一致性的支持,这些系统会提供一些工具来使数据更新被最终同步到所有相关节点。

    从NoSQL到NewSQL数据库

    这里写图片描述

    图:大数据引发数据处理架构变革

    这里写图片描述

    图:关系数据库、NoSQL和NewSQL数据库产品分类图

    文档数据库MongoDB

    MongoDB简介:

    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

    在高负载的情况下,添加更多的节点,可以保证服务器性能。

    MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

    这里写图片描述

    图:mangoDB示例

    MongoDB主要特点:

    • 提供了一个面向文档存储,操作起来比较简单和容易
    • 可以设置任何属性的索引来实现更快的排序
    • 具有较好的水平可扩展性
    • 支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组
    • 可以实现替换完成的文档(数据)或者一些指定的数据字段
    • MongoDB中的Map/Reduce主要是用来对数据进行批量处理和聚合操作
    • 支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等语言
    • MongoDB安装简单

    MongoDB概念解析:

    在mongodb中基本的概念是文档、集合、数据库

    这里写图片描述

    通过下图实例,我们也可以更直观的的了解MongoDB中的一些概念:

    这里写图片描述

    图:关系数据库和MongoDB的示例

    举例2:在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在文档数据库MongoDB中,能用一个文档来表示一篇博客, 评论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作。

    数据库

    • 一个mongodb中可以建立多个数据库。
    • MongoDB的默认数据库为"db",该数据库存储在data目录中。
    • MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

    文档
    文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
    一个简单的文档例子如下:

    {"site":"dblab.xmu.edu.cn", "name":"厦门大学数据库实验室"}
    

    RDBMS与MongoDB对应术语:

    这里写图片描述

    集合

    集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。

    集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。 比如,我们可以将以下不同数据结构的文档插入到集合中:

    {"site":"www.baidu.com"} {"site":"dblab.xmu.edu.cn", "name":"厦门大学数据库实验室"} {"site":"www.runoob.com","name":"菜鸟教程","num":5}
    

    MongoDB数据类型:

    这里写图片描述


    以上内容为听华为大数据培训课程和大学MOOC上厦门大学 林子雨的《大数据技术原理与应用》课程而整理的笔记。

    大数据技术原理与应用https://www.icourse163.org/course/XMU-1002335004


    展开全文
  • 什么是NoSQL数据库

    2014-07-21 23:24:20
    它们属于NoSQL数据库,但与key-value存储相异。 定义表结构 面向文档的数据库具有以下特征:即使定义表结构,也可以像定义了表结构一样使用。关系型数据库在变更表结构时比较费事,而且为了保持一致性还需修改...
  • 什么是NoSql数据库

    千次阅读 2017-03-28 16:21:44
     a.NoSql数据库种类繁多,但是有一个共同的特点都是去掉关系数据库的关系型提醒。  b.数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力。 2.大数据量高性能:  a.NoSql...
    NO-SQL数据库 能干什么:
    1.易扩展:
     a.NoSql数据库种类繁多,但是有一个共同的特点都是去掉关系数据库的关系型提醒。
     b.数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力。

    2.大数据量高性能:
     a.NoSql数据库都具有非常高的读写性能,尤其在大数据下,同样表现优秀。
     b.这得益于它的无关系行,的数据库结构简单。
     c.一般MySQL使用Query Cache(查询缓存),每次表的更新Cache就失效,是一种大粒度的Cache
        在针对web2.0的交互频繁的应用,Cache性能不高,而NoSQL的Cache是记录级的
        是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。
    3.多样灵活的数据模型:
     a.NoSql无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。

     b.而在关系数据库中,增、删字段是一件非常麻烦的事情,如果是非常大的数据量的表,

        增加一个字段那你就会想死。

    4.传统RDBMS VS NoSql:
     a.RDBMS(传统的关系型数据库):
    --高度组织化结构化数据
    --结构化查询语言(SQL)
    --数据和关系都存储在单独的表中
    --数据操纵语言,数据定义语言
    --严格的一致性
    --基础事务ACID:
    1.A(Atomicity)原子性
    2.C (Consistency)一致性
    3.I (Isonlation)隔离性
    4.D (Durability)持久性
     b.NoSQl(非关系型数据库):
    --代表着不仅仅是SQL
    --没有声明性查询语言
    --没有预定义的模式
    --键-值对存储,列查询,文档存储,图形数据库
    --最终一致性,而非ACID属性
    --CAP定理:
    1.一致性,数据一致更新,所有数据变动都是同步的
    2.可用性,好的响应性能
    3.分区容错性,可靠性
    --高性能,高可用和高可伸缩性

    在分布式数据库中的CAP原理:
        1.传统的ACID分别是:
       (1).A(Atomicity)原子性:

                  a.原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做事务成功

                     的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

          b.比如:银行转账,从A账户转100元至B账户,分为两个步骤:

     (1)从A账户中取100元;(2)存入100元至B账户,这两步要么一起成,要么都不完成

              如果只完成第一步,第二步失败,钱会莫名其妙的少了100元。

       (2).C (Consistency)一致性:

    a.一致性,也就是说数据库要一直处于一致性的状态,事务的运行不会改变数据库原本

       的一致性约束。

       (3).I (Isonlation)隔离性:

    a.所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的   

       数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据

       就不会受未提交事务的影响,

    b.比如:有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,

       如果此时B查询自己的账户,是看不到新增加的100元。

       (4).D (Durability)持久性:

    a.持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,

       即使出现启机也不会丢失

      2.CAP分别是:

      (1).C (Consistency) 强一致性

      (2).A (Availability) 可用性

      (3).P (partition tolerance)分区容错性



      3.CAP的核心理论:
      (1).一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,
         最多只能同时较好的满足两个。因此根据CAP原理将NoSQL数据库分成满足CA原则、
         满足CP原则和满足AP原则三大类:
    a.CA -单点集群,满足一致性、可用性的系统,通常在可扩展性上不太强大。
    b.CP -满足一致性、分区容错性的系统,通常性能不是特别高。

    c.AP -满足可用性、分区容错性的系统,通常可能对一致性要去比较低一些。

    4.CAP的3进2的概念:
    (1).CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。
       而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性
       是必须需要实现的。所以3进2只能在一致性和可用性之间进行权衡,
       有NoSQL系统能同时保证这三点。
     a.CA 强一致性、高可用性就是传统的Oracle、MySQL之类的关系型数据库。
     b.AP 高可用性、分区容错性是大多数网站架构的选择(什么天猫、京东)。
     c.CP 强一致性、分区容错性就是Redis、MongoDB数据库。



































    展开全文
  • NoSql数据库

    2019-01-22 03:47:09
    Nosql数据库在面对大数据时代快速增长的数据规模和复杂的数据模型,凭借易扩展、大数据量、高性能以及灵活的数据模型在数据库领域站稳脚跟 nosql种类 基本分为 键值存储数据库 文档型数据库 列存储数据库 图形数据库...

    Nosql数据库在面对大数据时代快速增长的数据规模和复杂的数据模型,凭借易扩展、大数据量、高性能以及灵活的数据模型在数据库领域站稳脚跟

    nosql种类 基本分为 键值存储数据库 文档型数据库 列存储数据库 图形数据库 Redis MongoDB Hbase 不太了解 详细总结 Hbase HBase 是Apache Hadoop 中的一个子项目,属于bigtable 的开源版本,所实现的语言为Java(故依赖 Java SDK)。HBase 依托于 Hadoop 的 HDFS(分布式文件系统)作为最基本存储基础单元。

    Hbase特点 所用语言: Java 特点:支持数十亿行X上百万列 使用许可: Apache 协议:HTTP/REST (支持 Thrift,见编注4) 在 BigTable之后建模 采用分布式架构 Map/reduce 对实时查询进行优化 高性能 Thrift网关 通过在server端扫描及过滤实现对查询操作预判 支持 XML, Protobuf, 和binary的HTTP Cascading, hive, and pig source and sink modules 基于 Jruby( JIRB)的shell 对配置改变和较小的升级都会重新回滚 不会出现单点故障 堪比MySQL的随机访问性能

    HBase 优点 存储容量大,一个表可以容纳上亿行,上百万列; 可通过版本进行检索,能搜到所需的历史版本数据; 负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce); 在第3点的基础上可有效避免单点故障的发生。

    HBase 缺点 基于Java语言实现及Hadoop架构意味着其API更适用于Java项目; node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档; 占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高; API相比其它NoSql 的相对笨拙

    HBase 适用场景 bigtable类型的数据存储; 对数据有版本查询需求; 应对超大数据量要求扩展简单的需求。

    Redis Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。目前由VMware主持开发工作。

    Redis 特点 所用语言:C/C++ 特点:运行异常快 使用许可: BSD 协议:类 Telnet 有硬盘存储支持的内存数据库, 可以将数据交换到硬盘 Master-slave复制 虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。 INCR & co (适合计算极限值或统计数据) 支持 sets(同时也支持 union/diff/inter) 支持列表(同时也支持队列;阻塞式 pop操作) 支持哈希表(带有多个域的对象) 支持排序 sets(高得分表,适用于范围查询) Redis支持事务 支持将数据设置成过期数据(类似快速缓冲区设计) Pub/Sub允许用户实现消息机制

    Redis 优势 非常丰富的数据结构; Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断; 数据存在内存中,读写非常的高速,可以达到10w/s的频率。

    Redis 缺点 Redis3.0后才出来官方的集群方案,但仍存在一些架构上的问题; 持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢; 由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

    Redis 应用场景 最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。 例如:微博、数据分析、实时数据搜集、实时通讯等。

    MongoDB MongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。它在许多场景下可用于替代统的关系型数据库或键/值存储方式。

    MongoDB特点 所用语言:C++ 特点:保留了SQL一些友好的特性(查询,索引)。 使用许可: AGPL(发起者: Apache) 协议: Custom, binary( BSON) Master/slave复制(支持自动错误恢复,使用 sets 复制) 内建分片机制 支持 javascript表达式查询 可在服务器端执行任意的 javascript函数 update-in-place支持比CouchDB更好 在数据存储时采用内存到文件映射 对性能的关注超过对功能的要求 建议最好打开日志功能(参数 --journal) 在32位操作系统上,数据库大小限制在约2.5Gb 空数据库大约占 192Mb 采用 GridFS存储大数据或元数据(不是真正的文件系统)

    MongoDB优点: 更高的写负载,MongoDB拥有更高的插入速度。 处理很大的规模的单表,当数据表太大的时候可以很容易的分割表。 高可用性,设置M-S不仅方便而且很快,MongoDB还可以快速、安全及自动化的实现节点 (数据中心)故障转移。 快速的查询,MongoDB支持二维空间索引,比如管道,因此可以快速及精确的从指定位置 获取数据。MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内 存资源相当丰富的话,这将极大地提高数据库的查询速度。 非结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从而 导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响, 整个过程会非常快速。

    MongoDB缺点: 不支持事务。 MongoDB占用空间过大 。 MongoDB没有成熟的维护工具。

    MongoDB应用场景 适用于实时的插入、更新与查询的需求,并具备应用程序实时数据存储所需的复制及高度伸缩性; 非常适合文档化格式的存储及查询; 高伸缩性的场景:MongoDB 非常适合由数十或者数百台服务器组成的数据库。 对性能的关注超过对功能的要求。

    转载于:https://juejin.im/post/5c4692265188252ecd6d687a

    展开全文
  • NOSQL数据库

    2021-04-26 08:57:18
    NOSQL(Not only sql):不仅是sql语句, 它是对所有非关系型数据库的一种统称。 除去关系型数据库之外的都是非关系数据库NOSQL和RDBMS的区别 RDBMS - -高度组织化结构化数据。 user---userid username age sex ...
  • NoSQl数据库

    2019-10-03 21:28:54
    NoSQl数据库特点: 1.灵活的可扩展性 2.灵活的数据模型 3.与云计算紧密结合 关系型数据库无法满足以下的需求: 1.海里数据的管理需求 2.数据高并发的需求 3.高扩展性和高可用性需求 ...
  • NoSQL数据库单元测验参考

    千次阅读 2020-03-18 18:08:03
    下列关于NoSQL数据库和关系型数据库的比较,正确的是 2单选 以下对各类数据库的理解错误的是 3单选 下列数据库属于文档数据库的是 4单选 NoSQL数据库的三大理论基石包括 5多选 关于NoSQL数据库和关系数据库...
  • 在没有NOSQL数据时,关系型数据库一直是数据持久化的唯一选择,比较典型的关系型数据库有SQL Server、Oracle,MySQL,DB2.做.NET开发的同学一般会选择SQL Server,做JAVA的可能会偏向Oracle,MySQL,Python则是...
  • 文章目录一、NoSQL简介(一)NoSQL数据库特点(二)现在很多公司使用NoSQL数据库(三)NoSQL简史二、NoSQL兴起的原因(一)为什么使用NoSQL ?(二)关系数据库已经无法满足Web2.0的需求(三)MySQL集群是否可以完全...
  • NoSQL数据库入门概述

    万次阅读 2016-08-27 13:59:55
    NoSQL数据库入门概述、包括Memcached、Redis、Tokyo Tyrant等NoSQL数据库的简单了解
  • NoSQL数据库资料

    千次阅读 2010-06-22 13:22:00
    NoSQL数据库资料
  • 把ElasticSearch当成是NoSQL数据库

    千次阅读 2017-08-17 12:27:04
    NoSQL 意味着在不同的环境下存在不同的东西, 而erestingly 它并是真的跟 SQL 有啥关系. 我们开始只会觉得 "可能"而已, 所以细细研究了 Elasticsearch 的各种属性,包括它已经为了成就最具灵活性,可伸缩性和...
  • nosql数据库的意思是not only sql ,区别于现在主流的关系型数据库mysql ,oracle,它拥有以下的优缺点: 优点:满足高并发下的读写; 优点:满足高扩展和高可用性; 缺点:大部分支持事务acid; 缺点:如果要...
  • NoSQL数据库类型

    2016-03-09 10:39:28
    本文摘自 Introducing Data Science,我们将向您介绍四大NoSQL数据库类型。有四大NoSQL类型:键值存储(key-value store),文件存储(document store),列导向的数据库(Column-Oriented Database)和图形数据库(graph ...
  • NoSQL数据库笔谈

    千次阅读 2012-01-02 23:50:22
    NoSQL数据库笔谈   原文地址:http://sebug.net/paper/databases/nosql/Nosql.html 序 日前国内没有一套比较完整的NoSQL数据库资料,有很多先驱整理发表了很多,但不是很系统。材尝试着将各家的资料整合...
  • NoSQL数据库,全称为Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,适用的时候也没有必要非使用关系型数据库可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcac
  • python数据库操作——NoSQL数据库之连接MongoDB、Redis数据库   hello!我是wakeyo_J,每天一个konwledge point,一起学python,让技术无限发散。 NoSQL数据库之连接MongoDB、Redis数据库python数据库操作——...
  • 第七章-NoSQL数据库

    2020-08-13 15:09:42
    第七章-NoSQL数据库 文章目录第七章-NoSQL数据库NoSQL简介NoSQL VS. 关系数据库NoSQL的四大类型键值数据库列族数据库文档数据库图形数据库不同类型数据库比较NoSQL的三大基石CAPBASE最终一致性NewSQL数据库 NoSQL...
  • NoSQL数据库优缺点

    2019-05-25 10:58:37
    易扩展 NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样 就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。 大数据量,高性能,快速读写 NoSQL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,959
精华内容 9,583
关键字:

以下不属于nosql数据库的是