一次PostgreSql数据迁移,使用nodejs来完成
2014-02-08
XX开放平台不允许使用站外的服务器了,可是我们的app都在站外,数据库也在站外,全都要求迁移到其云主机上(坑爹啊)。我们在其云主机上仅有有限的资源,而且也有在运行中的数据库,要做数据迁移,正好重新清理一下数据库吧,把过期的没用的数据都转入到历史库,将原系统的数据和云主机上的数据做一次合并,打算用nodejs从站外服务读取数据,然后发送到云主机上,云主机接受数据并合并到现有系统里。站外服务器和云主机上的数据迁移都用nodejs来实现,想法确立之后,开始做一个简单设计。
为什么要选用nodejs,因为可以快速开发,快速部署,js代码写起很轻快,顺便实践一个小小的nodejs项目。
要实现的功能:
sender.js
职责:接收命令行参数,读取需要迁移的源数据,转换成message格式,发送到云主机的服务上,并在开始和结束处记录日志,程序重启可以按日志断点续传。
receiver.js (云主机只有80端口开放,用apache做一个proxy)
职责:接受源数据,保存message到数据库,并返回结果给sender。
processer.js
职责:定时轮询读取message数据,有未处理的数据,则处理数据整合逻辑(合并用户ID,合并用户数据等)
2014-02-09
由于我们的数据库都是Postgresql,服务器都是CentOS,开发环境在Win7,先安装开发环境和生产环境的nodejs环境
(1)在Linux下安装nodejs,以及node-postgresql,比较简单,参见我的另一篇博客。
(2)在Win7下安装nodejs,以及node-postgresql,稍微麻烦,需要安装Python 2.7,还需要安装node-gyp,为了能安装node-postgresql 还需要安装VC++,我安装的是VC++2010 Express,都安装好了之后,测试一下,node-postgresql能正常工作。
至此工作环境准备完毕,接下来开始进入模块的简单设计阶段。
传输过程中的数据结构Json格式:
message.type: 数据名
message.content: 数据内容
至此貌似云主机上接受数据使用mongodb比较合适,在接下来的设计和实践中再做比较和决策。
(待续)