本节介绍表格存储中的宽行流式读功能,即:如何读取一个有很多列和很大数据量的行,当一次读取不出整行时如何分多次读取,或者当只需要读取宽行的一部分时如何读取可以提高性能。
宽行与宽行流式读
表格存储的表每行由主键列和属性列构成,主键列按照顺序构成一个主键,是可以确定行的唯一标识。读/写某一行时,我们必须指定这一行的主键,然后写入或者读取其中的某些属性列。
主键列的名称和类型是在建表时确定好的,为 TableMeta 的一部分。但是属性列的列名和数量却是不需要指定的,在实际写入某一行时可以任意设置写入的属性列的列名,只要符合一定的字符集限制即可。
表格存储从存储机制和读/写接口上支持宽行,所以不会限制总共的属性列数量和每行的大小,这也是相比传统数据库的很大优势。宽行一般而言就是指拥有非常多列的行,这样一行就会很宽,而且一行总大小很大。比如,反复对同一行写入一些新的列,最终就会产生一个很宽的行。因为每次只写入一小部分数据到一个宽行,所以写入性能不是问题,问题在于读取性能。假如一行数据很大,一次无法读出整行。若要读取整行,可以先读取这一行的一部分列,再接着读后面的列,分多次读取就可以,这就是宽行流式读功能(需要使用 4.0.0 以上版本 Java SDK)。
宽行读取方式
宽行读取有以下几种方式:
// 读一行
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();
// 读一行
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();
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());
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。