Table Store(原OTS) 如何支持大cell写入

TableStore设计目标是快速读写简单的表数据,所以对单列大小限制在2M Byte(一次写入超大cell会引起系统波动),对大部分用户来说,这个值都是足够的,但是仍然有一些用户碰到了如下问题:用户自身绝大部分cell都能保证低于2M,按时有极个别的Cell高达20M,此时如果专门为这些大cell使用另外的存储无疑增加了系统复杂度,于是“如何利用Table Store存取大cell”就被提了出来。

我们给出的方案如下:

  1. 对需要写入的大cell按照规定大小拆分,比如1M,比如10M的cell会被拆成10个1M的片段,称为S1,S2…S10
  2. 写入流程如下,针对某一行,逐个写入S1,S2…S10,每次写都要携带一个状态列,该状态列是保证读写一致性的重要手段,详细描述如下:
a)    状态列由三部分组成,分别是写入ID,已经写完的片段集合,未写完的片段集合

b)    每次有大cell写入事件都生成新的UUID作为该次事件的ID,防止并发写带来的数据不一致

c)    第一次写,状态列内容如下{ID;;S1,S2…S10}, 里面有三个字段,以字符;分割,第一个是该次写入事件ID;第二个表示已经写入成功的cell片段,因为是第一次写,所以是空;第三个表示等待写入的cell片段,因为是第一次写,所以是S1,S2…S10都属于待写入

d)    第一次写成功后,S1 cell片段已经成功写入,此时继续写入S2片段,新状态列内容变为{ID;S1;S2,S3…S10}, 此时要使用TableStore的带条件更新功能,必须检查TableStore里面的状态列内容等于原状态列内容,然后才能写入新的状态列;否则说明有多线程并发写该列,要终止此次写入,重新开始

e)    按照上面办法依次写入S2,S3…S10片段
  1. 读取流程如下,

    a)    尝试读取状态列,如果读不到,说明该行没有大cell,跳过
    
    b)    读到了状态列之后,检查里面待写入cell片段是否为空,如果不为空,说明正在写入,等待并重试
    
    c)    如果状态列中待写入cell片段为空,说明写入已经完成,则开始读,每次读过来的状态列都要跟上一次读的状态列比较,如果发现不同,则重新读取
    
    d)    所有列读出来后,拼接返回给调用方
    

我们给出了示例的代码并测试了32M大cell写入,整个写事件耗时26s,读事件耗时13s。

注意事项:

  1. 上面的方案是基于已有的SDK构建的,并不会修改SDK,所以该方案和SDK发布没有绑定关系;
  2. 如果写过程中应用进程down,会留下垃圾数据(读不会成功,因为部分数据校验会失败),用户可以选择主动清理,或者重新覆盖;
  3. 上述功能依赖新版本的限制项放开,近期会升级,紧急需求可以直接论坛发帖。

源码:https://github.com/aliyun/aliyun-tablestore-big-cell-example

时间: 2024-11-26 23:06:15

Table Store(原OTS) 如何支持大cell写入的相关文章

精华阅读第 12 期 | 最新 App Store 审核指南与10大被拒理由?

很多时候,我们对技术的追求是没有止境的,我们需要不断的学习,进步,再学习,再进步!本文系移动精英开发俱乐部的第12期文章推荐阅读整理,其中涉及到了 Android 数据库框架,架构设计中的循环引用,同时还阐述了如何在iOS中实现抽象类,以及什么是集群和分布式.同时,本文还分享了阿里巴巴的实践分享,如果你在开发一款APP,你也可以读一下<最新 App Store 审核指南与10大被拒理由?>.希望这些文章能对大家有所启发.文章系 ITOM 管理平台 OneAPM 审校整理: 1,Find Con

flash-FLASH支持大几百张位图图片和两个场景的交互会卡吗?

问题描述 FLASH支持大几百张位图图片和两个场景的交互会卡吗? FLASH支持大几百张位图图片和两个场景的交互会卡吗?如果会卡,那我想只用一个场景实现下列效果:这个场景中有一个影片剪辑元件1存于一帧中,不是首帧.该影片剪辑元件1内部嵌套有影片剪辑元件2,影片剪辑元件2内有许多关键帧.我可以为影片剪辑元件内部每一帧均添加一个相同按钮,想通过点击这个按钮画面就会跳转到影片剪辑元件1的首帧,这个按钮应该添加什么代码? 解决方案 没有必要一次性装载所有的图片,而是只装载当前视图中可以看到的图片,这样可

json-bootstrap table分页的问题,求大神帮忙

问题描述 bootstrap table分页的问题,求大神帮忙 我用的是bootstrap table插件,后台返回的json数据正常,里面也有包括total的总数,页面上面默认初始化显示的是第一页,后端已经分好页面了,我附带的参数是page=1,rows=10,但是表格总是只能显示第一页的,比如第一页显示10条,他只会显示10条,不会出现翻页的页码栏,我猜测可能的原因应该是插件以为我只有10条记录吧,这种情况改如何解决??? 解决方案 我是不是提交的参数有问题,导致只显示一页,插件认为我只有一

配置-关于&amp;amp;lt;@p.table标签的问题 急等大神解答

问题描述 关于<@p.table标签的问题 急等大神解答 normalOperate=[ {"action":"Com_edit","name":"编辑"}, {"action":"Com_watermark","name":"生成水印","confirm":"您确定生成水印吗?"} ] 我想配一个&q

Java实现Dbhelper支持大数据增删改_java

在做项目的时候,技术选型很重要,在底层的方法直接影响了我们对大数据访问以及修改的速度,在Java中有很多优秀的ORM框架,比如说:JPA,Hibernate 等等,正如我们所说的,框架有框架的好处,当然也存在一些可以改进的地方,这个时候,就需要我们针对于不同的业务不同的需求,不同的访问量,对底层的架构重新封装,来支持大数据增删改. 代码: import java.io.*; import java.sql.*; import java.util.*; import java.util.loggi

Pandora是苹果App Store有史以来下载量第二大的应用

北京时间5月9日,互联网广播服务提供商Pandora CEO乔伊·肯尼迪(Joe Kennedy)周二透露,该公司的用户已经突破1.5亿. 肯尼迪是在CTIA无线通信展上透露这一消息的,他还表示,Pandora是苹果App Store有史以来下载量第二大的应用. Pandora最近遭遇了Spotify的激烈挑战,后者最近的一系列举动都获得了外界关注,包括向第三方开发者开放服务.Spotify几个月前表示,付费用户已经达到300万. 但肯尼迪认为,Pandora仍处于增长初期,他说:"我们认为现在

如何在android下将不支持大屏的程序拉伸到全屏

问题描述 如何在android下将不支持大屏的程序拉伸到全屏 解决方案 解决方案二:将你最外层的view设置好宽高就ok了解决方案三:该回复于2010-10-29 16:24:11被版主删除

MySQL 5.7.6: wl#5757 InnoDB支持大page

worklog: http://dev.mysql.com/worklog/task/?id=5757 官方mysql 在git上代码比较零散,具体的实现我们可以参考webscalesql上的代码:https://reviews.facebook.net/D31107 或者在webscalesql的git上: git show ebd27a35db6ef2267efd69da392e5efdc77611a6 我们知道Innodb的默认page size为16KB.在MySQL5.6版本里我们可以

使用超大规模数据分析技术支持大数据预测

我给大家带来的演讲内容是关于"使用超大规模数据分析技术支持大数据预测"这方面的.首先介绍一下我自己,我叫韩卿,很多人叫我Luke.我是Kyligence公司的联合创始人兼CEO,Apache Kylin开源项目的创始人,同时也是这个项目的项目管理委员会主席,以及Apache软件基金会会员. 一.超大规模数据分析的挑战 Hadoop 首先,我想和大家分享一下我们在大数据技术领域碰到的挑战,这里在座很多朋友都是从传统的数据仓库出来的,事实上以前是没有Hadoop的,因此数据并不是很大,我记