【问题标题】:What's the best practice for initial (bulk) data import into RESTful system?将初始(批量)数据导入 RESTful 系统的最佳实践是什么?
【发布时间】:2012-01-21 00:50:42
【问题描述】:

对于作为 RESTful 分布式系统架构的一部分的数据存储初始填充数据存储,您认为哪种方式干净且有效?

我们已经有了一个用于批量导入的 POST 方法,它接受 XML 提要、解析、验证和导入数据。因此,一种可能性是要求客户端针对我们的 REST 接口进行 POST(如果我们遇到请求超时问题,可能以块的形式)。

数据存储本身基于 MongoDB,因此另一方面您也可以考虑低级批量导入,它采用 gzip 压缩的数据文件,将其解压缩并直接将 JSON 数据导入数据库(其中当然会绕过我们的业务逻辑来验证要导入的数据)。

您的意见和建议是什么,是否有任何 REST 模式可以针对此问题提供建议?

【问题讨论】:

  • 可能是 HTTP Pipelining 可以增加吞吐量?

标签: java rest mongodb architecture bulk


【解决方案1】:

在不了解更多细节的情况下,我认为您最终还是成功了。我会将数据分成块,然后运行一个程序来读取其中一个块并将这些数据发布到您的 http 接口。

执行导入的脚本/程序应该只使用足够小的块以避免超时,并且应该知道它是否成功。如果某个片段超时或失败,您应该确保知道您在导入中的位置,以便您可以从同一位置重试。

话虽如此,如果您的系统允许多次导入相同的内容而不产生任何后果(请参阅http://en.wikipedia.org/wiki/Idempotence),那么如果您必须完全重新发送 1 个片段,那么您的宁静后端将无需重复数据即可接受。

如果你让它运行良好,你甚至可以同时运行包含多个块的导入程序,以使其并行且更快。 (只要你的 http/restful 后端可以处理)

【讨论】:

  • ... 是的,似乎我会坚持当前的 POST 方法,对 1000 个实体收费。感谢您对操作的幂等性的提示,这可能需要跟踪各个操作的成功,并查看可以在后续尝试中跳过哪些操作。
猜你喜欢
  • 2018-05-17
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多