抉择哪个?
Amazon Web Services (AWS) 是世界上最大的云平台,领有 200 多项性能。在本文中,咱们合成了 10 种至多反对某些 SQL 语法的 AWS 服务,探讨它们的用例,并举例说明如何编写查问。
服务 形容 SQL 反对 用例
RDS Postgres、MySQL 等 满的 中小型网络应用
极光 无服务器数据库 满的 无服务器利用
红移 数据仓库 满的 OLAP、PB 级数据、剖析
动静数据库 NoSQL 数据库 一些 – PartiSQL 电子商务,疾速构建
键空间 托管 Cassandra(键值)一些 – CQL 消息传递
海王星 图数据库 一些 – openCypher 社交网络
工夫流 工夫序列数据库 局部的 物联网、日志记录
量子账本 加密验证交易 一些 – PartiSQL 金融
雅典娜 S3 上的即席查问 一些 – CTAS 历史数据
巴别鱼 Aurora 上的 MSFT SQL Server 满的。网
上表显示了服务之间的 SQL 反对如何变动。图形数据库不能像经典关系数据库那样被查问,各种 SQL 子集(如 PartiQL)曾经呈现以适应这些模型。事实上,即便在规范 SQL 中,也有许多 SQL 方言实用于不同的公司,如 Oracle 和 Microsoft。
AWS 数据库服务
从关系到图表到分类账到工夫序列,上面的服务简直涵盖了所有能够设想的托管数据库用例。让咱们检查一下它们的用处以及如何针对它们编写 SQL 查问!
RDS
亚马逊 RDS
Amazon RDS 是最根本的 AWS 数据库服务之一,次要用于将您的数据库治理操作卸载到平台上。因而,它用于数据量无限的中小型企业,并且公司经营所需的性能不是太简单。
Amazon RDS 反对 MySQL、MariaDB、PostgreSQL、Oracle 和 Microsoft SQL Server 等数据库引擎。它装备了应用 SSH 爱护您的 RDS 实例的工作流程,并提供了一个简略的云控制台用于连贯。
益处
Amazon RDS 是最便宜的服务,因为它易于应用且不简单。
它具备高度可扩展性,容许您扩大到 32 个 vCPU 和 244 Gb RAM。
该服务也易于应用且速度十分快。
示例 SQL
RDS 只是围绕外围数据库的一些不错的治理选项,因而它反对每个数据库反对的确切 SQL。这是一个能够针对 Postgres、MySQL 或 Oracle 运行的子查问。
SELECT
*
FROM
users
WHERE
id IN (
SELECT
user_id
FROM
transactions
WHERE
amount > 1000
);
AWS 极光
亚马逊极光
Amazon Aurora 是 Amazon RDS 的降级版本。大型企业应用它,因为它们的数据量和操作复杂性要高得多。它不反对与 Amazon RDS 雷同的所有数据库引擎,而是仅反对 MySQL 和 PostgreSQL。Aurora 会随着数据库负载的减少和缩小而向上和向下扩大。PlanetScale 等较新的提供商也提供此性能,具备额定的架构迁徙性能和更低的老本。
Amazon Aurora 与 RDS 一样,能够执行复制。它实际上提供了大概 15 种不同类型的复制,一个复制能够在几毫秒内实现。另一方面,RDS 只能执行五种类型的复制,须要更多工夫。
能够形容 Amazon Aurora 实力的一些用例是企业应用程序、SaaS 应用程序和 Web/ 移动游戏。
益处
主动缩放容许在不影响数据库性能的状况下主动执行缩放操作。它容许每个数据库实例最多 128 TB。
Aurora 备份操作是主动的、间断的、增量的,并且具备大概 99.99999999% 的持久性。
Aurora 能够在不到一分钟的工夫内检测到数据库故障并复原。此外,在产生永久性故障的状况下,它能够主动挪动到正本而不会失落数据。
红移
亚马逊红移
与 Amazon Aurora 一样,大型企业也应用 Amazon Redshift。然而,Redshift 更简单,能够解决更多的数据,被称为数据仓库。这是因为 Redshift 是为 OLAP(在线剖析解决)构建的。
此外,Redshift 能够扩大到 PB 级的数据,每个集群最多反对 60 个用户定义的数据库。另一方面,Aurora 只能扩大到 TB,最多反对 40 个。除此之外,两种数据库服务的安全性和维护性简直雷同。
Amazon Redshift 的一些用例是创立机器模型以预测经营、优化公司的商业智能并进步开发人员的工作效率。
益处
在咱们查看过的三个选项中,Redshift 领有最高的扩大能力。
它的性能更快,更耐用。
Amazon Redshift 还能够解决更大量的数据并在更短的工夫内对其进行剖析。
示例 SQL
Redshift 反对一些通常只有大型数据仓库应用程序才须要的 SQL 函数和查问。例如,PERCENTILE_CONT 计算线性插值以返回百分位数。
SELECT
TOP 10 salesid,
sum(pricepaid),
percentile_cont(0.6) WITHIN GROUP (
ORDER BY
salesid
),
median (salesid)
FROM
sales
GROUP BY
salesid,
pricepaid;
动静数据库
亚马逊动静数据库
DynamoDB 是亚马逊对 MongoDB 的回应,MongoDB 是一种实用于 JSON 文档的 NoSQL 数据库。这些数据库重大依赖嵌套数据,并且不会强制执行任何严格的模式,除非开发人员关上该选项。这意味着 DynamoDB 非常适合 CMS 等大容量站点或具备大量流量的挪动应用程序。例如,美国职业棒球大联盟和 Duolingo 都应用 DynamoDB。
示例 SQL
因为 DynamoDB 不是关系型数据库,并且默认状况下不强制执行 ACID,所以它必须应用规范 SQL 的批改版本。Amazon 开发了一种名为 PartiQL 的查询语言,它应用许多 SQL 概念,但专为高度嵌套的数据而构建。上面的查问以绝对 SQL 规范的形式利用了 DynamoDB 的键值根底。
UPDATE
Music
SET
AwardsWon = 1
SET
AwardDetail = {'Grammys': [ 2020, 2018] }
WHERE
Artist = 'Acme Band'
AND SongTitle = 'PartiQL Rocks'
键空间
AWS 徽标
Cassandra 是驰名的分布式键值数据库。iMessage 尽管在客户端应用 SQLite,但通过 Apple 的大型 Cassandra 集群发送所有音讯。其余构建具备高容错需要的分布式服务的开发人员也可能会思考应用 Cassandra,只管他们不想为治理大型集群而头疼。这就是 AWS Keyspaces 通过证实托管 Cassandra 发挥作用的中央。
示例 SQL
Cassandra 我的项目开发了本人的 SQL 子集,称为 CQL,它应用键空间、表、分区、行和列的概念来查问数据。上面的例子是一个 CQL 指令,它应用 Cassandra 驰名的容错来复原某个工夫点的键空间。
RESTORE TABLE mykeyspace.mytable_restored
FROM TABLE mykeyspace.my_table
WITH restore_timestamp = ‘2020-06-30T04:05:00+0000’
AND custom_properties = {
'point_in_time_recovery': {'status' :'disabled'},
'capacity_mode': {
'throughput_mode': 'PROVISIONED',
'read_capacity_units': 10,
'write_capacity_units': 20
}
}
AND TAGS = {
'key1' :'val1',
'key2' :'val2'
};
AWS 海王星
AWS 海王星
最驰名的图数据库可能是 Neo4j,但对于 AWS 生态系统中的开发人员来说,Neptune 能够填补这个角色。图数据库对于建模网络中 N 个我的项目之间的关系十分有帮忙。社交网络是一个不言而喻的利用,但欺诈检测甚至基础设施治理也是图数据库的良好用例。Neo4j 开发了一种名为 openCypher 的开源图形查询语言,AWS Neptune 反对该语言。
示例 SQL
如您所见,将以下查问称为 SQL 查问有点善良。事实上,openCypher 语言可能是这里最奇异的 SQL 语言。在此查问中,咱们定义了两个机场之间的路线。这基本上是一个 INSERT. 稍后,咱们能够在票务零碎中查问机场之间的最佳路线抉择。
MATCH (a:airport {code:’SEA’}), (b:airport {code:’ANC’}),
CREATE (a)-[r:route]->(b)
RETURN r
工夫流
亚马逊工夫流
因为有限日志记录、物联网、区块链和金融科技的呈现,工夫序列数据库越来越受欢迎。工夫序列数据库试图暗藏跨日期范畴查问、存储有限历史数据和放弃以后数据最新的苦楚。压缩通常是应用工夫序列数据库的要害指标。
AWS Timestream 专门帮忙治理此数据的生命周期,还与您可能冀望的其余 AWS 服务集成,包含 AWS IoT Core!
示例 SQL
在对工夫序列数据进行查问时,咱们大量应用专用表表达式 (CTE) 和聚合。AWS Timestream 反对许多有用的函数,使这些查问更容易,因为您想在 SQL 中实现线性插值吗?在上面的查问中,咱们发现特定 EC2 主机在过来 2 小时内以 30 秒的工夫距离划分的均匀 CPU 利用率,应用线性插值填充缺失值。而后能够将这些数据显示在不便的折线图上或以其余形式用于服务监控。
WITH binned_timeseries AS (
SELECT
hostname,
BIN(time, 30s) AS binned_timestamp,
ROUND(AVG(measure_value: :double), 2) AS avg_cpu_utilization
FROM
"sampleDB" .DevOps
WHERE
measure_name = 'cpu_utilization'
AND hostname = 'host-Hovjv'
AND time > ago(2h)
GROUP BY
hostname,
BIN(time, 30s)
),
interpolated_timeseries AS (
SELECT
hostname,
INTERPOLATE_LINEAR(CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)
) AS interpolated_avg_cpu_utilization
FROM
binned_timeseries
GROUP BY
hostname
)
SELECT
time,
ROUND(value, 2) AS interpolated_cpu
FROM
interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
量子账本 (QLDB)
QLDB
QLDB 是一个宏大的分类账或金融事件的历史。银行或人口普查局等组织应用分类账来确保无论他们的数据产生什么状况,他们都能够相对确定记录。咱们将留神到 AWS 文档致力不应用术语区块链。确实,如果 QLDB 散布在世界各地并凋谢拜访,它将十分靠近比特币。
QLDB 的要害属性是它是不可变的。没方法,数据库的提交日志怎么能被批改。如果是,分类帐能够报告此状况或回绝解决其余交易。QLDB 的根底是一种名为 AWS Ion 的相似 JSON 的数据结构。咱们之前看到了 PartiQL 如何为高度嵌套的数据提供一种 SQL 式查询语言。上面的示例将一条记录插入 QLDB 以跟踪车辆注销。
示例 SQL
一旦这条记录被输出到账本中,它就变得不可变,并且在不插入新记录的状况下无奈更改。换句话说,UPDATE 对于 QLDB 真的没有概念。
INSERT INTO VehicleRegistration VALUE
{
'VIN' : 'KM8SRDHF6EU074761', --string
'RegNum' : 1722, --integer
'State' : 'WA',
'City' : 'Kent',
'PendingPenaltyTicketAmount' : 130.75, --decimal
'Owners' : { --nested struct
'PrimaryOwner' : {'PersonId': '294jJ3YUoH1IEEm8GSabOs'},
'SecondaryOwners' : [ --list of structs
{'PersonId' : '1nmeDdLo3AhGswBtyM1eYh'},
{'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9'}
]
},
'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision
'ValidToDate' : `2020-06-25T`
}
AWS 雅典娜
亚马逊雅典娜
您是否已经只是将数据推送到 S3 中而遗记了它?S3 通常存储数 TB 的 JSON、CSV、文本或其余非结构化数据。AWS Athena 是一种 SQL 服务,用于从 S3 中提取数据并将其推送到关系构造中。它非常适合查看存储桶、通过 ETL 流程转换数据或清理数据以发送到 Hadoop 等服务。它还与 DataStation 兼容。
还有另一种应用名为 S3 Select 的服务查问 S3 的办法。无关此主题的更多信息行将公布到 Arctype 博客!Athena 比 S3 Select 更灵便,因为它能够在同一个查问中涉及多个对象和存储桶。这也称为进行“长期”查问。
示例 SQL
AWS Athena 的要害概念称为从查问后果创立表 (CTAS)。很显著,在查问 S3 之前是不存在表的,所以咱们须要利用 INSERT INTO 拉取数据的时候来建表。在上面的查问中,咱们依据 S3 存储桶中的 CSV 绘制 2015 年之前的日期。
INSERT INTO new_parquet
SELECT id,
date,
element,
datavalue,
mflag,
qflag,
sflag,
obstime,
substr("date",1,4) AS year
FROM original_csv
WHERE cast(substr(“date”,1,4) AS bigint) < 2015
用于 Aurora PostgreSQL 的 Babelfish
巴别鱼
如果不将 Babelfish 列为此列表中的最初一个 SQL 服务,咱们将是尽职的。从技术上讲,Babelfish 更像是一种技术,而不是成熟的数据库,但它承受 SQL 查问,所以咱们开始吧!
应用 Babelfish,您能够将您在 Microsoft 生态系统中编写的应用程序(例如应用 .NET 和 TSQL)连贯到由 Postgres 反对的 AWS Aurora。只管咱们会留神到限度和陷阱的列表仿佛相当长,但对于领有大量代码库并应用 TSQL 的组织来说,这实际上是比重写每个查问以反对 Postgres 更容易的迁徙门路。
示例查问
这里只是一个简略的。此查问不会在 Postgres 中运行,因为它应用 Microsoft 特定的语法。然而,应用 Aurora 反对的 Babelfish,它将返回正确的后果。
SELECT @@VERSION AS version;
齐全托管的数据库与治理服务器
上述所有选项都属于 AWS 软件正在执行沉重的配置、备份、横向扩大、降级以及与操作数据库相干的其余工作的类别。当然,您能够将上述所有软件托管在您本人的服务器上并本人执行此操作。
弹性计算云简直与 AWS Managed Services (AMS) 相同。它被创立为虚拟机以同时创立多个实例。每个实例都能够依据您的要求和须要运行操作系统或软件包。尽管波及 Auto Scaling 等性能,但用户仍需自行执行平安、资源利用、保护等重要性能。这导致了另一组长处和毛病:
长处:
它具备高度可扩展性。
它与大多数 AWS 服务集成。
API 的存在使您的操作非常容易。
您能够齐全管制实例。
毛病:
您必须查看公共实例的安全性。
治理生命周期的资源利用、保护和治理可能会变得十分乏味。
在特定场景下,EC2 对公司来说并不具备老本效益。
论断
这是对用于数据库和编写 SQL 的 AWS 数据库服务的(相当)残缺的概述。所有这些都容许您通过 SQL 操作和查问数据,这使得它们易于应用,同时还具备高度可扩展性。突出的一件事是架构、语法和指标用例的多样性。这阐明了亚马逊产品的深度和云计算市场的规模。振作起来,您在一个每年增长 40% 的行业工作!