Я хотел получить несколько цифр, чтобы доказать, что мое хранилище DynamoDB Key-Value имеет лучшую производительность чтения по сравнению с реляционными БД (MySQL, PostgreSQL, Aurora). Поэтому я решил сравнить задержки чтения в DynamoDB и AWS-Aurora (который относится к веб-сайту AWS - «в пять раз быстрее, чем стандартные базы данных MySQL, и в три раза быстрее, чем стандартные базы данных PostgreSQL»)
Step1 : создал таблицу в 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 для базы данных / пакет sql для запроса таблицы.
Step2 ; Создана таблица DynamoDB со следующими Атрибутами. Добавил 1 миллион предметов на стол.
НЕ использовал любой ключ сортировки. Во всех запросах используется ключ раздела.
Table: GiftLog {
gift_uuid Binary (Partition Key)
user_uuid Binary
operation_time Number,
operation String,
gift_type String,
parent_type String
}
Использовал Golang Client, который использует AWS Go-SDK для запроса таблицы DynamoDB.
AURORA
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 usec
Эти цифры не кажутся правильными. Я не сравниваю яблоки с яблоками?