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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: 【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
目录
相关文章
|
12天前
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
|
8天前
|
存储 监控 安全
Web服务器的维护
【10月更文挑战第4天】Web服务器的维护
91 62
|
28天前
|
人工智能 Java 测试技术
低成本工程实践-AI帮我写代码做需求
本文主要讲述,以“无需训练模型”的方式实现:AI智能分析功能需求、写代码、review代码解决特定业务问题的实践过程
低成本工程实践-AI帮我写代码做需求
|
8天前
|
人工智能 算法 前端开发
首个 AI 编程认证课程上线!阿里云 AI Clouder 认证:基于通义灵码实现高效 AI 编码
为了帮助企业和开发者更好使用通义灵码,阿里云上线了“AI Clouder 认证课程--基于通义灵码实现高效 AI 编码”。本课程汇聚了后端、前端、算法领域 5 名实战派专家,带你体验 4 大研发场景实践,上手 3 大实操演练,深度掌握智能编码助手通义灵码,实现全栈 AI 编码技能跃升。
|
11天前
|
存储 Serverless API
打造你的专属语音助手,基于函数计算托管 CosyVoice 语音模型
今天分享一下,基于阿里云函数计算 FC 以及 CAP(云应用开发平台),极速托管专属的 CosyVoice 应用。并且我们提供了 API 调用方案以及镜像构建源码方便您根据自己的业务任意 DIY。
109 10
|
11天前
|
消息中间件 人工智能 Cloud Native
|
22天前
|
监控 Go 数据处理
iLogtail 进化论:重塑可观测采集的技术边界
iLogtail 作为一款开创性的轻量级日志采集器,历经 13 载风雨,始终致力于高效地从多元化的数据源中萃取、处理可观测信息,并无缝传输至阿里云日志服务或各类日志分析平台。今年,适逢 iLogtail 开源两周年的里程碑时刻,我们将回顾 iLogtail 的技术演进之路,领略其不断突破边界、引领可观测采集未来的创新力量。
|
22天前
|
安全 Cloud Native 测试技术
Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
祝贺 Nacos 社区 Star 数突破 30000!值此时机,回顾过去的两年时间,Nacos 从 2.0.4 版本演进到了 2.4.2 版本,基本完成了当初构想的高性能、易拓展的目标,并且对产品的易用性和安全性进行了提升,同时优化了新的官网,并进行了多语言和更多生态支持。未来,Nacos 会向更安全、更泛化、更云原生的 Nacos3.0 演进。
|
27天前
|
监控 Java Go
深入探索 RUM 与全链路追踪:优化数字体验的利器
本文主要介绍了基于 OpenTeletemetry 与 W3C 协议构建端到端全链路的解决方案,同时探讨了 RUM 与端到端链路集成的最佳实践,希望可以为大家在生产环境落地应用提供一些参考。
138 12
|
22天前
|
缓存 Kubernetes Java
阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战
SAE 事件中心通过智能诊断显示通知与用户连接起来,SAE WEB 百毫秒弹性实例给事件中心带来了新的实时性、海量数据和高吞吐的挑战,本篇将带您了解 SAE 整体事件中心的架构和挑战。