首页 阿里云-表格存储服务开发者手册

阿里云-表格存储服务开发者手册

举报
开通vip

阿里云-表格存储服务开发者手册表格存储开发者手册开发者手册访问控制TableStore通过AccessKey和实例(Instance)来保证TableStore的访问安全性。实例的访问对TableStore表数据的访问,首先需要确定该表所在的实例。实例是阿里云用户开通TableStore服务后,管理资源的逻辑容器。用户可以通过阿里云官网控制台,对TableStore实例进行创建、管理及删除等操作。成功创建实例后,在实例中管理TableStore的表。其中实例名称名称(InstanceName)在阿里云节点(Region)范围内是唯一的,在不同的...

阿里云-表格存储服务开发者手册
表格存储开发者手册开发者手册访问控制TableStore通过AccessKey和实例(Instance)来保证TableStore的访问安全性。实例的访问对TableStore表数据的访问,首先需要确定该表所在的实例。实例是阿里云用户开通TableStore服务后,管理资源的逻辑容器。用户可以通过阿里云官网控制台,对TableStore实例进行创建、管理及删除等操作。成功创建实例后,在实例中管理TableStore的表。其中实例名称名称(InstanceName)在阿里云节点(Region)范围内是唯一的,在不同的阿里云节点内可以存在同名的实例。实例名称会作为访问地址的前缀:示例(华东1(杭州)节点,实例名称为myInstance的访问域名):AccessKeyTableStore根据AccessKey对请求进行身份认证和鉴权,每个合法的TableStore请求都必须携带正确的AccessKey信息。每个阿里云账户可以创建至多5个AccessKey,用户可以在阿里云用户中心中管理自己的AccessKey。AccessKey由AccessKeyID和AccessKeySecret组成。AccessKeyID用于标识AccessKey,AccessKeySecret用于加密TableStore请求。AccessKeySecret是认证请求身份的重要凭证,因此需要保证AccessKeySecret的保密和安全。阿里云账户下的AccessKey可以被用于访问该阿里云账户中的所有实例。AccessKey有启用和禁用两种状态。只有处于启用状态的AccessKey可以被用来访问TableStore。在阿里云用户中心可以切换AccessKey的启用/禁用状态。AccessKey切换状态后等待1分钟生效。公网访问地址:http://instanceName.region.ots.aliyuncs.com阿里云私网地址:http://instanceName.region.ots-internal.aliyuncs.com公网:http://myInstance.cn-hangzhou.ots.aliyuncs.com私网:http://myInstance.cn-hangzhou.ots-internal.aliyuncs.com表格存储/开发者手册1-----TableStore表创建TableStore表时,需要指定表名、主键和预留读写吞吐量。在传统数据库中,表具有预定义的结构信息,比如表的名称、主键、列名和类型,表中的所有行都具有相同的列集合。TableStore是NoSQL数据库:除了主键需要格式外,没有其他的格式信息。本章将介绍表的概念和使用。表名TableStore表的名称必须符合以下约束:由英文字符(a-z)(A-Z),数字(0-9),下划线(_)组成首字母必须为英文字母(a-z)(A-Z)或下划线(_)大小写敏感长度在1~255字符之间同一个实例下不能有同名的表,但不同实例内的表名字可以相同主键创建TableStore表时必须指定表的主键。主键包含1~4个主键列。每一个主键列都有名字和类型。TableStore对主键列的名字和类型都有限制,详细信息可以参考TableStore数据模型的主键一节TableStore根据表的主键索引数据,表中的行按照它们的主键进行升序排序。配置预留读写吞吐量为了确保应用获得稳定、低延时的服务,应用可以在在创建表的时候指定预留读写吞吐量。如果预留读写吞吐量不为0,TableStore根据预留读写吞吐量来为表分配相应的资源,满足应用的预留吞吐量需求,同时根据配置的预留读写吞吐量收取相应的费用。应用可以根据自身的业务需求动态上调和下调表的预留读写吞吐量。预留读写吞吐量通过读服务能力单元和写服务能力单元这两个数值来设置。通过UpdateTable操作可以更新表的预留读写吞吐量。预留读写吞吐量的更新有如下规则:一张表上的两次更新的间隔必须大于2分钟,例如12:43AM更新了某个表的预留读写吞吐量,那么只有在12:45AM之后才能再次更新该表的预留读写吞吐量。更新间隔必须大于2分钟的限制是针对表的,12:43AM~12:45AM之间用户还能更新其他表的预留读写吞吐量每个自然日内(UTC时间00:00:00到第二天的00:00:00,北京时间早上8点到第二天早上8点),上调或者下调预留读写吞吐量的总次数不做限制,但是两次调整之间的时间间隔仍然需要大于2分钟。调整预留读写吞吐量的定义是,只要读服务能力单元或写服务能力单元配置其中一项进行了更新,则此次操作被视为对表进行了更新。预留读写吞吐量调整完毕后1分钟内生效表格存储/开发者手册2对于访问消耗的读写吞吐量中超出预留读写吞吐量的部分会计入按量读写吞吐量,并根据按量读写吞吐量单价进行计费。由于预留读写吞吐量在单价上低于按量读写吞吐量,配置合适的预留读写吞吐量可以进一步降低成本。例如在用户刚建表之后如果需要导入大量数据,可以设置较大的预留写吞吐量,能够以较低的写成本将数据导入进来,当数据导入完毕后,再将预留读写吞吐量下调。分片键下的数据量限制TableStore按照分片键的范围对表的数据进行分区,拥有相同分片键的行会被划分到同一个分片。为了防止分片过大无法切分,单个分片键下的所有行数据大小之和建议不要超过1GB。建表后加载时间TableStore表在被创建之后需要1分钟进行加载,在此期间对该表的读写数据操作均会失败。应用程序应该等待表加载完毕后再进行数据操作。最佳实践TableStore表的最佳实践使用TableStoreSDK进行表操作使用TableStoreJavaSDK进行表操作使用TableStorePythonSDK进行表操作TableStore数据操作TableStore的表由行组成。每一行包含主键和属性。这一章将介绍操作TableStore数据的方法。TableStore行简介组成TableStore表的基本单位是行,行由主键和属性组成,其中主键是必须的,且每一行的主键列的名称和类型相同,属性不是必须的,并且每一行的属性可以不同。更多信息请参考TableStore数据模型。TableStore数据操作有以下三种类型:单行操作表格存储/开发者手册3lGetRow--读取单行数据PutRow--新插入一行。如果该行内容已经存在,先删除旧行,再写入新行UpdateRow--更新一行。应用可以增加、删除一行中的属性列,或者更新已经存在的属性列的值。如果该行不存在,那么新增一行DeleteRow--删除一行批量操作BatchGetRow--批量读取多行数据BatchWriteRow--批量插入、更新、删除多行数据范围读取GetRange--读取表中一个范围内的数据本章将介绍以上几种操作。TableStore单行操作单行写入操作TableStore的单行写操作有三种:PutRow,UpdateRow和DeleteRow。下面分别讲述每一种操作的行为语义和注意事项:PutRow新写入一行。如果这一行已经存在,则这一行旧的数据会先被删除,再新写入一行。UpdateRow更新一行的数据。TableStore会根据请求的内容在这一行中新增列,修改或者删除指定列的值。如果这一行不存在,则会插入新的一行。但是有一种特殊的场景,UpdateRow请求只包含删除指定的列,且该行不存在,该请求不会插入新行。DeleteRow删除一行。如果删除的行不存在,则不会发生任何变化。表格存储/开发者手册4---应用程序通过设置请求中的condition字段来指定写入操作执行时是否要对行的存在性进行检查。condition有三种类型:IGNORE--不做任何存在性检查。EXPECT_EXIST--期望行存在,如果该行存在,则操作成功,如果该行不存在,则操作失败。EXPECT_NOT_EXIST--期望行不存在,如果行不存在,则操作成功,如果该行存在,则操作失败。condition为EXPECT_NOT_EXIST的DeleteRow、UpdateRow操作是没有意义的,删除一个不存在的行是无意义的,如果需要更新不存在的行可以使用PutRow操作。如果操作发生错误,如参数检查失败,单行数据量过多,行存在性检查失败等等,会返回错误码给应用程序。如果操作成功,TableStore会将操作消耗的服务能力单元返回给应用程序。各操作消耗的写服务能力单元的计算规则:PutRow-本次消耗的写CU为修改的行主键数据大小与属性列数据大小之和除以4KB向上取整,若指定条件检查不为IGNORE,还需消耗该行主键数据大小除以4KB向上取整的读CU。如果操作不满足应用指定的行存在性检查条件,则操作失败并消耗1单位写服务能力单元和1单位读服务能力单元PutRow详解UpdateRow-本次消耗的写CU为修改的行主键数据大小与属性列数据大小之和除以4KB向上取整,UpdateRow中包含的需要删除的属性列,只有其列名计入该属性列数据大小,若指定条件检查不为IGNORE,还需消耗该行主键数据大小除以4KB向上取整的读CU。如果操作不满足应用指定的行存在性检查条件,则操作失败并消耗1单位写服务能力单元和1单位读服务能力单元UpdateRow详解DeleteRow-被删除的行主键数据大小除以4KB向上取整。若指定条件检查不为IGNORE,还需消耗该行主键数据大小除以4KB向上取整的读CU。如果操作不满足应用程序指定的行存在性检查条件,则操作失败并消耗1单位写服务能力单元DeleteRow详解写操作会根据指定的condition情况消耗一定的读服务能力单元。下面举例说明单行写操作的写服务能力单元和读服务能力单元计算。例子1,使用PutRow进行如下行写入操作://PutRow操作//row_size=len('pk')+len('value1')+len('value2')+8Byte+1300Byte+3000Byte=4322Byte{primary_keys:{'pk':1},attributes:{'value1':String(1300Byte),'value2':String(3000Byte)}}//原来的行//row_size=len('pk')+len('value2')+8Byte+900Byte=916Byte//row_primarykey_size=len('pk')+8Byte=10Byte{primary_keys:{'pk':1},attributes:{'value2':String(900Byte)}表格存储/开发者手册5读写服务能力单元的消耗情况如下:设置condition设置为EXPECT_EXIST时:消耗的写服务能力单元为4322Byte除以4KB向上取整,消耗的读服务能力单元为该行主键数据大小10Byte除以4KB向上取整,该PutRow操作消耗2个单位的写服务能力单元和1个单位的读服务能力单元。设置condition设置为IGNORE时:消耗的写服务能力单元为4322Byte除以4KB向上取整,消耗0个读服务能力单元,该PutRow操作消耗2个单位的写服务能力单元和0个单位的读服务能力单元。设置condition设置为EXPECT_NOT_EXIST时:指定的行存在性检查条件检查失败,该PutRow操作消耗1个单位的写服务能力单元和1个单位的读服务能力单元。例子2,UpdateRow新写入一行:读写服务能力单元的消耗情况如下:设置condition设置为IGNORE时,消耗的写服务能力单元为922Byte除以4KB向上取整,该UpdateRow操作消耗1个单位的写服务能力单元和0个读服务能力单元。设置condition设置为EXPECT_EXIST时:指定的行存在性检查条件检查失败,该PutRow操作消耗1个单位的写服务能力单元和1个单位的读服务能力单元。例子3,使用UpdateRow对存在的行进行更新操作:}//UpdateRow操作//删除的属性列列名长度计入row_size//row_size=len('pk')+len('value1')+len('value2')+8Byte+900Byte=922Byte{primary_keys:{'pk':1},attributes:{'value1':String(900Byte),'value2':Delete}}//原来的行不存在//row_size=0//UpdateRow操作//row_size=len('pk')+len('value1')+len('value2')+8Byte+1300Byte+3000Byte=4322Byte{primary_keys:{'pk':1},attributes:{'value1':String(1300Byte),'value2':String(3000Byte)}}//原来的行//row_size=len('pk')+len('value1')+8Byte+900Byte=916Byte表格存储/开发者手册6读写服务能力单元的消耗情况如下:设置condition设置为EXPECT_EXIST时:消耗的写服务能力单元为4322Byte除以4KB向上取整,消耗的读服务能力单元为该行主键数据大小10Byte除以4KB向上取整,该UpdateRow操作消耗2个单位的写服务能力单元和1个单位的读服务能力单元。设置condition设置为IGNORE时:消耗的写服务能力单元为4322Byte除以4KB向上取整,消耗0个读服务能力单元,该UpdateRow操作消耗2个单位的写服务能力单元和0个单位的读服务能力单元。例子4,DeleteRow删除不存在的行:修改前和后修改后的数据大小均为0,无论读写操作成功还是失败至少消耗一个单位服务能力单元,因此该DeleteRow操作消耗1个单位的写服务能力单元。读写服务能力单元的消耗情况如下:设置condition设置为EXPECT_EXIST时:消耗的写服务能力单元为该行主键数据大小10Byte除以4KB向上取整,消耗的读服务能力单元为改该主键数据大小10Byte除以4KB向上取整,该DeleteRow操作消耗1个单位的写服务能力单元和1个单位的读服务能力单元。设置condition设置为IGNORE时:消耗的写服务能力单元为该行主键数据大小10Byte除以4KB向上取整,消耗0个读服务能力单元,该DeleteRow操作消耗1个单位的写服务能力单元和0个单位的读服务能力单元。更多的信息可以参看APIReference中的PutRow,UpdateRow,DeleteRow章节。单行读取操作TableStore的单行读操作只有一种:GetRow应用程序提供完整的主键和需要返回的列名。列名可以是主键列或属性列。也可以不指定要返回的列名,此时//row_primarykey_size=len('pk')+8Byte=10Byte{primary_keys:{'pk':1},attributes:{'value1':String(900Byte)}}//原来的行不存在//row_size=0//DeleteRow操作//row_size=0//row_primarykey_size=len('pk')+8Byte=10Byte{primary_keys:{'pk':1},}表格存储/开发者手册7请求返回整行数据。TableStore根据被读取的行的主键的数据大小与实际读取的属性列数据大小之和计算读服务能力单元。将行数据大小除以4KB向上取整作为本次读取操作消耗的读服务能力单元。如果操作指定的行不存在,则消耗1单位读服务能力单元。单行读取操作不会消耗写服务能力单元。例子,GetRow读取一行消耗的写服务能力单元计算:消耗的读服务能力单元为1218Byte除以4KB向上取整,该GetRow操作消耗1个单位的读服务能力单元。更多信息可以参看APIReference的GetRow多行操作TableStore提供了BatchWriteRow和BatchGetRow两种多行操作。BatchWriteRow用于插入、修改、删除一个表或者多个表中的多行 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 。BatchWriteRow操作由多个PutRow、UpdateRow、DeleteRow子操作组成。BatchWriteRow的各个子操作独立执行,TableStore会将各个子操作的执行结果分别返回给应用程序,可能存在部分请求成功、部分请求失败的现象。即使整个请求没有返回错误,应用程序也必须要检查每个子操作返回的结果,从而拿到正确的状态。BatchWriteRow的各个子操作单独计算写服务能力单元。BatchGetRow用于读取一个表或者多个表中的多行记录。BatchGetRow各个子操作独立执行,TableStore会将各个子操作的执行结果分别返回给应用程序,可能存在部分请求成功、部分请求失败的现象。即使整个请求没有返回错误,应用程序也必须要检查每个子操作返回的结果,从而拿到正确的状态。BatchGetRow的各个子操作单独计算读服务能力单元。更多信息可以参看APIReference中的BatchWriteRow与BatchGetRow章节。范围读取操作TableStore提供了范围读取操作GetRange。该操作将指定主键范围内的数据返回给应用程序。TableStore表中的行按主键进行从小到大排序,GetRange的读取范围是一个左闭右开的区间。操作会返回主//被读取的行//row_size=len('pk')+len('value1')+len('value2')+8Byte+1200Byte+3100Byte=4322Byte{primary_keys:{'pk':1},attributes:{'value1':String(1200Byte),'value2':String(3100Byte)}}//GetRow操作//获取的数据size=len('pk')+len('value1')+8Byte+1200Byte=1218Byte{primary_keys:{'pk':1},columns_to_get:{'value1'}}表格存储/开发者手册8键属于该区间的行数据,区间的起始点是有效的主键或者是由INF_MIN和INF_MAX类型组成的虚拟点,虚拟点的列数必须与主键相同。其中,INF_MIN表示无限小,任何类型的值都比它大,INF_MAX表示无限大,任何类型的值都比它小。GetRange操作需要指定请求列名。请求列名中可以包含多个列名。如果某一行的主键属于读取的范围,但是不包含指定返回的列,那么请求返回结果中不包含该行数据。不指定请求列名,则返回完整的行。GetRange操作需要指定读取方向。读取方向可以为正序或逆序。假设同一表中有两个主键A和B,A\<B。如正序读取[A,B),则按从A至B的顺序返回主键大于等于A,小于B的行。逆序读取[B,A),则按从B至A的顺序返回大于A,小于等于B的数据。GetRange操作可以指定最大返回行数,TableStore按照正序或者逆序最多返回指定的行数之后即结束该操作的执行,即使该区间内仍有未返回的数据。GetRange操作可能在以下几种情况下停止执行并返回数据给应用程序:1)返回的行数据大小之和达到1MB;2)返回的行数等于5000;3)返回的行数等于最大返回行数;4)当前剩余的预留读吞吐量已被全部使用,余量不足以读取下一条数据。同时GetRange请求的返回结果中还包含下一条未读数据的主键,应用程序可以使用该返回值作为下一次GetRange操作的起始点继续读取。如果下一条未读数据的主键为空,表示读取区间内的数据全部返回。TableStore计算读取区间起始点到下一条未读数据的起始点的所有行主键数据大小与实际读取的属性列数据大小之和。将数据大小之和除以4KB向上取整计算消耗的读服务能力单元。如读取范围中包含10行,每行主键数据大小与实际读取到的属性列数据之和占用数据大小为330Byte。则消耗的读服务能力单元为1(数据总和3.3KB,除以4KB向上取整为1)。下面举例说明GetRange操作的行为。假设表的内容如下,PK1,PK2是表的主键列,类型分别为String和Integer。A,B是表的属性列。例子1,读取某一范围内的数据PK1PK2Attr1Attr2'A'2'Hell''Bell''A'5'Hello'不存在'A'6不存在'Blood''B'10'Apple'不存在'C'1不存在不存在'C'9'Alpha'不存在//请求table_name:"table_name"direction:FORWARDinclusive_start_primary_key:("PK1",STRING,"A"),("PK2",INTEGER,2)exclusive_end_primary_key:("PK1",STRING,"C"),("PK2",INTEGER,1)//响应cosumed_read_capacity_unit:1表格存储/开发者手册9例子2,利用INF_MIN,INF_MAX读取全表数据rows:{{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,2)attribute_columns:("Attr1",STRING,"Hell"),("Attr2",STRING,"Bell")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,5)attribute_columns:("Attr1",STRING,"Hello")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,6)attribute_columns:("Attr2",STRING,"Blood")},{primary_key_columns:("PK1",STRING,"B"),("PK2",INTEGER,10)attribute_columns:("Attr1",STRING,"Apple")}}//请求table_name:"table_name"direction:FORWARDinclusive_start_primary_key:("PK1",INF_MIN)exclusive_end_primary_key:("PK1",INF_MAX)//响应cosumed_read_capacity_unit:1rows:{{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,2)attribute_columns:("Attr1",STRING,"Hell"),("Attr2",STRING,"Bell")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,5)attribute_columns:("Attr1",STRING,"Hello")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,6)attribute_columns:("Attr2",STRING,"Blood")},{primary_key_columns:("PK1",STRING,"B"),("PK2",INTEGER,10)attribute_columns:("Attr1",STRING,"Apple")}{primary_key_columns:("PK1",STRING,"C"),("PK2",INTEGER,1)}{primary_key_columns:("PK1",STRING,"C"),("PK2",INTEGER,9)attribute_columns:("Attr1",STRING,"Alpha")}}表格存储/开发者手册10例子3,在某些主键列上使用INF_MIN,INF_MAX例子4,逆序读取例子5,指定列名不包含PK//请求table_name:"table_name"direction:FORWARDinclusive_start_primary_key:("PK1",STRING,"A"),("PK2",INF_MIN)exclusive_end_primary_key:("PK1",STRING,"A"),("PK2",INF_MAX)//响应cosumed_read_capacity_unit:1rows:{{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,2)attribute_columns:("Attr1",STRING,"Hell"),("Attr2",STRING,"Bell")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,5)attribute_columns:("Attr1",STRING,"Hello")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,6)attribute_columns:("Attr2",STRING,"Blood")}}//请求table_name:"table_name"direction:BACKWARDinclusive_start_primary_key:("PK1",STRING,"C"),("PK2",INTEGER,1)exclusive_end_primary_key:("PK1",STRING,"A"),("PK2",INTEGER,5)//响应cosumed_read_capacity_unit:1rows:{{primary_key_columns:("PK1",STRING,"C"),("PK2",INTEGER,1)},{primary_key_columns:("PK1",STRING,"B"),("PK2",INTEGER,10)attribute_columns:("Attr1",STRING,"Apple")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,6)attribute_columns:("Attr2",STRING,"Blood")}}//请求table_name:"table_name"表格存储/开发者手册11例子6,指定列名中包含PK例子7,使用limit和断点direction:FORWARDinclusive_start_primary_key:("PK1",STRING,"C"),("PK2",INF_MIN)exclusive_end_primary_key:("PK1",STRING,"C"),("PK2",INF_MAX)columns_to_get:"Attr1"//响应cosumed_read_capacity_unit:1rows:{{attribute_columns:{"Attr1",STRING,"Alpha"}}}//请求table_name:"table_name"direction:FORWARDinclusive_start_primary_key:("PK1",STRING,"C"),("PK2",INF_MIN)exclusive_end_primary_key:("PK1",STRING,"C"),("PK2",INF_MAX)columns_to_get:"Attr1","PK1"//响应cosumed_read_capacity_unit:1rows:{{primary_key_columns:("PK1",STRING,"C")}{primary_key_columns:("PK1",STRING,"C")attribute_columns:("Attr1",STRING,"Alpha")}}//请求1table_name:"table_name"direction:FORWARDinclusive_start_primary_key:("PK1",STRING,"A"),("PK2",INF_MIN)exclusive_end_primary_key:("PK1",STRING,"A"),("PK2",INF_MAX)limit:2//响应1cosumed_read_capacity_unit:1rows:{{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,2)attribute_columns:("Attr1",STRING,"Hell"),("Attr2",STRING,"Bell")},{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,5)attribute_columns:("Attr1",STRING,"Hello")}表格存储/开发者手册12例子8,GetRange操作消耗的读服务能力单元计算。在以下表中执行GetRange操作,其中PK1是表的主键列,Attr1、Attr2是表的属性列。}next_start_primary_key:("PK1",STRING,"A"),("PK2",INTEGER,6)//请求2table_name:"table_name"direction:FORWARDinclusive_start_primary_key:("PK1",STRING,"A"),("PK2",INTEGER,6)exclusive_end_primary_key:("PK1",STRING,"A"),("PK2",INF_MAX)limit:2//响应2cosumed_read_capacity_unit:1rows:{{primary_key_columns:("PK1",STRING,"A"),("PK2",INTEGER,6)attribute_columns:("Attr2",STRING,"Blood")}}PK1Attr1Attr21不存在String(1000Byte)28String(1000Byte)3String(1000Byte)不存在4String(1000Byte)String(1000Byte)//请求table_name:"table2_name"direction:FORWARDinclusive_start_primary_key:("PK1",INTEGER,1)exclusive_end_primary_key:("PK1",INTEGER,4)columns_to_get:"PK1","Attr1"//响应cosumed_read_capacity_unit:1rows:{{primary_key_columns:("PK1",INTEGER,1)},{primary_key_columns:("PK1",INTEGER,2),attribute_columns:("Attr1",INTEGER,8)},{primary_key_columns:("PK1",INTEGER,3),attribute_columns:("Attr1",STRING,String(1000Byte))},}表格存储/开发者手册13---此次GetRange请求中获取的第一行数据大小为len('PK1')+8Byte=11Byte第二行数据大小为:len('PK1')+8Byte+len('Attr1')+8Byte=24Byte第三行数据大小为:len('PK1')+8Byte+len('Attr1')+1000Byte=1016Byte消耗的读服务能力单元为获取的三行数据之和11Byte+24Byte+1016Byte=1051Byte除以4KB向上取整,该GetRange操作消耗1个单位的读服务能力单元。更多详细信息可以参看APIReference中的GetRange章节。最佳实践TableStore数据操作的最佳实践使用TableStoreSDK进行表操作使用TableStoreJavaSDK进行表操作使用TableStorePythonSDK进行表操作使用TableStoreAPI应用程序可以使用阿里云官方发布的TableStoreSDK来访问TableStore,也可以通过POST方法发送HTTP请求来访问TableStore。本章将介绍HTTP请求结构和数据格式,以及如何构造HTTP请求和解析HTTP请求的返回结果。最后介绍TableStore请求返回的错误状态码。Java和Python语言的开发者可使用官方的Java和PythonSDK。如果需要使用Java和Python以外的语言访问TableStore,可以根据本章内容使用HTTP消息与TableStore进行交互,也可以自行编写SDK。当前TableStoreAPI版本APIVersion:2014-08-08HTTP消息TableStore接收应用程序的HTTP请求,执行相应的逻辑并以HTTP消息返回处理后的结果数据。HTTP请求和响应中的数据通过ProtocolBuffer 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 格式进行组织,关于ProtocolBuffer协议的更多内容,请参考TableStoreProtocolBuffer消息定义。下面分别介绍HTTP请求header和body以及响应的具体格式。HTTPRequestHTTPRequestURL表格存储/开发者手册14访问TableStore的URL由以下方式构成:instance实例名称。实例由用户创建,可以在TableStore控制台查看云账户下拥有的Instance信息。大小写不敏感。region阿里云服务节点。TableStore服务会部署在多个地理位置不同的阿里云服务节点内。创建实例时需要制定阿里云节点,可以在TableStore控制台查看实例所在的阿里云服务节点名称。大小写不敏感。operationTableStore操作名称,可以在APIReference一章查看所有的TableStore操作名。大小写敏感。如下所示的URL是华东1(杭州)节点,实例名称为myInstance的ListTable请求的目标URL。HTTPRequestHeaderTableStore 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 HTTP请求的Header必须包含以下信息:x-ots-date请求发出时间,日期格式采用rfc822 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 ,并使用UTC时间,格式为"%a,%d%b%Y%H:%M:%SGMT"x-ots-apiversionAPI的版本号,版本号是一个日期字符串,本文档对应的API版本号为2014-08-08x-ots-accesskeyid用户的AccessKeyIDx-ots-instancename实例名称外网访问URL:http://<instance>.<region>.ots.aliyuncs.com/<operation>内网访问URL:http://<instance>.<region>.ots-internal.aliyuncs.com/<operation>http://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable表格存储/开发者手册15x-ots-contentmd5对HTTPbody中计算出的MD5,使用base64进行编码x-ots-signature请求的签名。签名计算方式如下:伪代码中使用到的函数的说明:HmacSha1-Hmac-Sha1加密算法。计算TableStore请求签名时请将StringToSign作为消息,AccessKeySecret作为密钥base64-base64编码算法LowerCase-将字符串中的字母全部变成小写Trim-去除字符串首尾处的空白字符CanonicalURIHTTPURL中的路径部分,如下面示例中,CanonicalURI为/ListTableHTTPRequestMethodHTTP请求方法,如GET、POST或PUT等,TableStore的HTTPAPI只支持POST方法。注意POST需要大写CanonicalHeadersCanonicalHeaders是TableStoreHTTPheader按照以下规则构造的字符串(不包括x-ots-Signature=base64(HmacSha1(AccessKeySecret,StringToSign));StringToSign=CanonicalURI+'\n'+HTTPRequestMethod+'\n\n'+CanonicalHeadersCanonicalHeaders=LowerCase(HeaderName1)+':'+Trim(HeaderValue1)+'\n'+...+LowerCase(HeaderNameN)+':'+Trim(HeaderValueN)+'\n'http://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable表格存储/开发者手册16---signature头):需要包含且只包含所有以'x-ots-'开头的TableStore标准头header项名称全部小写,值必须经过trim去除空格header项按照名字的字典序从小到大排序header项的名称和值之间以':'相隔每个header之间以换行符相隔TableStore会对HTTP请求进行验证:验证x-ots-contentmd5头的值与HTTPBody中所含数据计算出的MD5是否一致验证请求头中包含的签名是否正确验证x-ots-date包含的时间与服务器时间相差小于15分钟若认证未通过,TableStore会直接返回身份认证错误。HTTPRequestBodyTableStore规定HTTP请求的Body部分是TableStore定义的ProtocolBuffer消息序列化之后的字符串,Body长度不超过2MB。TableStore请求的ProtocolBuffer消息定义可以参看TableStoreProtocolBuffer消息定义。HTTPResponseHTTPResponseHeaderTableStore规定HTTP响应的Header包含以下信息:x-ots-date请求发出时间,日期格式采用rfc822标准,并使用UTC时间,格式为"%a,%d%b%Y%H:%M:%SGMT"x-ots-requestid本次请求的请求IDx-ots-contenttype表格存储/开发者手册17响应的内容类型。固定为"protocolbuffer"的字符串x-ots-contentmd5根据响应内容计算出的MD5值,使用Base64编码Authorization响应的签名。只有请求的签名被TableStore验证通过的条件下,响应才会包含签名。签名计算方式如下:Authorization='OTS'+AccessKeyID+':'+base64(HmacSha1(AccessKeySecret,stringToSign))StringToSign=CanonicalHeaders+CanonicalURICanonicalHeaders=LowerCase(HeaderName1)+':'+Trim(HeaderValue1)+'\n'+...+LowerCase(HeaderNameN)+':'+Trim(HeaderValueN)+'\n'伪代码中使用到的函数的说明:与上面请求中所用到的函数相同CanonicalURIHTTPURL中的路径部分,如下面示例中,CanonicalURI为/ListTableCanonicalHeadersCanonicalHeaders是TableStoreHTTPheader按照以下规则构造的字符串(不包括x-ots-signature头):需要包含且只包含所有以'x-ots-'开头的TableStore标准头header项名称全部小写,值必须经过trim去除空格header项按照名字的字典序从小到大排序header项的名称和值之间以':'相隔http://myInstance.cn-hangzhou.ots.aliyuncs.com/ListTable表格存储/开发者手册18---每个header之间以换行符相隔客户端应该对TableStore响应进行以下验证:验证响应头中包含的签名是否正确验证x-ots-date包含的时间与客户端时间是否相差15分钟(正负15分钟)验证x-ots-contentmd5头的值与响应数据计算出的MD5是否一致如验证不通过,用户应该在代码中拒绝这个响应所包含的数据,该响应有可能不是TableStore服务返回的。HTTPResponseContentTableStore规定HTTP响应的内容是TableStore定义的ProtocolBuffer消息序列化之后的字符串,Body长度不超过2MB。每一个TableStore请求消息对应一个TableStore响应消息,应用程序将响应内容反序列化之后,读取TableStore操作的结果。签名示例下面提供了两个请求和响应的签名验证示例,用户可以在实现签名算法后用下面的例子测试算法的实现是否正确。请求签名示例假设用户的AccessKeyID为:'29j2NtzlUr8hjP8b',AccessKeySecret为:'8AKqXmNBkl85QK70cAOuH4bBd3gS0J'那么用户请求的签名结果如下响应签名示例假设用户的AccessKeyID为:'29j2NtzlUr8hjP8b',AccessKeySecret为:'AKqXmNBkl85QK70cAOuH4bBd3gS0J'POST/ListTableHTTP/1.0x-ots-date:Tue,12Aug201410:23:03GMTx-ots-apiversion:2014-08-08x-
本文档为【阿里云-表格存储服务开发者手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
IT人
暂无简介~
格式:pdf
大小:828KB
软件:PDF阅读器
页数:29
分类:互联网
上传时间:2019-10-07
浏览量:23