精华内容
下载资源
问答
  • NoSQL数据库原理 第2章 NoSQL数据库的基本原理;2.1.1 关系模型 1实体Entity是指现实世界中的具体或抽象的事物例如一个学生一个教师一门课程等 2属性Attribute对实体的特性进行描述例如学生的学号班级姓名等属性一般...
  • Spark大数据技术与应用教学大纲 课程名称Spark大数据技术与应用 课程类别必修 适用专业大数据技术类相关专业 总学时64学时 总学分4.0学分 课程的性质 本课程是为大数据技术类相关专业学生开设的课程 NoSQL数据库大多...
  • 分布式数据库课件
  • 学院 课程教学进度计划表 20 20 学年第二学期 课 程 名 称 NoSQL数据库原 授 课 学 时 48 主讲责任教师 参与教学教师 授课班级/人数 专业教研室 填 表 时 间 专业 教研室主任 教务处编印 年 月 一课程教学目的 NoSQL...
  • 主要介绍了最新统计排名前十的SQL和NoSQL数据库排行榜,本文包括Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB等数据库,需要的朋友可以参考下
  • 1. 单机环境下运行数据库的四种局限性 单机读写数据速度瓶颈问题  单机存储数据量的有限问题  单机指令之间速度的细微区别  安全性问题 2. 集中式数据处理与分布式数据处理,在物理上核心区别 集中式:指一堆...
  • 大数据技术原理与应用 /course/XMU-1002335004 中国大学MOOC 2018年春季学期 第5讲NoSQL数据库 5.1 NoSQL简介 概念演变 Not only SQL 最初表示 反SQL 运动 现在表示关系和非关系型数据库各有优缺点 用新型的非关系...
  • java nosql数据库面试资料,关于MongoDB、radis、memcached,帮助大家在面试过程中碰到的一些问题,进行了整理
  • NoSQL数据库技术实战

    2017-12-22 01:19:45
    NoSQL数据库技术实战 数据库书籍!
  • nosql数据库hbase

    2018-12-14 09:02:15
    便于学习nosql,hbase的PPT,学习好材料。
  • NoSQL数据库原理与应用 含实验 教 学 大 纲 2018 版 2018 年 10 月 前 言 一大纲编写依据 NoSQL泛指非关系型的数据库随着互联网 web2.0 网站的兴起传统的关系数据库在 应付 web2.0 网站特别是超大规模和高并发的 SNS...
  • NoSql数据库PPT

    2019-01-22 10:29:27
    关于nosql数据库的ppt,图、列、键值对、文档数据库的相关介绍
  • 主要介绍了8种主流NoSQL数据库系统特性对比和最佳应用场景,对选择一个NoSQL数据库来说是一个不错的参考文章,需要的朋友可以参考下
  • NoSQL数据库原理第8章 其他NoSQL数据库简介第8章 其他NoSQL数据库简介NoSQL并非是一个严谨的概念包含很多能够进行数据管理和查询的系统诸如图数据库专门描述点线关系的数据库例如Neo4j用于缓存系统的键值对数据库...
  • NoSQL数据库原理第3章 HDFS的基本原理第3章 HDFS的基本原理3.1.1 Hadoop的由来2013年-2016年谷歌公司发表三篇论文被称为谷歌大数据的三驾马车The Google File SystemMapReduceSimplified Data Processing on Large ...
  • 主要介绍了8 种 NoSQL 数据库系统对比,需要的朋友可以参考下
  • * 数据库原理及应用 电子科技大学-张凤荔 数据库系统原理与开发 计算机又称电脑任何计算机不管它是什么类型都是由程序指令控制机器操作完成特定工作任务 计算机又称电脑任何计算机不管它是什么类型都是由程序指令...
  • NoSQL数据库入门与实践(基于MongoDB、Redis)
  • 键值数据库 适用案例 现在讲几个适合使用键值数据库的情况 1 存触会话信息 通常来说每一次网络会话都是唯一的所以分配给它们的 session id 值也各 不相同如果应用程序原来要把 session id 存在磁盘上或关系型数据库...
  • JAVA操作NOSQL数据库

    2018-11-09 11:03:09
    JAVA操作NOSQL数据库,包括hbase,cassandra,kudu,文档和代码都有。
  • 什么是NoSQL数据库

    2014-07-21 23:24:20
    关系型数据库和NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是...
  • 《Oracle NoSQL数据库:实时大数据管理》讲述如何全面运用Oracle NoSQL数据库这个经济实惠的解决方案来存储、检索和更新海量的非结构化数据。本书在紧贴实用的示例的引导下,介绍Oracle NoSQL数据库的安装、配置、...
  • 本文中我们将关注非关系型NoSQL数据库的10个关键特征:排在前5位的优点和前5位的挑战。  NoSQL的五大优点  1:弹性扩展  多年来,数据库负载需要增加时,数据管理员只能依赖于纵向扩展(scale-up)–买更多更强...
  • NOsql数据库论文

    2016-03-12 15:15:02
    这个是我写的NOsql数据库的论文也是期末作业,有需要的可以下载下来用
  • NoSQL数据库实验室 这是各种数据库的现成实验的集合。 每个数据库都配置为完全独立的Hello World目录,包括配置,脚本和数据。 这些示例包括非平凡的功能,这些功能突出了数据库的某些优势和特殊性。 数据库以...
  • nosql数据库是什么Most of you have already heard of the term NoSQL Database and when you try to do a Google search of it, it’s not really clear in terms of what exactly this entire concept is....

    nosql数据库是什么

    Most of you have already heard of the term NoSQL Database and when you try to do a Google search of it, it’s not really clear in terms of what exactly this entire concept is. In this tutorial, we’re going to discuss the different aspects of the NoSQL databases and what makes them different from the regular relational databases that we’ve been using for years. 

    你们中的大多数人都已经听说过NoSQL数据库这个词,当您尝试对其进行Google搜索时,就整个概念到底是什么还不清楚。 在本教程中,我们将讨论NoSQL数据库的不同方面,以及它们与我们已经使用多年的常规关系数据库的不同之处。

    We’ll also go over the advantages and disadvantages of using the NoSQL database over a relational model. Let’s begin. 

    我们还将介绍在关系模型上使用NoSQL数据库的优缺点。 让我们开始。

    什么是关系数据库模型? (What is a Relational Database Model?)

    Now, to understand what the NoSQL concept is and why we need it, we’ve to go back in time where only the relational database model existed. Relational database models have been a result of years of hard work and best practices and stress testing that has been tried and tested on millions of websites until now.

    现在,要了解NoSQL的概念以及我们为什么需要它,我们必须回到只有关系数据库模型存在的时间。 关系数据库模型是经过数年的努力,最佳实践和压力测试的结果,迄今为止,该数据库已经在数百万个网站上进行了尝试和测试。

    They’re designed for reliable transactions and proper structure of data that needs to be stored in them. But because of the structure and the expectation of the kind of data that can be accepted by traditional SQL databases or Relational Databases, there are a lot of limitations that come along with it. We’ll discuss these limitations compared to the NoSQL model in a while.

    它们旨在实现可靠的交易和需要存储在其中的数据的正确结构。 但是由于传统SQL数据库或关系数据库可以接受的数据的结构和期望,因此存在很多限制。 与NoSQL模型相比,我们将在一段时间内讨论这些限制。

    So even though the Relational Database Model still works for most of the sites in the world which do not really need to handle a lot of data, larger websites cannot rely on this model anymore. Enter NoSQL, a non-relational database where the data is stored in a non-tabular format, unlike the traditional database models.

    因此,即使关系数据库模型仍然适用于世界上大多数不需要处理大量数据的网站,大型网站也不再能够依赖此模型。 输入NoSQL,这是一个非关系数据库,其中的数据以非表格格式存储,这与传统的数据库模型不同。

    什么是NoSQL? (What is NoSQL?)

    As appropriately named, the NoSQL database model works in a way that’s not peculiar to SQL databases. How does the NoSQL database store data if it’s not tabular? There are different types of NoSQL databases where the data is stored in different ways. 

    顾名思义,NoSQL数据库模型的工作方式并非SQL数据库所特有。 如果数据不是表格格式,NoSQL数据库如何存储数据? 有不同类型的NoSQL数据库,其中数据以不同的方式存储。

    The most common layouts are:

    最常见的布局是:

    • Wide-column

      宽列
    • Document 

      文件
    • Key-Value

      核心价值
    • Graph

      图形

    Scroll to the bottom of the article of a summarized graph of the different types of layouts, and NoSQL databases for the same

    滚动到不同类型的布局和NoSQL数据库的摘要图的摘要图的底部

    NoSQL简史 (Brief History of NoSQL)

    NoSQL is not a new occurrence in the world of software technology. They’ve been in existence since 1998 when the term was first coined by Carlo Strozzi. He created one of the first database systems that did not use the SQL language. 

    NoSQL在软件技术领域并不是新生事物。 自1998年这个术语由Carlo Strozzi首次提出以来,它们就一直存在。 他创建了第一个不使用SQL语言的数据库系统。

    But the database model did not pick up until 2008 when the need for high-velocity data handling started showing up. Larger companies like Google, Facebook, Amazon, etc started leveraging this database to handle their high volume data using the NoSQL databases.

    但是直到2008年开始出现对高速数据处理的需求时,数据库模型才开始兴起。 较大的公司,例如Google,Facebook,Amazon等,开始利用此数据库使用NoSQL数据库处理其大量数据。

    NoSQL Popularity
    NoSQL Popularity
    NoSQL流行度

    As you can see, the trend picked up in the late 2008s and has continued since then. 

    如您所见,这种趋势在2008年代后期开始回升,并且从那时起一直持续。

    Let’s discuss the common database types in a little more detail.

    让我们更详细地讨论常见的数据库类型。

    1. NoSQL宽列布局 (1. NoSQL Wide-Column Layout)

    This layout of NoSQL stores data in a very similar fashion to that of a relational database model, i.e., in a tabular format. But what differentiates a Wide-Column layout from the relational model’s tabular layout is that each row can have a different set of columns in a wide column layout. 

    NoSQL的这种布局以与关系数据库模型非常类似的方式(即以表格格式)存储数据。 但是,宽列布局与关系模型的表格布局的区别在于,每一行在宽列布局中可以具有一组不同的列。

    Now, this might sound complicated at first but it’s really not. Instead of having a fixed column set and a variable number of rows, we can have a variable number of rows as well as columns. Even though this might sound complicated at first for a person who has always used the relational database model, it can be displayed in just one illustration.

    现在,一开始听起来可能很复杂,但实际上并非如此。 代替固定的列集和可变的行数,我们可以具有可变的行数和列数。 即使对于一向一直使用关系数据库模型的人来说,乍一看这可能听起来很复杂,但它只能以一个插图显示。

    Wide Column Layout
    Wide Column Layout
    宽列布局

    Use Cases:

    用例:

    • IoT related data storage

      物联网相关数据存储
    • Reporting systems

      报告系统
    • Logging 

      记录中
    • TS Data

      TS数据

    Databases:

    数据库:

    • Amazon DynamoDB 

      亚马逊DynamoDB
    • Bigtable

      大表
    • Cassandra

      卡桑德拉
    • Scylla

      希拉
    • HBase

      HBase的
    • Hypertable

      超表

    2. NoSQL文档布局 (2. NoSQL Document Layout)

    Now that you know what the wide-column layout is, let’s move to the next, commonly used NoSQL database layout which is the document layout. In conceptual terms, the document layout is really simple. The database stores data in the form of documents in a standard format or with the use of encodings such as JSON, XML, YAML, etc.

    现在您知道宽列布局是什么,让我们转到下一个常用的NoSQL数据库布局即文档布局。 从概念上讲,文档的布局非常简单。 数据库以标准格式或使用JSON,XML,YAML等编码的文档形式存储数据。

    The benefit of using a document layout model is that we can store any type of data within the database. Another benefit of using the NoSQL document layout model is that there are no empty “columns” or variables within the files. Only the required information is stored and the document is closed for retrieval by the database.

    使用文档布局模型的好处是我们可以在数据库中存储任何类型的数据。 使用NoSQL文档布局模型的另一个好处是文件中没有空的“列”或变量。 仅存储所需的信息,并且关闭文档以供数据库检索。

    Each document is stored with a key and the databases also provide methods for organizing the files in question. Also, the databases provide the users with mechanisms to retrieve and manipulate the data within the documents. It could be a way to either edit existing documents or completely replace the documents.

    每个文档都存储有一个密钥,数据库还提供了用于组织相关文件的方法。 同样,数据库为用户提供了检索和处理文档中数据的机制。 它可能是编辑现有文档或完全替换文档的一种方式。

    Use cases:

    用例:

    • Content Management and Monitoring systems

      内容管理和监控系统
    • Web and mobile applications

      网络和移动应用

    Databases:

    数据库:

    • ArangoDB 

      ArangoDB
    • BaseX

      BaseX
    • Clusterpoint

      集群点
    • Couchbase

      Couchbase
    • CouchDB

      CouchDB
    • Etc..

      等等..

    3. NoSQL键值布局 (3. NoSQL Key-Value Layout )

    This is a simple model that pairs a unique key with a value that can be retrieved with the key. The data structure that is used in the key-value database layout is commonly known as a dictionary or hash table. 

    这是一个简单的模型,将唯一键与可以通过该键检索的值配对。 键值数据库布局中使用的数据结构通常称为字典或哈希表。

    When compared to RDBMS where the data structure is fixed, with Key-value layout, you have the flexibility to use any type of value and key pairs. Here’s a quick illustration of what a key-value pair looks like.

    与通过键值布局固定数据结构的RDBMS相比,您可以灵活地使用任何类型的值和键对。 这是一个键-值对的外观的快速说明。

    Key Value Database
    Key-Value Database
    关键值数据库

    Use Cases:

    用例:

    • Storing clickstream data

      存储点击流数据
    • Application logging

      应用日志

    Databases:

    数据库:

    • ArangoDB 

      ArangoDB
    • Aerospike

      气钉
    • Couchbase

      Couchbase
    • Redis

      雷迪斯

    4. NoSQL图形布局 (4. NoSQL Graph Layout)

    Graph layout databases are used for data that can be easily represented as related to other bits of data. Each node of the graph database represents an entity which could be a person, place, category, etc. Connecting these nodes is a relationship. For example, fruits could be apples or oranges. Apples are a “type of” fruit. 

    图形布局数据库用于可轻松表示为与其他数据位相关的数据。 图形数据库的每个节点代表一个实体,该实体可以是人,地点,类别等。连接这些节点是一种关系。 例如,水果可以是苹果或橙子。 苹果是一种“水果”。

    In a graph database, the above example can be represented as:

    在图形数据库中,以上示例可以表示为:

    Graph Database
    Graph Database
    图数据库

    As you can see, this is a very simple model in representation but offers a lot of benefits in comparison to RDBMS for modern data.

    如您所见,这是一个非常简单的表示模型,但是与RDBMS用于现代数据相比,它提供了很多好处。

    Use Cases:

    用例:

    • Recommendation Systems

      推荐系统
    • Geospatial Databases

      地理空间数据库

    Databases:

    数据库:

    • Amazon Neptune

      亚马逊海王星
    • DEX/Sparksee 

      DEX / Sparksee
    • Neo4j

      Neo4j
    • Sqrrl Enterprise

      Sqrrl企业

    NoSQL与SQL关系数据库–选择哪个? (NoSQL vs SQL Relational Databases – Which one to choose?)

    When working with databases and choosing the right one, you have to take into account what your application really needs. If you have an application that works with a limited amount of data that is structured an arrives in a specific format, you have no reason to add the complexity of a NoSQL database to your existing systems.

    在使用数据库并选择合适的数据库时,必须考虑到应用程序的真正需求。 如果您的应用程序只能处理有限数量的结构化数据,并且采用特定格式,则您没有理由将NoSQL数据库的复杂性添加到现有系统中。

    But if you’re developing an app that could now, or in future, work with variable data that comes rapidly at a high velocity, it’s best to develop your app with a NoSQL database.

    但是,如果您正在开发的应用程序现在或将来可以使用高速变化的可变数据,那么最好使用NoSQL数据库开发应用程序。

    NoSQL DatabasesTraditional SQL Databases
    Works with variable dataRequires data to be in a structured format
    Can handle large volumes of rapidly changing dataCan handle considerably large volumes of similar data
    Horizontal Scalability – Can scale across systems and serversVertical Scalability – Can scale better as the allocated system resources are increased
    Designed with low-cost hardware in mindDesigned with high-performance hardware in mind
    NoSQL数据库 传统SQL数据库
    处理可变数据 要求数据采用结构化格式
    可以处理大量快速变化的数据 可以处理大量相似数据
    水平可扩展性–可以跨系统和服务器扩展 垂直可扩展性–随着分配的系统资源的增加,可以更好地扩展
    设计时考虑了低成本硬件 设计时考虑了高性能硬件

    不同NoSQL数据库类型的摘要列表 (Summarized List of the Different NoSQL Database Types)

    TypeNotable examples of this type
    Key-Value CacheApache Ignite, Couchbase, Coherence, eXtreme Scale, Hazelcast, Infinispan, Memcached, Redis, Velocity
    Key-Value StoreArangoDB, Aerospike, Couchbase, Redis
    Key-Value Store (Eventually-Consistent)Oracle NoSQL Database, Dynamo, Riak, Voldemort
    Key-Value Store (Ordered)FoundationDB, InfinityDB, LMDB, MemcacheDB
    Tuple StoreApache River, GigaSpaces
    Object DatabaseObjectivity/DB, Perst, ZopeDB
    Document StoreArangoDB, BaseX, Clusterpoint, Couchbase, CouchDB, DocumentDB, eXist-db, IBM Domino, MarkLogic, MongoDB, Qizx, RethinkDB, Elasticsearch
    Wide Column StoreAmazon DynamoDB, Bigtable, Cassandra, Scylla, HBase, Hypertable
    Native Multi-model DatabaseArangoDB, Cosmos DB, OrientDB, MarkLogic
    Graph DatabaseAmazon Neptune, DEX/Sparksee, Neo4j, Sqrrl Enterprise
    类型 这种类型的著名例子
    键值缓存 Apache Ignite,Couchbase,Coherence,eXtreme Scale,Hazelcast,Infinispan,Memcached,Redis,Velocity
    键值存储 ArangoDB,Aerospike,Couchbase,Redis
    键值存储(最终一致) Oracle NoSQL数据库,Dynamo,Riak,Voldemort
    键值存储(已订购) FoundationDB,InfinityDB,LMDB,MemcacheDB
    元组商店 阿帕奇河,GigaSpaces
    对象数据库 客观性/数据库,Perst,ZopeDB
    文件存储 ArangoDB,BaseX,Clusterpoint,Couchbase,CouchDB,DocumentDB,eXist-db,IBM Domino,MarkLogic,MongoDB,Qizx,RethinkDB,Elasticsearch
    宽列存储 Amazon DynamoDB,Bigtable,Cassandra,Sylla,HBase,Hypertable
    本机多模型数据库 ArangoDB,Cosmos DB,OrientDB,MarkLogic
    图数据库 Amazon Neptune,DEX / Sparksee,Neo4j,Sqrrl Enterprise

    Source: Table from Wikipedia NoSQL Page

    资料来源Wikipedia NoSQL页面上的表格

    结论 (Conclusion)

    We hope that this post has helped you understand NoSQL better and has also cleared any questions that you might have had in your mind. NoSQL and non-relational database models are the modern way of handling data and will become a commonplace even in regular businesses in the coming future. 

    我们希望这篇文章可以帮助您更好地理解NoSQL,并清除您可能想到的任何问题。 NoSQL和非关系数据库模型是处理数据的现代方法,并且即使在未来的将来,在常规业务中也将变得司空见惯。

    So it’s a good idea to get yourself well-versed with the new model of data storage for your own future prospects. 

    因此,让自己熟悉新的数据存储模型是一个不错的主意,以适合您自己的未来前景。

    One thing to keep in mind is that even though NoSQL provides a lot of advantages over traditional databases, it comes with its own limitations which are out of scope for this topic at present. But do let us know if you have any questions in mind by commenting below.

    要记住的一件事是,尽管NoSQL提供了优于传统数据库的许多优势,但它也有其自身的局限性,目前这些局限性已超出了范围。 但请在下方评论,让我们知道您是否有任何疑问。

    翻译自: https://www.journaldev.com/36476/what-is-nosql-database

    nosql数据库是什么

    展开全文
  • NoSQL数据库

    千次阅读 2019-01-19 14:49:19
    通常NoSQL数据库具有以下几个特点: (1)灵活的扩展性。 (2)灵活的数据模型。 (3)与云计算紧密结合。 2. NoSQL兴起的原因 关系型数据库已经无法满足web2.0的需求。主要表现在以下几个方面: 关系型数据库已经无法...

    1. NoSQL简介

    在这里插入图片描述
    通常NoSQL数据库具有以下几个特点:
    (1)灵活的扩展性。
    (2)灵活的数据模型。
    (3)与云计算紧密结合。

    2. NoSQL兴起的原因

    1. 关系型数据库已经无法满足web2.0的需求。主要表现在以下几个方面:
      (1)无法满足海量的数据管理需求。
      (2)无法满足数据高并发的需求。
      (3)无法满足高可扩展性和高可用性的需求。

    在这里插入图片描述
    MySQL集群是否可以完全解决问题?

    • 复杂性:部署、管理、配置很复杂。
    • 数据库复制:MySQL主备之间采用复制方式,只能是异步复制,当主库压力较大时可能产生较大时延,主备切换可能会丢失最后一部分更新事务,这时往往需要人工介入,备份和恢复不方便。
    • 扩容问题:如果系统压力过大需要增加新的机器,这个过程涉及数据重新划分,整过过程比较复杂,且容易出错。
    • 动态数据迁移问题:如果某个数据库组压力过大,需要将其中部分数据迁移出去,迁移过程需要总控节点整体协调,以及数据库节点的配合。这个过程很难做到自动化。
    1. “One size fits all”模式很难适用于截然不同的业务场景
      •关系模型作为统一的数据模型既被用于数据分析,也被用于在线业务。但这两者一个强调高吞吐,一个强调低延时,已经演化出完全不同的架构。用同一套模型来抽象显然是不合适的
      •Hadoop就是针对数据分析
      •MongoDB、Redis等是针对在线业务,两者都抛弃了关系模型

    2. 关系数据库的关键特性包括完善的事务机制和高效的查询机制。但是,关系数据库引以为傲的两个关键特性,到了Web2.0时代却成了鸡肋,主要表现在以下几个方面:
      (1 )Web2.0 网站系统通常不要求严格的数据库事务
      (2 )Web2.0 并不要求严格的读写实时性
      (3 )Web2.0 通常不包含大量复杂的SQL 查询 (去结构化,存储空间换取更好
      的查询性能)

    3. NoSQL与关系数据库的比较

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结
    (1 )关系数据库
    优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持.
    劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无法较好支持Web2.0应用,事务机制影响了系统的整体性能等.
    (2 )NoSQL 数据库
    优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大的横向扩展能力等.
    劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等.

    总结
    关系数据库和NoSQL数据库各有优缺点,彼此无法取代
    • 关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性.
    •NoSQL 数据库应用场景:互联网企业、传统企业的非关键业务(比如数据分析)采用混合架构.
    •案例:亚马逊公司就使用不同类型的数据库来支撑它的电子商务应用
    •对于“购物篮”这种临时性数据,采用键值存储会更加高效
    •当前的产品和订单信息则适合存放在关系数据库中
    •大量的历史订单信息则适合保存在类似MongoDB的文档数据库中

    4. NoSQL的四大类型

    NoSQL数据库虽然数量众多,但是,归结起来,典型的NoSQL数据库通常包括键值数据库、列族数据库、文档数据库和图形数据库.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4.1 键值数据库
    在这里插入图片描述
    在这里插入图片描述
    4.2 列族数据库
    在这里插入图片描述
    4.3文档数据库
    在这里插入图片描述
    在这里插入图片描述
    •数据是不规则的,每一条记录包含了所有的有关“SequoiaDB”的信息而没有任何外部的引用,这条记录就是“自包含”的
    •这使得记录很容易完全移动到其他服务器,因为这条记录的所有信息都包含在里面了,不需要考虑还有信息在别的表没有一起迁移走
    •同时,因为在移动过程中,只有被移动的那一条记录(文档)需要操作,而不像关系型中每个有关联的表都需要锁住来保证一致性,这样一来ACID的保证就会变得更快速,读写的速度也会有很大的提升

    在这里插入图片描述

    4.4 图形数据库
    在这里插入图片描述
    4.5 不同类型数据库比较分析
    在这里插入图片描述
    •MySQL产生年代较早,而且随着LAMP大潮得以成熟。尽管其没有什么大的改进,但是新兴的互联网使用的最多的数据库
    •MongoDB是个新生事物,提供更灵活的数据模型、异步提交、地理位置索引等五花十色的功能
    •HBase是个“仗势欺人”的大象兵。依仗着Hadoop的生态环境,可以有很好的扩展性。但是就像象兵一样,使用者需要养一头大象(Hadoop),才能驱使他
    •Redis是键值存储的代表,功能最简单。提供随机数据存储。就像一根棒子一样,没有多余的构造。但是也正是因此,它的伸缩性特别好。就像悟空手里的金箍棒,大可捅破天,小能成缩成针

    5. NoSQL的三大基石

    在这里插入图片描述

    5.1 CAP
    所谓的CAP指的是:

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

    CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个,正所谓“鱼和熊掌不可兼得”(量子通信或许可以鱼和熊掌兼得)。
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

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

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

    在这里插入图片描述

    5.2 说起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)”相对应的一种提法。数据库保存的数据是“硬状态”时,可以保证数据一致性,即保证数据一直是正确。“软状态”是指状态可以有一段时间不同步,具有一定的滞后性

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

    • 最终一致性
      一致性的类型包括强一致性和弱一致性,二者的主要区别在于高并发的数据访问操作下,后续操作是否能够获取最新的数据。对于强一致性而言,当执行完一次更新操作后,后续的其他读操作就可以保证读到更新后的最新数据;反之,如果不能保证后续访问读到的都是更新后的最新数据,那么就是弱一致性。而最终一致性只不过是弱一致性的一种特例,允许后续的访问操作可以暂时读不到更新后的数据,但是经过一段时间之后,必须最终读到更新
      后的数据。
      最常见的实现最终一致性的系统是DNS(域名系统)。一个域名更新操作根据配置的形式被分发出去,并结合有过期机制的缓存;最终所有的客户端可以看到最新的值。

    5.3 最终一致性

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

    • 因果一致性:如果进程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的强一致性时,则总会出现一段“各个节点数据不同步导致系统处理不一致的时间”。为了提供最终一致性的支持,这些系统会提供一些工具来使数据更新被最终同步到所有相关节点。

    6. 从NoSQL到NewSQL数据库

    在这里插入图片描述

    在这里插入图片描述

    7.1 MongoDB简介

    • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库
      系统。
    • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
    • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
      MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档
      数组。

    在这里插入图片描述

    主要特点:

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

    7.2 MongoDB概念解析

    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述

    数据库

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

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

    一个简单的文档例子如下:
    {“site”:“dblab.xmu.edu.cn”, “name”:“厦门大学数据库实验室"}

    在这里插入图片描述

    集合

    • 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
    • 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
      比如,我们可以将以下不同数据结构的文档插入到集合中:
      {“site”:“www.baidu.com”}
      {“site”:“dblab.xmu.edu.cn”, “name”:“厦门大学数据库实验室"}
      {“site”:“www.runoob.com”,“name”:“菜鸟教程”,“num”:5}

    在这里插入图片描述

    7.3 安装MongoDB

    在这里插入图片描述

    7.4 访问MongoDB

    • 使用 MongoDB shell 来连接 MongoDB 服务器
      mongodb://localhost

    • 使用用户名和密码连接登陆到指定数据库:
      mongodb://admin:123456@localhost/test

    MongoDB 创建数据库
    MongoDB 创建数据库的语法格式如下:

    use DATABASE_NAME
    

    如果数据库不存在,则创建数据库,否则切换到指定数据库。

    如果你想查看所有数据库,可以使用 show dbs 命令

    创建集合
    MongoDB没有单独创建集合名的shell命令,在插入数据的时候,
    MongoDB会自动创建对应的集合。

    7.4.1 使用 MongoDB shell访问MongoDB

    MongoDB 插入文档
    文档的数据结构和JSON基本一样。
    所有存储在集合中的数据都是BSON格式。
    BSON是一种类JSON的一种二进制形式的存储格式,简称Binary JSON。
    MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

    db.COLLECTION_NAME.insert(document)
    

    实例

    >db.col.insert({title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库',
    by: ‘厦门大学数据库实验室',
    url: 'http://dblab.xmu.edu.cn',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
    })
    

    7.4.2 使用Java程序访问 MongoDB

    MongoDB Java
    环境配置

    • 在Java程序中如果要使用MongoDB,需要确保已经安装了Java环境及
      MongoDB JDBC 驱动。
    • 首先必须下载mongo jar包,下载地址:https://github.com/mongodb/mongo-
      java-driver/downloads, 请确保下载最新版本。
    • 需要将mongo.jar包含在你的 classpath 中

    (1 )连接数据库

    import com.mongodb.MongoClient;
    ……//这里省略其他需要导入的包
    public class MongoDBJDBC{
    public static void main( String args[] ){
    try{
    // 连接到 mongodb 服务
    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    // 连接到数据库
    DB db = mongoClient.getDB( "test" );
    System.out.println("Connect to database successfully");
    boolean auth = db.authenticate(myUserName, myPassword);
    System.out.println("Authentication: "+auth);
    }catch(Exception e){
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
    }
    }
    

    (2 )创建集合 可以使用com.mongodb.DB类中的createCollection()来创建集合

    public class MongoDBJDBC{
    public static void main( String args[] ){
    try{
    // 连接到 mongodb 服务
    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    // 连接到数据库
    DB db = mongoClient.getDB( "test" );
    System.out.println("Connect to database successfully");
    boolean auth = db.authenticate(myUserName, myPassword);
    System.out.println("Authentication: "+auth);
    DBCollection coll = db.createCollection("mycol");
    System.out.println("Collection created successfully");
    }catch(Exception e){
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
    }
    }
    

    (3 )插入文档 可以使用com.mongodb.DBCollection类的 insert() 方法来插入一个文档

    public class MongoDBJDBC{
    public static void main( String args[] ){
    try{ // 连接到 mongodb 服务
    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    DB db = mongoClient.getDB( "test" ); // 连接到数据库
    System.out.println("Connect to database successfully");
    boolean auth = db.authenticate(myUserName, myPassword);
    System.out.println("Authentication: "+auth);
    DBCollection coll = db.getCollection("mycol");
    System.out.println("Collection mycol selected successfully");
    BasicDBObject doc = new BasicDBObject("title", "MongoDB").
    append("description", "database").
    append("likes", 100).
    append("url", "http://www.w3cschool.cc/mongodb/").
    append("by", "w3cschool.cc");
    coll.insert(doc);
    System.out.println("Document inserted successfully");
    }catch(Exception e){
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
    }
    }
    

    本章小结

    • 本章介绍了NoSQL数据库的相关知识
    • NoSQL数据库较好地满足了大数据时代的各种非结构化数据的存储需求,开始得到越来越广泛的应用。但是,需要指出的是,传统的关系数据库和NoSQL数据库各有所长,彼此都有各自的市场空间,不存在一方完全取代另一方的问题,在很长的一段时期内,二者都会共同存在,满足不同应用的差异化需求
    • NoSQL数据库主要包括键值数据库、列族数据库、文档型数据库和图形数据库等四种类型,不同产品都有各自的应用场合。CAP、BASE和最终一致性是NoSQL数据库的三大理论基石,是理解NoSQL数据库的基础
    • 介绍了融合传统关系数据库和NoSQL优点的NewSQL数据库
    • 本章最后介绍了具有代表性的NoSQL数据库——文档数据库MongoDB
    展开全文
  • 8种主流NoSQL数据库对比,有时间可以了解了解
  • 关于NoSQL数据库(例如MongoDb)的研讨会,通过使用MongoDb和Neo4j数据库探索了理论和实践。 NoSQL Workshop Gitbook 这是 车间细节 准备工作: 克隆此仓库: git clone ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,415
精华内容 53,366
关键字:

nosql数据库