开发者如何使用表格存储 Tablestore

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 【10月更文挑战第11天】开发者如何使用表格存储 Tablestore

表格存储(Tablestore,原名OTS)是阿里云提供的一款分布式、高性能、多模态的NoSQL数据库服务,适用于海量数据的存储和高速访问。开发者可以使用Tablestore来存储和查询结构化数据,如日志、监控数据、IoT数据等。提供了宽表(WideColumn)模型、时序(TimeSeries)模型和消息(Timeline)模型三种数据存储模型。

以下是开发者如何使用阿里表格存储Tablestore的详细步骤,包括创建实例、创建表、写入数据、查询数据和删除数据,并附上相应的Python实现代码。

登录阿里云首页,在产品处找到表格存储Tablestore

image.png

如果是首次使用,点击立即开通,开通是免费的。完成开通后即可进入产品控制台

image.png

1. 创建实例

首先,你需要在阿里云控制台中创建一个Tablestore实例。这里提供两种模式,一种是VCU(预留模式),一种是CU(按量付费)。这通常涉及选择实例类型(如按量付费或包年包月)、配置网络(如VPC或经典网络)和设置访问控制(如RAM角色)。

image.png

步骤一:安装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.')

注意事项

  1. 安全性:确保你的Access Key ID和Access Key Secret是安全的,不要将它们硬编码在代码中。考虑使用环境变量或阿里云RAM角色来管理访问权限。
  2. 性能:根据你的应用场景和数据量,合理配置表的预留吞吐量。Tablestore支持自动扩缩容,但你也可以手动调整。
  3. 错误处理:在实际应用中,你需要添加错误处理逻辑来处理Tablestore可能返回的各种错误,如网络错误、超时错误、数据冲突等。

以上是使用阿里表格存储Tablestore的基本步骤和Python实现代码。根据你的具体需求,你可能需要调整代码中的参数和逻辑。有关产品的更多案例和应用请查询官方文档

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
索引 存储 NoSQL
表格存储(Tablestore)入门指南
表格存储(Tablestore)入门指南内容简介了表格存储(Tablestore)是阿里云自研的 NoSQL 多模型数据库,提供海量结构化数据存储以及快速的查询和分析服务。
18467 2
|
存储 SQL 分布式计算
《阿里云存储手册》——表格存储Tablestore
《阿里云存储手册》——表格存储Tablestore
293 0
|
存储 NoSQL
|
存储 SQL 分布式计算
表格存储使用场景介绍| 学习笔记
快速学习表格存储使用场景介绍。
表格存储使用场景介绍| 学习笔记
|
存储 运维 NoSQL
表格存储服务介绍| 学习笔记
快速学习表格存储服务介绍。
表格存储服务介绍| 学习笔记
|
存储 SQL 缓存
表格存储Tablestore-多元索引最佳实践
本文将大量用户和业务在使用表格存储(Tablestore)的多元索引时候遇到的问题总结为最佳实践提供给大家。
855 0
|
存储 NoSQL JavaScript
Tablestore 快速入门
近十年来互联网技术得到了飞速的发展,越来越多的行业逐渐加入到了互联网的阵营中来,同时也产生了更丰富、更复杂的业务场景和需求,这对于数据应用系统的性能是巨大的挑战。互联网或物联网应用采用关系型数据库 MySQL 存储会遇到哪些问题,是规模瓶颈、还是成本太高?阿里云自研 Serverless 结构化数据存储 Tablestore如何解决 MySQL 的扩展性问题?如何在十分钟内学习和免费体验一款强大的 Serverless 数据库产品?
536 0
|
存储 运维 NoSQL
表格存储 Tablestore 简介
近十年来互联网技术得到了飞速的发展,越来越多的行业逐渐加入到了互联网的阵营中来,同时也产生了更丰富、更复杂的业务场景和需求,这对于数据应用系统的性能无疑是巨大的挑战。传统关系型数据库有什么瓶颈,如何通过分布式数据库表格存储 Tablestore 进行优化?
932 0
|
存储 NoSQL Linux
表格存储快速上手准备
表格存储 Tablestore 提供了阿里云控制台、命令行工具、Tablestore SDK 三种访问方式。本章节将为您介绍表格存储命令行工具( Tablestore CLI )的使用方法。通过命令行工具,您使用简单的命令体验表格存储服务。在使用 Tablestore CLI 工具之前,您需要做以下准备工作。
462 0
表格存储快速上手准备
|
SQL 负载均衡 NoSQL
表格存储快速上手-宽表模型
宽表模型是(Wide column) Tablestore 采用的几个模型之一。宽表模型是 Schema-free 的,创建一张宽表仅需要定义 1-4个主键 结构,无需定义属性列结构,在插入数据时添加任意多个属性列即可。主键列表中第一个主键将作为分区键,按照分区键值的范围将数据负载均衡到多个分区 (Partition) 中。
783 0
表格存储快速上手-宽表模型