📜  NoSQL 简介

📅  最后修改于: 2021-09-10 01:49:49             🧑  作者: Mango

NoSQL最初是指非 SQL 或非关系型的,是一种提供数据存储和检索机制的数据库。该数据以关系数据库中使用的表格关系以外的方式建模。此类数据库于 1960 年代后期问世,但直到 21 世纪初期的流行浪潮才获得 NoSQL 绰号。 NoSQL 数据库用于实时 Web 应用程序和大数据,并且它们的使用随着时间的推移而增加。 NoSQL 系统有时也被称为 Not only SQL,以强调它们可能支持类似 SQL 的查询语言这一事实。

NoSQL 数据库包括简单的设计、更简单的机器集群水平扩展以及对可用性的更精细控制。 NoSQL 数据库使用的数据结构与关系数据库中默认使用的数据结构不同,这使得 NoSQL 中的某些操作更快。给定 NoSQL 数据库的适用性取决于它应该解决的问题。 NoSQL 数据库使用的数据结构有时也被视为比关系数据库表更灵活。

许多 NoSQL 存储为了可用性、速度和分区容错性而妥协一致性。广泛采用 NoSQL 存储的障碍包括使用低级查询语言、缺乏标准化接口以及之前对现有关系数据库的巨额投资。大多数 NoSQL 存储缺乏真正的 ACID(原子性、一致性、隔离性、持久性)事务,但一些数据库,如 MarkLogic、Aerospike、FairCom c-treeACE、Google Spanner(虽然技术上是 NewSQL 数据库)、Symas LMDB 和 OrientDB 已经实现了它们他们设计的核心。

大多数 NoSQL 数据库都提供最终一致性的概念,其中数据库更改会传播到所有节点,因此对数据的查询可能不会立即返回更新的数据,或者可能导致读取的数据不准确,这种问题称为过时读取。此外,一些 NoSQL 系统可能会出现写入丢失和其他形式的数据丢失。一些 NoSQL 系统提供了诸如预写日志之类的概念来避免数据丢失。对于跨多个数据库的分布式事务处理,数据一致性是一个更大的挑战。这对于 NoSQL 和关系数据库来说都很困难。即使当前的关系数据库也不允许跨数据库的参照完整性约束。很少有系统同时维护 X/Open XA 标准和 ACID 事务以进行分布式事务处理。

NoSQL的优点:
使用 NoSQL 数据库(例如 MongoDB 和 Cassandra)有很多优势。主要优点是高可扩展性和高可用性。

  1. 高可扩展性 –
    NoSQL 数据库使用分片进行水平扩展。对数据进行分区并将其以保留数据顺序的方式放置在多台机器上就是分片。垂直扩展意味着向现有机器添加更多资源,而水平扩展意味着添加更多机器来处理数据。垂直缩放并不容易实现,但水平缩放很容易实现。水平扩展数据库的例子有 MongoDB、Cassandra 等。 NoSQL 可以处理大量数据,因为它具有可扩展性,随着数据的增长 NoSQL 自身扩展以有效地处理这些数据。
  2. 高可用性 –
    NoSQL 数据库中的自动复制功能使其高度可用,因为在发生任何故障时,数据会自我复制到之前的一致状态。

NoSQL 的缺点:
NoSQL 有以下缺点。

  1. 窄焦点——
    NoSQL 数据库的重点非常狭窄,因为它主要是为存储而设计的,但它提供的功能很少。在事务管理领域,关系数据库是比 NoSQL 更好的选择。
  2. 开源——
    NoSQL 是开源数据库。目前还没有可靠的 NoSQL 标准。换句话说,两个数据库系统很可能是不平等的。
  3. 管理挑战——
    大数据工具的目的是让海量数据的管理尽可能简单。但这并不容易。 NoSQL 中的数据管理比关系数据库复杂得多。尤其是 NoSQL,以安装难度大、日常管理更加繁忙而著称。
  4. GUI 不可用 –
    用于访问数据库的 GUI 模式工具在市场上并不灵活。
  5. 备份 –
    对于某些 NoSQL 数据库(如 MongoDB)来说,备份是一个很大的弱点。 MongoDB 没有以一致的方式备份数据的方法。
  6. 大文件尺寸 –
    MongoDB 和 CouchDB 等一些数据库系统以 JSON 格式存储数据。这意味着文档非常大(大数据、网络带宽、速度),并且具有描述性的键名实际上是有害的,因为它们会增加文档大小。

NoSQL 数据库的类型:
NoSQL 数据库的类型和属于该类别的数据库系统的名称是:

  1. MongoDB 属于基于 NoSQL 文档的数据库类别。
  2. 键值存储: Memcached、Redis、Coherence
  3. 表格: Hbase、大表、Accumulo
  4. 基于文档: MongoDB、CouchDB、Cloudant

什么时候应该使用 NoSQL:

  1. 当需要存储和检索大量数据时。
  2. 你存储的数据之间的关系不是那么重要
  3. 数据随时间变化并且没有结构化。
  4. 数据库级别不需要约束和联接的支持
  5. 数据不断增长,您需要定期扩展数据库来处理数据。