TableStore: 海量结构化数据分层存储方案

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: ### 前言 表格存储是阿里云自研分布式存储系统,可以用来存储海量结构化、半结构化的数据。表格存储支持高性能和容量型两种实例类型。高性能使用SSD的存储介质,针对读多写多的场景都有较好的访问延时。容量型使用的是SSD和SATA混合的存储介质。

前言

表格存储是阿里云自研分布式存储系统,可以用来存储海量结构化、半结构化的数据。表格存储支持高性能和容量型两种实例类型。高性能使用SSD的存储介质,针对读多写多的场景都有较好的访问延时。容量型使用的是SSD和SATA混合的存储介质。对写多的场景,性能接近高性能,读方面,如果遇到冷数据产生读SATA盘的话,延时会比高性能上涨一个量级。在海量数据存储场景下,例如时序场景,我们会希望最新的数据可以支持高性能查询,较早的数据的读写频次都会低很多。这时候一个基于表格存储高性能和容量型存储分层的需求就产生了。

方案细节

表格存储近期对外正式发布的全增量一体的通道服务(参考文档),通道服务基于表格存储数据接口之上的全增量一体化服务。通道服务为用户提供了增量、全量、增量加全量三种类型的分布式数据实时消费通道。有了通道服务,我们可以很方便的构建从高性能实例下的表到容量型表之间的实时数据同步,进而可以在高性能表上使用表格存储的特性数据生命周期(参考文档),根据业务需求设置一个合理的TTL。
总体来说就可以构建一个如下图所示的架构:

wz1.png
整个数据的流动过程如下:

  1. 业务写入端直接写入高性能实例
  2. 高性能实例中的数据通过通道服务同步至容量型
  3. 高性能实例中的老数据自动过期,减少存储量占用
  4. 用户查询请求根据时序查询条件,判断是否是近期数据

    1. 近期数据查询进入高性能,毫秒级别返回
    2. 较早数据查询进入容量型,几十毫秒后返回

代码和操作流程:

在高性能实例上根据业务主键需求创建数据表,并设置合理的数据TTL,然后在容量型下创建相同的schema的表用来持久化存储所有数据。

wz2.png

然后在通道页面创建一个全增量类型的通道:

wz3.png

通过控制台可以简单清晰的查看到同步的状态,并发,进度等信息:

wz4.png


下面贴一下通过Tunnel进行复制同样schema表TableStore表的Sample代码:

func main () {
    //高性能实例的信息
  tunnelClient := tunnel.NewTunnelClient("", "", "", "")
  //容量型实例的信息
    client := tablestore.NewClient("", "", "", "")

    //配置callback到SimpleProcessFactory,配置消费端TunnelWorkerConfig
    workConfig := &tunnel.TunnelWorkerConfig{
        ProcessorFactory: &tunnel.SimpleProcessFactory{
            ProcessFunc: replicateDataFunc,
            CustomValue: client,
        },
    }

    //使用TunnelDaemon持续消费指定tunnel
    daemon := tunnel.NewTunnelDaemon(tunnelClient, "", workConfig)
    err := daemon.Run()
    if err != nil {
        fmt.Println("failed to start tunnel daemon with error:", err)
    }
}

func replicateDataFunc(ctx *tunnel.ChannelContext, records []*tunnel.Record) error {
    client := ctx.CustomValue.(*tablestore.TableStoreClient)
    fmt.Println(client)
    for _, rec := range records {
        fmt.Println("tunnel record detail:", rec.String())
        updateRowRequest := new(tablestore.UpdateRowRequest)
        updateRowRequest.UpdateRowChange = new(tablestore.UpdateRowChange)
        updateRowRequest.UpdateRowChange.TableName = "coldtable"
        updateRowRequest.UpdateRowChange.PrimaryKey = new(tablestore.PrimaryKey)
        updateRowRequest.UpdateRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
        for _, pk := range rec.PrimaryKey.PrimaryKeys {
            updateRowRequest.UpdateRowChange.PrimaryKey.AddPrimaryKeyColumn(pk.ColumnName, pk.Value)
        }
        for _, col := range rec.Columns {
            if col.Type == tunnel.RCT_Put {
                updateRowRequest.UpdateRowChange.PutColumn(*col.Name, col.Value)
            } else if col.Type == tunnel.RCT_DeleteOneVersion {
                updateRowRequest.UpdateRowChange.DeleteColumnWithTimestamp(*col.Name, *col.Timestamp)
            } else {
                updateRowRequest.UpdateRowChange.DeleteColumn(*col.Name)
            }
        }

        _, err := client.UpdateRow(updateRowRequest)
        if err != nil {
            fmt.Println("hit error when put record to cold data", err)
        }
    }
    fmt.Println("a round of records consumption finished")
    return nil
}

总结

通过通道服务,存储在表格存储中的结构化,半结构化数据可以实时流出,进行加工,萃取,计算或进行同步。如果是想进一步降低冷数据的存储成本,可以参考这篇文章把表格存储的数据备份到OSS归档存储。       

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
113 3
|
4月前
|
DataWorks NoSQL 关系型数据库
DataWorks产品使用合集之如何从Tablestore同步数据到MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
分布式计算 DataWorks API
DataWorks常见问题之按指定条件物理删除OTS中的数据失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
6月前
|
DataWorks NoSQL 关系型数据库
可以使用dataworks从tablestore同步数据到mysql吗?
可以使用dataworks从tablestore同步数据到mysql吗?
72 1
|
存储 消息中间件 监控
Tablestore 物联网存储全面升级 -- 分析存储公测
物联网存储功能介绍随着物联网技术的快速发展,物联网已广泛应用于制造业、能源、建筑、医疗、交通、物流仓储等多个领域,物联网的应用能够有效节约资源、提高效率、保障安全以及降低成本,帮助各行业实现可持续发展目标。在物联网场景中根据数据特点进行分类,数据主要包括设备元数据、设备消息数据和设备时序数据三种类型,不同类型数据的存储需求不同。物联网场景中不同类型数据的存储核心需求如下:设备元数据:主要数据为设备
276 0
Tablestore 物联网存储全面升级 -- 分析存储公测
|
NoSQL 开发工具
TableStore表格存储(阿里云OTS)多行数据操作查询,支持倒序,过滤条件和分页
1. 批量读取操作 批量读取操作可以通过多种方式进行,包括: GetRow:根据主键读取一行数据。 BatchGetRow:批量读取多行数据。 GetRange:根据范围读取多行数据。
873 0
|
存储 消息中间件 NoSQL
物联网数据通过规则引擎流转到OTS|学习笔记
快速学习物联网数据通过规则引擎流转到OTS
339 15
物联网数据通过规则引擎流转到OTS|学习笔记
|
存储 负载均衡 开发者
表格存储数据多版本介绍| 学习笔记
快速学习表格存储数据多版本介绍。
表格存储数据多版本介绍| 学习笔记
|
存储 SQL 传感器
基于 Tablestore 时序存储的物联网数据存储方案
背景物联网时序场景是目前最火热的方向之一。海量的时序数据如汽车轨迹数据、汽车状态监控数据、传感器实时监控数据需要存放进入数据库。一般这类场景下存在如下需求数据高写入,低读取需要对写入数据进行基础的图表展示对写入数据进行聚合分析传统的关系型数据库并不适合此类场景,时序数据库脱颖而出。表格存储时序实例支持时序数据的存储,其具有如下特点:Serverless,分布式,低成本高写入支持优秀的索引能力对数据
1541 0
基于 Tablestore 时序存储的物联网数据存储方案
|
存储 NoSQL 关系型数据库
基于TableStore的海量气象格点数据解决方案实战 王怀远
基于TableStore的海量气象格点数据解决方案实战 王怀远
421 0
基于TableStore的海量气象格点数据解决方案实战 王怀远