Aurora 与 DynamoDB 延迟不如预期

Kor*_*rba 1 latency go amazon-dynamodb amazon-aurora aws-sdk-go

我想得到一些数字来证明我的阅读,与关系数据库(MySQL、PostgreSQL、Aurora)相比,DynamoDB 键值存储具有更好的读取性能。所以我决定比较 DynamoDB 和 AWS-Aurora 的读取延迟(这是 AWS 网站的 a/c - “比标准 MySQL 数据库快五倍,比标准 PostgreSQL 数据库快三倍”)

步骤 1:在 Aurora 中使用以下架构创建一个表,并向该表添加 102 万条记录。

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)
);
Run Code Online (Sandbox Code Playgroud)

使用使用 MySQL 驱动程序的 Golang 客户端数据库/sql 包来查询表。

步骤2;创建了具有以下属性的 DynamoDB 表。向表中添加了 100 万个项目。没有使用任何排序键。所有查询都使用分区键。


Table: GiftLog {
    gift_uuid               Binary (Partition Key)
    user_uuid               Binary
    operation_time          Number,
    operation               String,
    gift_type               String,
    parent_type             String
}
Run Code Online (Sandbox Code Playgroud)

使用使用 AWS Go-SDK 查询 DynamoDB 表的 Golang 客户端。

极光

startTime := time.Now().UnixNano()

rows, err := db.Query("SELECT * FROM gift_log WHERE gift_uuid=?", giftIDsToRead[i])

endTimt := time.Now().UnixNano()
Run Code Online (Sandbox Code Playgroud)

动态数据库

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()
Run Code Online (Sandbox Code Playgroud)

Aurora 延迟:543.89 DynamoDB 延迟:2934.96 微秒

这些数字似乎不对。我不是在比较苹果和苹果吗?

Cha*_*les 6

你没有显示计时结果......但我会说你在比较苹果和橙子。如果您知道 DynamoDB 项目的主键,您应该使用GetItem()而不是 Query()。

使用 GetItem(),您应该有“个位数毫秒”的响应时间;不包括网络/HTTP 延迟

最后一点很重要,但希望与 Aurora 的请求类似。