Python 如何在系统之间传递大数据
我有以XML格式存储的定价数据,这些数据每小时生成一次。如果存储为XML,它的大小大约为100MB。我需要将此数据发送到我的主系统以处理此数据。将来,该数据大小也有可能发送1米 发送此数据的最佳方式是什么?到目前为止,我的想法是:Python 如何在系统之间传递大数据,python,xml,json,protocol-buffers,Python,Xml,Json,Protocol Buffers,我有以XML格式存储的定价数据,这些数据每小时生成一次。如果存储为XML,它的大小大约为100MB。我需要将此数据发送到我的主系统以处理此数据。将来,该数据大小也有可能发送1米 发送此数据的最佳方式是什么?到目前为止,我的想法是: - It would be too large to send as JSON to a POST endpoint - Possible to send it as XML and store it on my server 有更好的方法吗?假设您在linux上,
- It would be too large to send as JSON to a POST endpoint
- Possible to send it as XML and store it on my server
有更好的方法吗?假设您在linux上,并且数据已经写入文件系统的某个地方,为什么不在
crontab
条目中执行简单的scp
或rsync
您可能希望在发送之前进行压缩,或者在协议中启用压缩
如果您的数据只发生轻微变化,您也可以尝试发送一个与以前版本(使用
diff
生成)相对应的补丁,而不是发送整个数据,然后在另一端重新生成。正如Michael Anderson在回答中提到的,您可能只会在每个系统中发送不同的变化
实现这一点的一种方法是引入git之类的协议
使用git,您可以:
它也会被压缩,并通过加密的通道(取决于git服务器/服务)压缩它。使用gzip或bzip2时,XML通常会收缩80%。您可以使用诸如scp甚至ftp之类的二进制协议进行复制。100Meg并不太大,无法通过html发送。我定期下载多个GIG文件。另一种思考方法是考虑如何处理数据。您可以将xml数据分解为关系数据库或类似mongodb的无sql数据库进行处理。这些系统可以进行复制,也可以让您的其他计算机远程访问数据库。
rsync
有一个-z
选项,可以进行动态压缩。事实上,scp
有-C
。它们的压缩效果并不总是像bzip-9
那么好,但通常已经足够好了。这是一个非常聪明的想法。另一个优点是,如果发生错误,可以使用完整的提交历史记录回滚更改。仍然存在一些同步问题;主机无法确定是否已收到更新,以及什么会触发拉取请求?也许需要一个附加的应用层协议来协调。我用这种方式设置了一个绑定DNS集群和复制。主名称服务器执行git pull,如果响应不是“已经是最新的”,它将重新生成配置并将区域重新同步到从属名称服务器,然后重新加载。这个Python脚本作为cronjob每隔几分钟运行一次。