由于在AWS上有许多数据库服务,让人感到困惑,所以我整理并总结了一下
你好,我是AWS 解决方案架构师助理 Iron Chiba。AWS提供了许多数据库服务,有点令人困惑。我打算进行各种比较和整理,包括特点和什么时候使用等。
在AWS上的数据库
首先,让我们来看一下有哪些种类。
红框部分将成为整理数据库。
-
- Amazon RDS
-
- Amazon DynamoDB
-
- Amazon ElastiCache
- Amazon Redshift
好多啊(((( ;°Д°))))
以下的内容非常丰富(很长),可能需要每天看一项也可以。
从零开始,整理这些内容大约需要一周的时间。
【基础知识】关系型数据库和非关系型数据库等等…各种各样。
在讨论AWS之前,我们需要先谈论一些前提知识,如RDBMS和NoSQL等等。
RDBMS是什么?
大家都知道,关系型数据库的代表有Oracle、MySQL和PostgreSQL等。
特点是,
-
- 表形式でデータを保存
-
- SQLを利用してデータを操作
-
- トランザクション処理により、複数ユーザの同時に同一のデータを参照・更新しても矛盾が発生しない
-
- データ一貫性(すべての人に同じデータを返す※RDBMSでは当たり前ですが、NoSQLではデータ一貫性がなく、違いう値を返す場合があります。データ一貫性はRDBMSの特徴ですね)
- スケールアウトが困難(高負荷時、アクセスが集中した場合、構造的にスケールアウトできないのでレイテンシを稼ぐのが難しい)
我会在维基百科上查找详细信息。
什么是NoSQL?
除了关系型数据库管理系统(RDBMS),还有其他数据库的术语。
举几个例子,如Google的BigTable、MongoDB、Redis、Apache HBase、Apache Cassandra。
作为特征,有以下几点:
* 使用键值对保存数据。以编程语言为例,可以使用关联数组、哈希表、字典等形式保存数据。
* 无法进行事务处理。
* 不存在模式(即无固定结构)。
* 保证结果一致性(如果在长时间没有更新后,所有更新都会被反映,并保持一致性。换句话说,更新后可能返回更新前的值或更新后的值)。
* 结构上可以进行横向扩展(在高负载时,即使访问集中,通过横向扩展可实现低延迟。即使数据量庞大,也能保持低延迟)。
它最大的特点是可以进行扩展。因此,它可以处理比关系型数据库更多的数据量。非常适用于大数据分析和实时信息处理等方面。
我会依赖于维基百科来获取详细信息。
列指向数据库(也称为列存储数据库)
在关系型数据库(RDBMS)中,被设计为在提取一组列时具有高效性。
在传统的数据库管理系统(DBMS)中,将行作为一组存储在接近文件系统位置。而在列导向存储中,将列存储在接近文件系统位置。
对于以列为单位进行处理的情况,这将成为一个有效的数据库。
列导向适用于交互式交易处理,而行导向适合于数据仓库。
我会仔细查阅维基百科来获取详细信息。
从CAP定理的角度来看,关系型数据库管理系统(RDBMS)和非关系型数据库(NoSQL)
首先,是关于CAP定理的解释。
CAP定理是什么?
CAP定理指的是在分布式数据库中无法同时保证以下三个条件。
-
- 一貫性(データ更新直後であっても、全てのノードで同じデータを参照できる)
-
- 可用性(単一障害点が存在しないこと)
- ネットワーク分断耐性(ネットワーク分断が発生しても継続して利用できる)
关系型数据库管理系统(RDBMS)具备一致性和可用性,而非关系型数据库(NoSQL)则具备可用性和网络分区容错性。
我會仔細參考維基百科。
AWS数据库的分类
根据前提知识来分类,会变成这样。
-
- Amazon RDS → 行指向型RDBMS
-
- Amazon DynamoDB → NoSQL(Key-Valueストア)
-
- Amazon ElastiCache → NoSQL(Key-Valueストア+インメモリ)
- Amazon Redshift → 列指向型RDBMS
我认为通过这个,你可能已经隐约有了一个印象。
让我们详细了解一下AWS的数据库服务
由于可以进行分类,因此我可以清楚地了解到它们的不同之处,因此我将它们的特点和用途总结如下。
亚马逊云数据库服务 (Amazon RDS)
如果需要关系型数据库,并且想要简化管理工作,可以使用。
Oracle和SQL Server的许可证可以使用BYOL(即使不购买许可证,也包含在按时间计费中)。建立也可以通过Web界面进行,还可以简单地构建数据中心级的冗余配置。
作为特点:
* OS级别以下的操作(如应用OS补丁,处理硬件故障等)可交由Amazon负责。
* 可以实现数据中心级别的主从配置(同步复制)。
* 对于MySQL来说,可以在不同地区(国家级别)之间进行读副本配置(异步复制)。
* 可选择使用MySQL、PostgreSQL、Oracle、MS SQL Server。
* 备份可以按计划每天备份一次(也可手动备份)。※但备份期间IO将停止,若不希望停止请使用多可用区(Multi-AZ)功能。
* 通过安全组(防火墙功能)可以灵活地进行访问控制。
亚马逊DynamoDB
这是一个键值存储数据库。即使有大量的数据,它也可以保持低延迟,但不适用于复杂查询和事务处理。
它适用于需要高吞吐量和处理大量数据的场景。
特征如下:
* OS层由亚马逊管理,可以专注于如何利用数据。
* 没有存在模式(schema-free)。
* 通过采取结果一致性来提高可用性(换句话说,损失了一致性)。※根据设置,也可以确保结果一致性。
* 存储没有容量限制(可以无限使用,不需要增加磁盘等)。
* 数据存储在三个数据中心。
* 可以使用预留实例。
弹性缓存
这是一个受管理的内存缓存。Amazon负责操作系统及以下的维护工作。无需进行中间安装即可使用。可供使用的产品有:
-
- memcached
- redis
使用ElastiCache可以减轻后端数据库(如Oracle或MySQL)的读取负载。
首先,什么是内存缓存?
首先,什么是内存缓存?它是将数据存储在内存中,以便能够快速获取。
那么,为什么需要内存缓存呢?
虽然可以将所有数据在数据库中处理(在负载可承受的情况下),但如果希望减少数据库负载并且有大量访问量时,可以考虑进行扩展或构建只读副本。然而,内存缓存是一种在不增加太多成本的情况下实现加速的方法。但是,由于数据存储在内存中,因此在节点故障时会丢失数据。这就是访问速度和数据持久化之间的权衡。适合存储易挥发的数据。
作为内存缓存的用途有
-
- 負荷の高いDBクエリの結果を一時的に保存(DB負荷低減、クエリの高速化)
-
- セッションデータを格納して、ステートレスなアプリに
- アプリでの複雑な計算結果を保管(データ再利用)
需要在应用程序中对数据库和缓存进行分离的实现,以确保与数据库的数据一致性,并实现同时对数据库和缓存进行写入等操作。
我将分别谈论以下内容的特点。
内存缓存机制
这是一个内存中的键值存储系统。
非常非常简单。
-
- レプリケーション機能なし(基本的にアプリ側でクラスタ全ノードに書き込みするなどで冗長化する)
-
- データの削除は、明示的、期限、LRU
-
- クラスターという単位で構成。アクセスは、クラスタレベル、ノードレベルで指定できる(対応ライブラリにて)
-
- バックアップ機能はない(snapshotの取得できない)
-
- データ永続化できない
-
- マルチAZ構成対応
- クラスタリングとしてtwemproxyの利用を検討
Redis 可以简述为一个开源的、高性能的键值对存储系统。
这也是一个键值存储。
相比memcached,它更加强大。
-
- 高機能なデータ構造を持つ(List、Set、Stored、Set、Hash)複雑なデータを扱うのであれば、redisを選択ですかね
-
- データの永続化ができる
Snapshotによる永続化(Redisの機能、BGSAVEを内部的に実行)バックアップ、リストアが可能。性能懸念がある場合は、リードレプリカから取得する。日時で取得可能。
Append only Fileによる永続化(書き込みコマンドをファイルに記録)。ノード障害時はファイルごと消える。。
リードレプリカ対応(ただし、非同期レプリケーション)
マルチAZ構成対応(リードレプリカをマスターノードに自動フェイルオーバー。エンドポイントは変わらない)
クラスタリングとしてtwemproxyの利用を検討
redis自体はシングルスレッド(複数クエリを同時に実行できない)ため、時間がかかるクエリは避ける必要がある
红移
这是一个以佩塔字节规模为基础的高速数据仓库。它是基于PostgreSQL的列向数据库。尽管对并发查询有限制,但它可以快速查询大量数据。主要用于BI工具等分析用数据库。
作为特征
-
- MPP(超並列演算)により、データ容量に関係なく低レイテンシ
-
- 列指向データベースのため分析が得意
-
- OSレイヤはAmazon側で管理。データをどう利用するかに専念できる。
-
- SQL文が利用できる
-
- データロードは、S3、DynamoDB、EMR、Data Pipelineからロードできる(Cross-Reagion機能で別リージョンのデータもCOPYとも連携可能)
-
- EMRとデータを連携可用能
-
- 日時で自動スナップショットの取得ができる(別リージョンへのコピーも自動でできる)
-
- シングル AZ 配置のみサポート(AZが停止した場合は、AZが復旧次第利用可能。データは保持されている)
-
- データ容量は最大2PBまで拡張できる(16TB✕128ノード)
-
- リザーブドインスタンスも利用可能
-
- rebootで設定変更が反映される
- shutdownでクラスターが削除される(再度利用する場合はスナップショット必須)
下一步
使用「AWS 通过 Amazon Redshift 活用数据集」来了解概览。
在「随时随地尝试!通过classmethod完成云时代的数据仓库超入门」一书中,亲自实践能够加深理解。
总结
-
- DynamoDB → 大量のオンライントランザクションがある場合はわしにまかせるのじゃ
-
- Redshift → 大容量データの分析は、だまってオレに任せとけ
-
- RDS → 低レイヤ(OS以下)の管理不要、高可用性な、既存データベースを簡単使う場合
- ElastiCache → DBの負荷低減用のメモリキャッシュなら私を使ってね
-
- Amazon RDS → 行指向型RDBMS
-
- Amazon DynamoDB → NoSQL(Key-Valueストア)
-
- Amazon ElastiCache → NoSQL(Key-Valueストア+インメモリ)
- Amazon Redshift → 列指向型RDBMS