表格存储的宽行流式读功能

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介:

本篇文章介绍表格存储中的宽行流式读功能,简单说就是介绍如何读取一个列很多数据量很大的行,当一次读取不出整行时如何分多次读取,当只需要读取宽行的一部分时如何读取可以性能更好。

宽行与宽行流式读

表格存储的表结构设计中,每行由主键列和属性列构成,主键列按照顺序构成一个主键,唯一的确定一行。读写某一行时,我们必须指定这一行的主键,然后写入或者读取其中的某些属性列。

主键列的名称和类型是在建表时确定好的,作为TableMeta的一部分。但是属性列的列名和数量却是不需要指定的,在实际写入某一行时可以任意设置写入的属性列的列名,只要符合一定的字符集限制。

那么一行总共的属性列数量有没有限制呢?每行的大小是否有限制呢?答案是不限制,因为表格存储从存储机制和读写接口上支持宽行,这也是相比传统数据库的很大优势。 宽行一般而言就是指拥有非常多列的行,这样一行就会很宽,而且一行总大小很大。比如我们反复对同一行写入一些新的列,最终就会产生一个很宽的行。因为每次我们只写入一小部分数据到一个宽行,所以写入性能不是问题,问题在于读取。假如一行数据很大,我们是一次读不出整行的。那么要读取整行怎么办,可以想到假如可以先读取这一行的一部分列,再接着读后面的列,分多次读取就好了。这就是宽行流式读功能(需要使用4.0.0以上版本Java SDK)。

宽行读取方式

下面具体来介绍一下宽行的几种读取方式。

1. 使用startColumn,endColumn读取一定范围的属性列。

在GetRow的参数中,可以通过startColumn和endColumn指定要查询的属性列的起始和终止范围(按照字典序比较),这样可以读取一个宽行中的一定列名范围的列。

      // 读一行
    SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);

    // 设置读取的列的范围
    criteria.setStartColumn("Col00000");
    criteria.setEndColumn("Col10000");

    // 设置读取最新版本
    criteria.setMaxVersions(1);
    GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
    Row row = getRowResponse.getRow();

2. 使用ColumnPaginationFilter配合startColumn参数。

ColumnPaginationFilter有两个参数,limit和offset,使用ColumnPaginationFilter读取时,会跳过offset个属性列,然后读取limit个属性列。配合startColumn使用时,会从startColumn开始,跳过offset个属性列,读取limit个属性列。这种方式适合分页读取属性列的场景。

    // 读一行
    SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);

    // 设置从“ColumnX”开始读
    criteria.setStartColumn("ColumnX");

    // 使用ColumnPaginationFilter设置一次要读取的列数, limit=10, offset=0
    criteria.setFilter(new ColumnPaginationFilter(10, 0));

    // 设置读取最新版本
    criteria.setMaxVersions(1);
    GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
    Row row = getRowResponse.getRow();

3. 使用WideColumnIterator

使用SDK提供的WideColumnIterator,可以通过迭代器的方式读取一行中的全部属性列,SDK内部会流式获取。

    SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
   
    // 设置读取最新版本
    criteria.setMaxVersions(1);
    
    WideColumnIterator wideColumnIterator = syncClient.createWideColumnIterator(new GetRowRequest(criteria));

    System.out.println(wideColumnIterator.getPrimaryKey());
    while (wideColumnIterator.hasNextColumn()) {
        System.out.println(wideColumnIterator.nextColumn());
    }

总结

表格存储支持自由的属性列名称与个数,支持宽行,给业务的表结构设计提供了很高的灵活性。当表中具有宽行时,通常的读取方式可能不能满足需求,此时可以选用上述的几种方式进行宽行的读取。此外,业务在设计表结构时,如果有宽行需求,也要综合评估是否可将宽行转成多个窄行存储,避免处理宽行读取问题。

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
存储 SQL NoSQL
表格存储 SQL 功能快速上手
# 功能介绍 表格存储(Tablestore)是阿里云自研的多模型结构化数据存储,提供海量结构化数据存储以及快速的查询和分析服务。表格存储的分布式存储和强大的索引引擎能够支持 PB 级存储、千万 TPS 以及毫秒级延迟的服务能力。使用表格存储你可以方便的存储和查询你的海量数据。​ 表格存储正式发布了 SQL 功能,满足用户业务平滑迁移到表格存储并可以继续通过 SQL 方式访问表格存储,表格存储
1584 0
|
自然语言处理 NoSQL 定位技术
TableStore索引功能详解
TableStore在2018年末推出了两大在线索引功能:GlobalIndex(全局二级索引)与SearchIndex(多元索引),这两个功能大大地弥补了原先TableStore查询方式单一的缺点。但是用户在选型的时候也会有所迷惑,两个功能都包含了“索引”二字,那么又有什么区别呢?本文将针对这个问.
8769 0
|
存储 物联网 数据库
TableStore发布多元索引功能,打造统一的在线数据平台
TableStore发布多元索引功能,提供多字段ad-hoc查询、模糊查询、全文检索、排序、范围查询、嵌套查询、空间查询等功能,打造统一的在线数据平台
7983 0
|
存储 自然语言处理 NoSQL
表格存储如何在控制台使用多元索引(SearchIndex)功能
# 背景: 多元索引(SearchIndex)是TableStore 2018年重点打造的核心能力,目的是为在线数据平台(TableStore)提供丰富的查询能力, 目前提供了多种索引能力,包括倒排索引、多维空间索引等。
2864 0
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
113 3
|
SQL NoSQL 数据可视化
玩转Tablestore:使用Grafana快速展示时序数据
Grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,可以通过将采集的数据查询然后可视化的展示,实现报警通知;Grafana拥有丰富的数据源,官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQ
1754 0
玩转Tablestore:使用Grafana快速展示时序数据
|
4月前
|
DataWorks NoSQL 关系型数据库
DataWorks产品使用合集之如何从Tablestore同步数据到MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
分布式计算 DataWorks API
DataWorks常见问题之按指定条件物理删除OTS中的数据失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
6月前
|
DataWorks NoSQL 关系型数据库
可以使用dataworks从tablestore同步数据到mysql吗?
可以使用dataworks从tablestore同步数据到mysql吗?
74 1
下一篇
无影云桌面