本章节为您介绍本次表格存储性能测试的测试模型。

  • 表结构

    主键名 类型 编码方式 长度
    userid string 4-Byte-Hash + Long.toHexString 20
  • 属性列

    属性列名 类型 长度
    field0 string 100
    field1 string 100
    field2 string 100
    field3 string 100
    field4 string 100
  • 分区数量

    表格存储的自动负载均衡机制能够根据表下各个分区的数据量、访问压力对数据分区进行动态的分裂,该过程不需要人工介入,本次测试,选取了具有代表性的1、416个分区情况下表的性能数据。

    新创建的数据表默认为1个数据分区,如果您对表有分区的需求,请提交工单

  • 测试用例
    每台压力器启动N个线程,每个压力线程创建一个com.alicloud.openservices.tablestore.SyncClient,同步调用表格存储的API。
    • 测试用例包括:

      • 随机写:调用SyncClient.putRow,每次请求包含1行数据,持续1小时。
      • 批量写:调用SyncClient.batchWriteRow,每次请求包含200行数据,持续1小时。
      • 随机读:首先调用BatchWriteRow写数据,每个分区写入约20GB数据;然后调用SyncClient.getRow,每次请求获得1行数据,持续0.5小时。
      • 随机范围读:首先调用BatchWriteRow写数据,每个分区写入约20GB数据;然后调用SyncClient.getRange,每次请求获得100行数据,持续0.5小时。

      为了避免网络环境的影响,所有测试用例都直接请求表格存储实例的私网地址。

      本次性能测试不是产品能力的极限测试,因此并没有触发表格存储服务端的流控措施,表格存储的自动负载均衡机制也尽可能地保证用户单表提供的服务能力能够水平扩展。大规模的压力测试可能会触发后端流控并且可能会产生较贵的费用,如果需要做大规模的性能测试,请提交工单,保证测试结果并控制测试费用。

      表格存储的BatchWriteRow会以分区维度并发处理,每个分区的数据会最终变成一次写磁盘操作。建议您在组织BatchWriteRow请求时,按数据的分区键进行聚合,可以减少每次BatchWriteRow的写磁盘数量,有效提高写入性能。

      随机读和随机范围读两个测试用例由于在测试时无写入压力,故其cache命中率会随测试时间逐渐升高。对于低压力的场景,其cache命中率升高的速度比较慢,受磁盘IO能力的影响会大一些;对于高压力的场景,其cache命中率升高的速度比较快,受磁盘IO能力的影响会小一些。

      BatchWriteRowGetRange两个测试用例会使用比较多的网络带宽,如果您遇到读写表格存储的性能不符合预期时,可以检查机器的网络带宽是否已经用满。

      表格存储的读取性能受用户的数据量与缓存命中率影响比较大。因此GetRowGetRange这两个测试用例无法覆盖到所有的用户场景。我们保证这两个测试用例的性能数据是用户可复现的,它的意义在于,如果您的使用场景与之类似,可以使用本报告的数据作为一个参考。如果您的读写吞吐或延时与本报告的数据偏差较大,可以联系表格存储的工作人员帮忙分析原因。