表格存储(Tablestore,原名OTS)是阿里云提供的一款分布式、高性能、多模态的NoSQL数据库服务,适用于海量数据的存储和高速访问。开发者可以使用Tablestore来存储和查询结构化数据,如日志、监控数据、IoT数据等。提供了宽表(WideColumn)模型、时序(TimeSeries)模型和消息(Timeline)模型三种数据存储模型。
以下是开发者如何使用阿里表格存储Tablestore的详细步骤,包括创建实例、创建表、写入数据、查询数据和删除数据,并附上相应的Python实现代码。
登录阿里云首页,在产品处找到表格存储Tablestore
如果是首次使用,点击立即开通,开通是免费的。完成开通后即可进入产品控制台
1. 创建实例
首先,你需要在阿里云控制台中创建一个Tablestore实例。这里提供两种模式,一种是VCU(预留模式),一种是CU(按量付费)。这通常涉及选择实例类型(如按量付费或包年包月)、配置网络(如VPC或经典网络)和设置访问控制(如RAM角色)。
步骤一:安装Tablestore SDK
Tablestore提供了多种编程语言的SDK,这里以Python SDK为例。
bash复制代码 pip install aliyun-python-sdk-tablestore
步骤二:初始化客户端
首先,你需要初始化一个Tablestore客户端,并配置实例名称和访问密钥。
python复制代码 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest from aliyunsdkots.endpoint import endpoint_data # 配置访问密钥和实例名称 access_key_id = 'your_access_key_id' access_key_secret = 'your_access_key_secret' instance_name = 'your_instance_name' # 初始化客户端 client = AcsClient(access_key_id, access_key_secret, endpoint_data.get_endpoint('ots', 'cn-hangzhou')) # 替换为你的Region
步骤三:创建表
在Tablestore中,表是数据存储的基本单位。以下是一个创建表的示例:
python复制代码 def create_table(): request = CommonRequest() request.set_accept_format('json') request.set_domain('ots.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') request.set_version('2024-10-21') request.set_action_name('CreateTable') # 设置请求参数 request.add_body_params('instance_name', instance_name) table_meta = { 'table_name': 'your_table_name', # 替换为你的表名 'primary_key_schema': [ {'PK1': 'INTEGER'}, # 主键1 {'PK2': 'STRING'} # 主键2 ], 'reserved_throughput': { 'capacity_unit': { 'read': 0, 'write': 0 } }, 'table_options': 'TIME_TO_LIVE=-1, MAX_VERSIONS=1' } request.add_body_params('table_meta', table_meta) # 发送请求并处理响应 response = client.do_action_with_exception(request) print(response.decode('utf-8')) create_table()
步骤四:插入数据
在表中插入数据需要构造一个PutRow请求。
python复制代码 def put_row(): request = CommonRequest() request.set_accept_format('json') request.set_domain('ots.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') request.set_version('2024-10-21') request.set_action_name('PutRow') # 设置请求参数 request.add_body_params('instance_name', instance_name) request.add_body_params('table_name', 'your_table_name') # 替换为你的表名 # 构造主键和属性列 primary_key = [{'PK1': 1}, {'PK2': 'example_string'}] attribute_columns = [{'column_name': 'attribute1', 'value': 'value1'}, {'column_name': 'attribute2', 'value': 123}] # 构造PutRow请求体 put_row_request = { 'condition': 'EXPECT_NOT_EXIST', # 插入条件 'primary_key': primary_key, 'attribute_columns': attribute_columns, 'return_content': {'RETURN_ALL': True} # 返回内容 } request.add_body_params('put_row_request', put_row_request) # 发送请求并处理响应 response = client.do_action_with_exception(request) print(response.decode('utf-8')) put_row()
步骤五:查询数据
查询数据需要构造一个GetRow请求。
python复制代码 def get_row(): request = CommonRequest() request.set_accept_format('json') request.set_domain('ots.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') request.set_version('2024-10-21') request.set_action_name('GetRow') # 设置请求参数 request.add_body_params('instance_name', instance_name) request.add_body_params('table_name', 'your_table_name') # 替换为你的表名 # 构造主键 primary_key = [{'PK1': 1}, {'PK2': 'example_string'}] # 构造GetRow请求体 get_row_request = { 'primary_key': primary_key, 'columns_to_get': ['attribute1', 'attribute2'], # 需要返回的列 'column_filter': {'single_column_value_filter': {'column_name': 'attribute1', 'comparator': 'EQUAL', 'value': 'value1'}} # 过滤条件 } request.add_body_params('get_row_request', get_row_request) # 发送请求并处理响应 response = client.do_action_with_exception(request) print(response.decode('utf-8')) get_row()
步骤六:更新数据
更新数据需要构造一个UpdateRow请求。
python复制代码 def update_row(): request = CommonRequest() request.set_accept_format('json') request.set_domain('ots.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') request.set_version('2024-10-21') request.set_action_name('UpdateRow') # 设置请求参数 request.add_body_params('instance_name', instance_name) request.add_body_params('table_name', 'your_table_name') # 替换为你的表名 # 构造主键 primary_key = [{'PK1': 1}, {'PK2': 'example_string'}] # 构造更新条件和属性列 condition = {'expect_exist': True} attribute_columns_to_put = [{'column_name': 'attribute1', 'value': 'new_value'}] attribute_columns_to_delete = ['attribute2'] # 构造UpdateRow请求体 update_row_request = { 'condition': condition, 'primary_key': primary_key, 'attribute_columns_to_put': attribute_columns_to_put, 'attribute_columns_to_delete': attribute_columns_to_delete, 'return_content': {'RETURN_ALL': True} # 返回内容 } request.add_body_params('update_row_request', update_row_request) # 发送请求并处理响应 response = client.do_action_with_exception(request) print(response.decode('utf-8')) update_row()
步骤七:删除数据
删除数据涉及构造一个DeleteRowRequest,并调用客户端的delete_row方法。
python复制代码 # 删除数据的请求 def delete_row(): request = CommonRequest() request.set_accept_format('json') request.set_domain('ots.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') request.set_version('2024-10-21') request.set_action_name('DeleteRow') # 设置请求参数 request.add_body_params('instance_name', instance_name) request.add_body_params('table_name', 'your_table_name') # 替换为你的表名 # 构造主键 primary_key = [('PK1', 1), ('PK2', 'SampleRow')] condition = Condition(IGNORE_CONDITION) # 无条件删除 # 删除数据 client.delete_row('SampleTable', primary_key, condition) logging.info('Data deleted successfully.')
注意事项
- 安全性:确保你的Access Key ID和Access Key Secret是安全的,不要将它们硬编码在代码中。考虑使用环境变量或阿里云RAM角色来管理访问权限。
- 性能:根据你的应用场景和数据量,合理配置表的预留吞吐量。Tablestore支持自动扩缩容,但你也可以手动调整。
- 错误处理:在实际应用中,你需要添加错误处理逻辑来处理Tablestore可能返回的各种错误,如网络错误、超时错误、数据冲突等。
以上是使用阿里表格存储Tablestore的基本步骤和Python实现代码。根据你的具体需求,你可能需要调整代码中的参数和逻辑。有关产品的更多案例和应用请查询官方文档。