- 1.3 SDS服务简介
- 1.3.1 帐号注册
- 1.3.2 数据模型
- 1.3.3 二级索引
- 1.3.4 支持的操作
- 1.3.5 配额说明
- 1.3.6 计量计费
- 1.3.7 AutoScaling
- 1.3.8 Stream
- 1.3.9 Recovery
- 1.3.10 冷备
- 1.3.11 权限模型
- 1.3.12 集群信息
- 1.3.13 Client配置
- 1.3.14 多语言SDK
- 1.3.15 离线分析
- 1.3.16 监控统计
- 1.3.17 数据加密
- 1.3.18 示例
- 1.4 API
- 1.4.1 创建表
- 1.4.2 修改表
- 1.4.3 克隆表
- 1.4.4 禁用表
- 1.4.5 启用表
- 1.4.6 删除表
- 1.4.7 描述表
- 1.4.8 获得表的状态
- 1.4.9 列出所有表
- 1.5 API
- 1.5.1 写记录
- 1.5.2 读记录
- 1.5.3 删除记录
- 1.5.4 自增操作
- 1.5.5 批量操作
- 1.5.6 带条件的批量写操作
- 1.5.7 允许部分执行的批量操作
- 1.5.8 扫描记录
- 1.5.9 事务操作
- 1.6 FAQ
- 1.6.1 认证授权
- 1.6.2 数据模型
- 1.6.3 旧版帐号迁移到新版
- 1.6.4 RESOURCE_NOT_FOUND异常
- 1.6.5 常见错误
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.3.8 Stream
SDS Stream 提供了SDS表中记录更新的有序信息流。当您对表启用Stream时,SDS将捕获表中的记录更新,并根据Stream类型将相关信息以消息形式输出到用户定义的Talos消息队列中。
Stream特性
- more than once 语义,对于已成功写入SDS的记录,相关更新消息至少会送达Talos Consumer一次
- 行级别保序
Stream类型及消息格式
- RECORD_IMAGE,更新后记录视图
- record : 记录视图,如果是整行删除操作,只包含实体组键和主键
- rowDeleted : 行是否被删除
- timestamp : 更新时间戳
- tableName: 操作的表名
MUTATE_LOG,记录更新日志
- record : 记录,如果是整行删除操作,同RECORD_IMAGE;如果是部分删除,record中的key表示删除的属性,value可忽略, 如果是increment操作,record表示increment后的视图
- type : 操作类型,包括Put/Delete/Increment
- rowDeleted : 行是否被删除
- timestamp : 更新时间戳
- amounts: increment操作时该值不为空,表示同IncrementRequest的amounts
- tableName: 操作的表名
KEYS_ONLY,记录更新的键值
- record : 记录键值
- timestamp : 更新时间戳
- tableName: 操作的表名
使用流程
- 在Talos中创建topic
- 建表或更新表schema时,以topic名作为输入,添加Stream
- 向表中生产数据
- 创建Talos consumer,并消费Stream消息
需要注意的问题
- 消息格式中的timestamp是指SDS服务器端的更新时间戳
- MUTATE_LOG是指服务器端操作成功执行后对应的日志,并不完全等同于客户端原始操作,主要有两点区别:
- Batch操作会分解为独立的单元操作,每个单元对应一条消息
- 带condition的操作,如果成功,消息中不会记录condition;如果失败,不会产生消息
- Stream根据表的分片数量分布式收集更新,因此建表时建议对表预分片以提高性能
- 对于MUTATE_LOG类型的stream,在more than once语义下,非幂等操作,如Increment,需要根据消息中得到的记录视图转化成put操作进行重放,或者根据时间戳进行去重再用increment进行重放
进一步工作
- 目前Talos在增加topic partition数目时,无法保序,因此若应用需要行级别保序,暂时只能创建topic时一次性指定partition数目
- 对应Talos的endpoint如下:
- aws北京 => https://awsbj0.talos.api.xiaomi.com
- aws美西 => https://awsusor0.talos.api.xiaomi.com
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论