少强 2017-11-23 3949浏览量
L公司是一家物联网解决方案提供商,为不同物联网设备生产商提供物联网解决方案,这些物联网设备涉及众多产品领域,包括空调,摄像头,门锁,位置传感器,净化器,扫地机器人,各种工业传感器等等,这些设备都需要实时上传数据到存储系统保存,然后分析系统会实时计算,按照预定义逻辑触发报警或者生成报表。
物联网设备信息和产生的时序数据很适合用Table Store存储,而且能提供非常便捷的通道,用来做分析,具体可以参考这篇文章:如何高效存储海量GPS数据。
生产的每一个设备都会有一个设备ID,唯一标识这个设备,并且还存在一些属性值,比如地理位置,属于哪个生产商,属于哪个用户,目前的配置参数等等,这些值相当于这个设备的身份证和户口本。这些数据非常重要,不能容忍丢失,要有接近100%的数据可靠性保证。
要保证数据尽量高的可靠性,需要从两个方面保证:
存储系统本身的数据可靠性:Table Store基于共享存储,提供99.99999999%的数据可靠性保证,在业界属于非常非常高的标准了。
误操作后能恢复数据 :误操作永远都无法避免,要做的是当误操作发生的时候能尽快恢复,那么就需要有备份数据存在。对于备份,有两种方向,一个是部署同城或异地灾备,这种代价高费用高,更多的用于社会基础信息或金融信息。另一种是将数据备份到另一个价格更低廉的系统,当万一出现误操作的时候,可以有办法恢复就行。一般选择文件存储系统,比如阿里云OSS。
物联网设备产生的数据是一种时序数据,基于时间的一序列数据点,这些数据的价值和时间成绝对正比,越新的数据价值越大,访问也越大,一般六个月之前的数据的访问量会非常非常低。如果将六个月之前的老数据和最新的数据存储在同一个系统上,那么就不是很划算。这时候,就需要把早一些的数据(比如六个月之前)的数据保存到更便宜的文件存储系统上,比如阿里云OSS。
基于上述两个原因,有不少用户就希望能把Table Store的数据可以备份到OSS上,这样比较热,价值高的数据在Table Store上供用户实时查询或者实时分析、计算等,然后再拷贝一份数据到OSS,提供备份,以及冷数据存储。
一般是账号注册数据等核心数据用OSS来做备份,时序数据用OSS来做冷数据存储,有时候也会直接实时拷贝一份Table Store中的数据存储到OSS,同时提供灾备和冷数据存储功能。
针对上述问题,Table Store团队联合数据集成(CDP)团队上线了近实时的数据同步(备份)方案,用户只需要将数据写入Table Store,Table Store会负责将数据在10分钟内自动发送给OSS存储。
Table Store:阿里云分布式NoSQL数据库,专注于海量数据的存储服务,目前单表可支持10PB级,10万亿行以上的数据量,且数据量增大后性能仍然保持稳定。Table Store Stream功能是一种增量实时通道服务,类似于MySQL的binlog,可以通过Stream接口实时读取到最新的变化数据(Put/Update/Delete)。
数据集成 :阿里云数据管理平台,支持数据同步等众多数据功能。
OSS:阿里云对象存储服务,提供海量、安全、低成本、高可靠的云存储服务,提供99.99999999%的数据可靠性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。
三种产品在方案中的角色如下:
| 产品 | Table Store | 数据集成 | OSS |
| --- | --- | --- | --- |
| 角色 | 数据存储 | 数据同步通道 | 备份 |
由于Table Store和OSS不是完全对等的产品,所以如果需要将数据导入OSS,那么在使用Table Store的时候有一些注意的地方:
整行写入:
同步延时:
OSS的文件数:
写:
读:
备份:
恢复:
账号注册等核心数据 :这类数据的特点是会经查更新,但数据量不大,对于这种类型的数据可以定期打snapshot,就是每天定时把这个表的数据全量导出到OSS保存。当发生误操作删除数据后,可以直接从OSS恢复全量。另一种做法就是实时通过Table Store Stream同步到OSS,但是这一种方式目前无法处理删除。所以,可以两者结合使用,或者直接使用全量导出。
传感器时序数据 : 这类数据的特点是每次都是新写入,基本无修改,这类数据可以使用Table Store Stream功能实时同步到OSS中。然后对Table Store中的数据设置生命周期,比如半年,等到半年后,Table Store中超过半年的数据会被系统自动销毁,这时候数据只会在OSS中存在。
无须配置
无需配置
按照说明填写:
在导入模板配置里面:
在配置界面,已经提前嵌入了OTSStreamReader和OSSWriter的模板,每一项配置后面都做了解释。这里我们主要介绍增量同步的配置,会详细介绍OTSStreamReader的配置,如果是全量导出,则会使用OTSReader,OTSReader的配置可以参考:全量导出的OTSReader配置项。
{
"type": "job",
"version": "1.0",
"configuration": {
"setting": {
"errorLimit": {
"record": "0" # 允许出错的个数,当错误超过这个数目的时候同步任务会失败。
},
"speed": {
"mbps": "1", # 每次同步任务的最大流量。
"concurrent": "1" # 每次同步任务的并发度。
}
},
"reader": {
"plugin": "otsstream", # Reader插件的名称。
"parameter": {
"datasource": "", # Table Store的数据源名称,如果有此项则不再需要配置endpoint,accessId,accessKey和instanceName。
"dataTable": "", # TableStore中的表名。
"statusTable": "TableStoreStreamReaderStatusTable", # 存储TableStore Stream状态的表,一般不需要修改。
"startTimestampMillis": "", # 开始导出的时间点,由于是增量导出,需要循环启动此任务,则这里每次启动的时候的时间都不一样,这里需要设置一个变量,比如${start_time}。
"endTimestampMillis": "", # 结束导出的时间点。这里也需要设置一个变量,比如${end_time}。
"date": "yyyyMMdd", # 导出哪一天的数据,功能和startTimestampMillis、endTimestampMillis重复,这一项需要删除。
"mode": "single_version_and_update_only", # TableStore Stream导出数据的格式,目前需要设置成:single_version_and_update_only。如果配置模板中没有则需要增加。
"column":[ # 需要导出TableStore中的哪些列到OSS中去,如果配置模板中没有则需要增加,具体配置个数由用户自定义设置
{
"name": "uid" # 列名,这个是Table Store中的主键
},
{
"name": "name" # 列名,这个是Table Store中的属性列。
},
],
"isExportSequenceInfo": false, # single_version_and_update_only 模式下只能是false。
"maxRetries": 30 # 最大重试次数。
}
},
"writer": {
"plugin": "oss", # Writer插件的名称
"parameter": {
"datasource": "", # OSS的数据源名称
"object": "", # 最后备份到OSS的文件名的前缀,建议Table Store实例名/表名/date。比如"instance/table/{date}"
"writeMode": "truncate", # 支持truncate|append|nonConflict,truncate会清理已存在的同名文件;append会加到已存在的同名文件内容后面;nonConflict会报错当同名文件存在时。
"fileFormat": "csv", # 文件类型
"encoding": "UTF-8", # 编码类型
"nullFormat": "null", # 当遇到控制时,在文本中如何表示
"dateFormat": "yyyy-MM-dd HH:mm:ss", # # 时间格式
"fieldDelimiter": "," # 每一列的分隔符
}
}
}
}
更详细的配置项可以参考:
配置调度参数:
至此,TableStore数据通过数据集成同步到OSS的配置完成了,延迟在5分钟到10分钟之间。
对于备份场景,这种延迟基本能满足大部分用户的需求了,但为了体验更佳,后面还会继续优化,主要会在两方面:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云存储基于飞天盘古2.0分布式存储系统,产品多种多样,充分满足用户数据存储和迁移上云需求。