Я хотел получить некоторые цифры, чтобы доказать, что я прочитал, что хранилище DynamoDB Key-Value имеет лучшую производительность чтения по сравнению с реляционными БД (MySQL, PostgreSQL, Aurora). Поэтому я решил сравнить задержки READ DynamoDB и AWS-Aurora (который является связующим звеном с веб-сайтом AWS - «до пяти раз быстрее, чем стандартные базы данных MySQL и в три раза быстрее, чем стандартные базы данных PostgreSQL»)
Шаг 1: в Aurora создана таблица со следующей схемой и добавлено 1,02 миллиона записей в эту таблицу.
Table gift_log (
gift_uuid BINARY(16) NOT NULL,
user_uuid BINARY(16) NOT NULL,
parent_uuid BINARY(16),
operation_time TIMESTAMP,
operation VARCHAR(20) NOT NULL,
gift_type VARCHAR(20) NOT NULL,
parent_type VARCHAR(20),
relation_type VARCHAR(20),
PRIMARY KEY (gift_uuid)
);
Используется клиент Golang, который использует драйвер MySQL для пакета database / sql для запроса таблицы.
Шаг 2; Создана таблица DynamoDB со следующими атрибутами. Добавлен 1 миллион предметов в таблицу. НЕ ИСПОЛЬЗОВАЛ какой-либо ключ сортировки. Во всех запросах использовался ключ раздела.
Table: GiftLog {
gift_uuid Binary (Partition Key)
user_uuid Binary
operation_time Number,
operation String,
gift_type String,
parent_type String
}
Используется клиент Golang, который использует AWS Go-SDK для запроса таблицы DynamoDB.
АВРОРА
startTime := time.Now().UnixNano()
rows, err := db.Query("SELECT * FROM gift_log WHERE gift_uuid=?", giftIDsToRead[i])
endTimt := time.Now().UnixNano()
DynamoDB
queryInput := &dynamodb.QueryInput{
TableName: aws.String(tableName),
KeyConditions: map[string]*dynamodb.Condition{
"GiftUUID": {
ComparisonOperator: aws.String("EQ"),
AttributeValueList: []*dynamodb.AttributeValue{
{
B: giftIDsToRead[i],
},
},
},
},
}
startTime := time.Now().UnixNano()
resp, err := svc.Query(queryInput)
endTime := time.Now().UnixNano()
Задержка Aurora: 543,89 Задержка DynamoDB: 2934,96 мкс
Эти цифры кажутся неправильными. Разве я не сравниваю яблоки с яблоками?