System Design NoSQL - 学习笔记

引用:
系统设计入门

NoSQL 是键-值数据库文档型数据库列型数据库图数据库的统称。
数据库是非规范化的,表联结大多在应用程序代码中完成。

大多数 NoSQL 无法实现真正符合 ACID 的事务,支持最终一致

BASE 通常被用于描述 NoSQL 数据库的特性。相比 CAP 理论,BASE 强调可用性超过一致性。

  • 基本可用 – 系统保证可用性。
  • 软状态 – 即使没有输入,系统状态也可能随着时间变化。
  • 最终一致性 – 经过一段时间之后,系统最终会变一致,因为系统在此期间没有收到任何输入。

键-值存储

键-值存储通常可以实现 O(1) 时间读写,用内存或 SSD 存储数据。数据存储可以按字典顺序维护键,从而实现键的高效检索。键-值存储可以用于存储元数据。

键-值存储性能很高,通常用于存储简单数据模型或频繁修改的数据,如存放在内存中的缓存。
键-值存储提供的操作有限,如果需要更多操作,复杂度将转嫁到应用程序层面。

键-值存储是如文档存储,在某些情况下,甚至是图存储等更复杂的存储系统的基础。

例如:

  • Memcached
  • Redis

文档类型存储

抽象模型:将文档作为值的键-值存储

文档类型存储以文档(XML、JSON、二进制文件等)为中心,文档存储了指定对象的全部信息
文档存储根据文档自身的内部结构提供 API 或查询语句来实现查询

基于底层实现,文档可以根据集合、标签、元数据或者文件夹组织。尽管不同文档可以被组织在一起或者分成一组,但相互之间可能具有完全不同的字段。

文档类型存储具备高度的灵活性,常用于处理偶尔变化的数据

例如:

  • MongoDB
  • CouchDB
  • Amazon DynamoDB
    它是完全托管的云数据库,支持文档键值存储模型。它拥有灵活的数据模型、可靠的性能以及自动的吞吐容量扩展功能。
  • Elastic Search

列型存储

《System Design NoSQL - 学习笔记》 列型存储

抽象模型:嵌套的 ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>> 映射

类型存储的基本数据单元是列 Column(名 ColKey/值 Value 对)。列可以在列族 Column Family(类似于 SQL 的数据表)中被分组。超级列族再分组普通列族。

你可以使用行键 RowKey 独立访问每一列,具有相同行键值 RowKey 的列组成一行。

每个值都包含版本的时间戳用于解决版本冲突。

Google 发布了第一个列型存储数据库 Bigtable,它影响了 Hadoop 生态系统中活跃的开源数据库 HBase 和 Facebook 的 Cassandra。像 BigTable,HBase 和 Cassandra 这样的存储系统将键以字母顺序存储,可以高效地读取键列。

列型存储具备高可用性和高可扩展性。通常被用于大数据相关存储。

关于 Bigtable:
Cloud Bigtable 是 Google 面向大数据领域的 NoSQL 数据库服务。它也是为 Google 搜索、Analytics(分析)、地图和 Gmail 等众多核心 Google 服务提供支撑的数据库。

Bigtable 的设计目标是以稳定的低延迟高吞吐性能处理巨量的工作负载,因此它是运营和分析型应用(包括 IoT 物联网、用户分析和金融数据分析)的理想之选。

一个简单的例子参见 Example: HBase APIs for Java “Hello World” Application

图数据库

《System Design NoSQL - 学习笔记》 图数据库

在图数据库中,一个节点对应一条记录,一个弧对应两个节点之间的关系。
图数据库被优化用于表示外键繁多的复杂关系或多对多关系。

图数据库为存储复杂关系的数据模型,如社交网络,提供了很高的性能。它们相对较新,尚未广泛应用,查找开发工具或者资源相对较难。许多图只能通过 REST API 访问。

例如:

SQL 还是 NoSQL

选取 SQL 的原因:

  • 结构化数据,严格的模式
  • 关系型数据
  • 需要复杂的联结操作
  • 事务
  • 清晰的扩展模式
  • 既有资源更丰富:开发者、社区、代码库、工具等
  • 通过索引进行查询非常快

选取 NoSQL 的原因:

  • 半结构化数据,动态或灵活的模式
  • 非关系型数据
  • 不需要复杂的联结操作
  • 存储 TB (甚至 PB)级别的数据
  • 高数据密集的工作负载
  • IOPS 高吞吐量

适合 NoSQL 的示例数据:

  • 埋点数据和日志数据
  • 排行榜或者得分数据
  • 临时数据,如购物车
  • 频繁访问的(“热”)表
  • 元数据/查找表
    原文作者:专职跑龙套
    原文地址: https://www.jianshu.com/p/765da7e45bed
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞