基于版本的数据存储和Replication 系统
2015-08-31 18:12
183 查看
基本需求:系统按时导入数据的新版本,然后复制到分节点
版本化的好处:
1)安全。如果最新版本写失败了,可以继续用就版本。不会出现新旧数据混杂的情况。
2)读写互不影响,类似copy on write,导入新版本数据的过程中,系统可以使用旧数据
从分布式系统的角度,系统由一个ingest Process 和多个sync Process 组成,分布在不同的机器。sync Process 和 ingest Process是通过共享目录和manifest文件交换数据和通信。sync Process 采用pull的模式,定时从共享目录pull数据,manifest文件用来表面当前最新版本的version, 以及需要copy的文件列表。
各个process靠自己时钟驱动,彼此没有信号交互,只是有共享数据,共享数据的互斥保护是靠系统自带的文件访问的保护机制,
1)当ingest process 写manifest文件的时候,各个sync process download manifest文件会block住,webClient -> IIS -> try to open the manifest file being written-> block。
2)当多个sync process down manifest文件的时候可以同时进行。
ingest process导入时候如何维护版本:
1)创建一个新版本的时候,用当前版本+1 创建一个新版本目录,但是这个目录带一个下划线,
2)当数据导入成功后,改目录名,然后把最新版本号保存到数据库
3)如果数据导入不成功也没关系,因为没有commit,系统使用上一个成功版本的数据。同时下一个周期会清理临时目录,并且再次导入。
4)维护一个最多保留的版本数
sync Process 如何sync以及维护版本
1)约定的共享目录下有一个manifest文件,第一行代表最新的版本号,其余行是文件是需要copy的文件列表,sync process定期query共享目录,并且和已取得的版本比较,以判断是否有新版本。
2)然后到共享目录的对应版本号的目录下download 文件,local的版本维护和ingest process类似,先创建一个带下划线的临时目录,download完了再commit。
版本化的好处:
1)安全。如果最新版本写失败了,可以继续用就版本。不会出现新旧数据混杂的情况。
2)读写互不影响,类似copy on write,导入新版本数据的过程中,系统可以使用旧数据
从分布式系统的角度,系统由一个ingest Process 和多个sync Process 组成,分布在不同的机器。sync Process 和 ingest Process是通过共享目录和manifest文件交换数据和通信。sync Process 采用pull的模式,定时从共享目录pull数据,manifest文件用来表面当前最新版本的version, 以及需要copy的文件列表。
各个process靠自己时钟驱动,彼此没有信号交互,只是有共享数据,共享数据的互斥保护是靠系统自带的文件访问的保护机制,
1)当ingest process 写manifest文件的时候,各个sync process download manifest文件会block住,webClient -> IIS -> try to open the manifest file being written-> block。
2)当多个sync process down manifest文件的时候可以同时进行。
ingest process导入时候如何维护版本:
1)创建一个新版本的时候,用当前版本+1 创建一个新版本目录,但是这个目录带一个下划线,
2)当数据导入成功后,改目录名,然后把最新版本号保存到数据库
3)如果数据导入不成功也没关系,因为没有commit,系统使用上一个成功版本的数据。同时下一个周期会清理临时目录,并且再次导入。
4)维护一个最多保留的版本数
sync Process 如何sync以及维护版本
1)约定的共享目录下有一个manifest文件,第一行代表最新的版本号,其余行是文件是需要copy的文件列表,sync process定期query共享目录,并且和已取得的版本比较,以判断是否有新版本。
2)然后到共享目录的对应版本号的目录下download 文件,local的版本维护和ingest process类似,先创建一个带下划线的临时目录,download完了再commit。
相关文章推荐
- php 类中数组与静态方法的配合使用
- Arduino板的DHT11温湿度传感器使用
- Visual Studio 2015 memory leak detection
- leetcode 100 Same Tree(难易度:Easy)
- Eclipse上GIT插件EGIT使用手册
- fedora22 下安装在线音乐播放器 kwplayer
- 配置信息
- HTML+CSS大风车及十字架的实现
- ZOJ2110 骨头的诱惑
- VC使用libcurl模拟登录CSDN并自动评论资源以获取积分
- JBoss主要版本下载链接一览
- 过程性能模型建立的方法——分类变量的卡方检验
- Android 自定义对话框
- Xcode程序入口
- hdu1698 Just a Hook 线段树成段替换
- Cocos2d-x从入门到精通第七课《内存管理》
- Span flag详解
- Linus常用的快捷键与shell常用通配符
- 使用git建立远程仓库,让别人git clone下来
- c语言libcurl 使用实例get/post方法+c语言字符串处理