UpdateTable

API说明:UpdateTable

表格存储支持更新表的预留读/写吞吐量(ReservedThroughput)、配置信息(TableOptions)以及 stream配置(StreamSpecification)。

关于 ReservedThroughput、TableOptions 以及 StreamSpecification,在本章开始的“创建表”部分已经有过介绍。ReservedThroughput 的调整有时间间隔限制,目前为 1 分钟。

接口

    /**
     * 更新一个表,包括这个表的预留读写吞吐量,配置信息,stream配置。
     * 这个API可以用来上调或者下调表的预留读写吞吐量。
     * @api
     * @param [] $request 请求参数
     * @return [] 请求返回 
     * @throws OTSClientException 当参数检查出错或服务端返回校验出错时
     * @throws OTSServerException 当OTS服务端返回错误时
     */
    public function updateTable(array $request);
			

请求格式

$result = $client->updateTable([
    'table_name' => '<string>',         // REQUIRED
    'reserved_throughput' => [         
        'capacity_unit' => [
            'read' => <integer>, 
            'write' => <integer>
        ]
    ],
    'table_options' => [ 
        'time_to_live' => <integer>,   
        'max_versions' => <integer>,    
        'deviation_cell_version_in_sec' => <integer>  
    ],
    'stream_spec' => [
        'enable_stream' => true || false,
        'expiration_time' => <integer>
    ]
]);    
请求格式说明
  • 和 CreateTable的区别只有tableMeta. 除了TableMeta以外都是可以更新的,而且含义和CreateTable保持一致。同时除了table_name外,都是可选的。
  • table_name 表名(必须设置)。
  • reserved_throughput 表的预留读/写吞吐量配置,与计费相关(可选配置)。
    • capacity_unit 当预留读/写吞吐量大于 0 时,会按照预留量和持续时间进行计费,超出预留的部分进行按量计费。默认预留读写吞吐量为 0,即完全按量计费,如果要设置为大于 0 的值,请仔细阅读表格存储的计费相关文档,以免产生未期望的费用。容量型实例的预留读/写吞吐量只能设置为 0,不允许预留。
      • read 预留读吞吐量
      • write 预留写吞吐量
  • table_options TableOptions 包含表的 TTL、MaxVersions 和 MaxTimeDeviation 配置(可选配置)。
    • time_to_live TimeToLive,数据存活时间,单位秒。
      • 表格存储的新版 API 支持数据自动过期。如果期望永不过期,TTL 可设置为 -1。
      • 数据是否过期是根据“数据的时间戳“、“当前时间”、“表的 TTL”三者进行判断的。当“当前时间”减去“数据的时间戳”大于“表的 TTL”时,数据会过期并被表格存储服务器端清理。有关数据的时间戳的更多信息,请参见前言
      • 当设置 TTL 后,由于判断过期涉及数据的时间戳,如果用户指定时间戳写入,且指定的时间戳严重偏离当前时间,那么可能导致未预料的数据过期行为。比如指定的数据时间戳很小,可能导致数据一写入就被过期回收了。当指定的数据时间戳很大时,又可能导致期望过期的数据过期不掉。因此在使用 TTL 功能时需要注意写入时是否指定了时间戳,以及指定的时间戳是否合理。
    • max_versions 每个属性列保留的最大版本数。
      • 表格存储的新版 API 支持多版本的数据模型,前言一章对此已经做了一些介绍。MaxVersions 即用来指定每个属性列最多保存多少个版本的数据,如果写入的版本数超过 MaxVersions,服务端只会保留版本号最大的 MaxVersions 个版本。
    • deviation_cell_version_in_sec 指定版本写入数据时所指定的版本与系统当前时间偏差允许的最大值,单位为秒。
      • 表格存储支持多版本,默认情况下系统会为新写入的数据生成一个版本号,是写入时间的毫秒单位时间戳,数据自动过期功能需要根据这个时间戳判断数据是否过期。另一方面,用户可以指定写入数据的时间戳,因此如果用户写入的时间戳非常小,与当前时间偏差已经超过了表上设置的 TTL 时间,写入的数据会立即过期。出于保护的目的,在表上增加了 MaxTimeDeviation 设置,限制写入数据的时间戳与系统当前时间的偏差,该值的单位为秒,可在建表时指定,也可通过 UpdateTable 接口修改。
  • stream_spec Stream相关设置(可选配置)。
    • enable_stream Stream 是否打开
    • expiration_time Stream 数据的过期时间,较早的修改记录将会被删除,单位小时
结果格式
[
    'capacity_unit_details' => [
        'capacity_unit' => [
            'read' => <integer>,
            'write' => <integer>
        ],
        'last_increase_time' => <integer>,
        'last_decrease_time' => <integer>
    ],
    'table_options' => [
        'time_to_live' => <integer>,
        'max_versions' => <integer>,
        'deviation_cell_version_in_sec => <integer>
    ],
    'stream_details' => [
        'enable_stream' => true || false,
        'stream_id' => '<string>',
        'expiration_time' => <integer>,
        'last_enable_time' => <integer>
    ]
]       
结果格式说明
  • capacity_unit_details 表的预留读/写吞吐量配置,与计费相关。
    • capacity_unit 当预留读/写吞吐量大于 0 时,会按照预留量和持续时间进行计费,超出预留的部分进行按量计费。默认预留读写吞吐量为 0,即完全按量计费,如果要设置为大于 0 的值,请仔细阅读表格存储的计费相关文档,以免产生未期望的费用。容量型实例的预留读/写吞吐量只能设置为 0,不允许预留。
      • read 预留读吞吐量
      • write 预留写吞吐量
    • last_increase_time 最近一次上调该表的预留读/写吞吐量设置的时间,使用 UTC 秒数表示。
    • last_decrease_time 最近一次下调该表的预留读/写吞吐量设置的时间,使用 UTC 秒数表示。
  • table_options TableOptions 包含表的 TTL、MaxVersions 和 MaxTimeDeviation 配置。和请求一致。
  • stream_details 表的stream信息。
    • enable_stream 该表是否打开stream
    • stream_id 该表的stream的id
    • expiration_time 该表的stream的过期时间,较早的修改记录将会被删除,单位小时
    • last_enable_time 该stream的打开的时间
示例

更新表的 CU 值为读 1,写 2。

    $result = $client->updateTable([
        'table_name' => 'SampleTable',
        'reserved_throughput' => [         
            'capacity_unit' => [
                'read' => 1,            // 可以单独更新读或者写
                'write' => 2
            ]
        ]
    ]);
			

更新表的TTL为一天(86400),保留版本2, 最大偏差10s.

    $result = $client->updateTable([
        'table_name' => 'SampleTable',
        'table_options' => [ 
            'time_to_live' => 86400,   
            'max_versions' => 2,    
            'deviation_cell_version_in_sec' => 10  
        ]
    ]);
			

打开表的Stream, 并设置过期时间24小时。

    $result = $client->updateTable([
        'table_name' => 'SampleTable',
        'stream_spec' => [
            'enable_stream' => true,
            'expiration_time' => 24
        ]
    ]);