API、SDK常见问题
API/SDK返回401(AuthenticationFailed)如何处理?
用户在使用API对云数据库TableStorage进行任何的操作之前都需要进行身份认证,当身份认证失败时会返回401(AuthenticationFailed)错误码,修复方法是首先确认AK/SK是否配置正确,配置正确之后仍然报401,请参考认证字符串生成协议V1、V2。出于对性能和安全性方面的考虑,推荐用户使用V2协议生成认证字符串。使用SDK访问TableStorage时,SDK自身封装了认证串生成算法,用户只需要检查AK/SK是否配置正确。
API中如何读写数据(包括二进制数据)?
用户在使用API访问时,读取的数据会经过UrlEncode编码返回,所以用户需要UrlDecode才能得到原始数据;同样,用户写入的数据时也需要先对数据进行UrlEncode编码,云数据库TableStorage服务端会进行UrlDecode解码后写入。
使用API/SDK进行scan时,只返回部分数据,如何得到剩下的数据?
scan的数据量过大,超过云数据库TableStorage内部限制之后,会返回206,表示此次scan并未结束。并且在body中会携带nextRowkey字段,告知用户下一次scan的起点,供用户断点续读。
API/SDK drop table反馈成功后执行drop instance可能会返回AccessDenied。
drop table在后端是异步执行的,返回成功不代表删表流程结束,需要list tables确认instance下没有表了再执行drop instance操作。
API/SDK返回错误码503(server busy)时如何处理?
云数据库TableStorage是一个分布式的NoSQL服务,服务端会根据数据分区的数据量、访问情况做自动的负载均衡,当单机压力过大(QPS过高,磁盘打满,网卡打满)时,服务端可能会拒绝一部分的请求并返回503(server busy)。建议用户对所有的读写操作都增加重试策略,并在收到503(server busy)错误码的时候增加重试的时间间隔,以缓解云数据库TableStorage后端的压力。
API/SDK返回错误码400(InvalidDate)时如何处理?
出现这种情况时,用户需要检查本地时间设置是否正确,并且正确设置了请求头部的Date域和x-bce-date域。云数据库TableStorage的处理逻辑是收到请求后会判断本机时间与该时间差值,若大于30分钟,则抛弃本次请求,并返回400(InvalidDate)。