今天,我将执行一个简单的测试一个适当的基准测试,比较了MySQL的Aurora mysql和RDS。
与冗长而复杂的传统基准不同,该评估将简洁,仅包含200个单词,只花了几分钟来审查结果。
首先,让我们使用AWS CLI创建两个实例。为了确保进行公平的比较,我们将使用默认值创建两个实例。这两个实例都将具有相同的类和大小,db.t4g.medium,并将位于法兰克福同一AWS地区。
# Aurora
$ aws rds create-db-cluster --db-cluster-identifier benchmark --engine aurora-mysql --engine-version 8.0 --master-username renato --master-user-password ******** --db-subnet-group-name renato --vpc-security-group-ids sg-030c9f25422a13fea
$ aws rds create-db-instance --db-instance-identifier benchmark --db-cluster-identifier benchmark --engine aurora-mysql --db-instance-class db.t4g.medium
# RDS
$ aws rds create-db-instance --db-instance-identifier benchmark-rds --engine mysql --db-instance-class db.t4g.medium --master-username renato --master-user-password ******** --allocated-storage 100 --vpc-security-group-ids sg-030c9f25422a13fea
基准过程将涉及在两个端点上创建数据库,表和MySQL过程。此过程将仅将100K记录插入表中,生成随机值以引入一些数据。
CREATE DATABASE renato;
USE renato;
CREATE TABLE renato
(id bigint(20) NOT NULL AUTO_INCREMENT,
datetime TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
value float DEFAULT NULL,
PRIMARY KEY (id));
DELIMITER $$
CREATE PROCEDURE load_renato()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100000 DO
INSERT INTO renato (datetime,value) VALUES (
FROM_UNIXTIME(UNIX_TIMESTAMP('2023-07-01 01:00:00')+FLOOR(RAND()*31536000)),
ROUND(RAND()*100,2));
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
最后,我们将在两个数据库上调用该过程,请记住:默认配置,同一区域,同一类,相同的大小。不涉及网络。没有魔术。没有技巧。
# Aurora
mysql> call load_renato;
Query OK, 1 row affected (5,41 sec)
mysql> select count(*) from renato;
+----------+
| count(*) |
+----------+
| 100000 |
+----------+
# RDS
mysql> call load_renato;
Query OK, 1 row affected (5 min 20,41 sec)
mysql> select count(*) from renato;
+----------+
| count(*) |
+----------+
| 100000 |
+----------+
结果令人震惊:亚马逊奥罗拉(Amazon Aurora)的表现明显优于RD,与RDS 5分20秒相比,仅在5.4秒内完成了任务。在这种特定情况下,这种显着的60倍差异清楚地证明了极光的优势。
哇,你在跟我开玩笑!
每次您阅读50%时,请记住这一简单的测试,速度快47%,成本降低43%或降低了127%的IOPS。该基准测试的提醒是,现实世界测试对于了解数据库的真实功能至关重要。
正如他们以前所说,有三种谎言:谎言,该死的谎言和 statistics 数据库基准。