2012-01-17 3 views
2

RESTful分散システム・アーキテクチャーの一部であるデータ・ストレージを最初に取り込むためのきれいで効率的な方法は何でしょうか?RESTfulシステムへの初期(バルク)データインポートのベストプラクティスは何ですか?

XMLフィードを取得し、データを解析し、検証し、インポートする一括インポート用のPOSTメソッドが既に用意されています。そのため、クライアントがRESTインターフェイスに対してPOSTを実行する可能性があります(要求がタイムアウトした場合は、おそらくチャンクになります)。

データストア自体はMongoDBに基づいているため、gzip形式のデータファイルを取り出し、解凍してJSONデータを直接データベースにインポートする低レベルの一括インポートについて考えることもできます(もちろん、インポートするデータを検証するためにビジネスロジックを迂回します)。

あなたの意見は何ですか?この問題に関するアドバイスを提供するRESTパターンはありますか?

+0

HTTPがパイプライン化されるとスループットが向上する可能性がありますか? – ngeek

答えて

1

詳細を知らずに、私はあなたが最終的にそれを釘付けにしたと思います。私は、データを複数の塊に分けて、これらの塊の1つを読んでこのデータをあなたのhttpインターフェイスに投稿するプログラムを実行します。

インポートを実行するスクリプト/プログラムは、タイムアウトを回避するのに十分な大きさのチャンクでのみ動作し、その成功を意識する必要があります。作品がタイムアウトしたり失敗したりする場合は、同じ場所から再試行することができるように、インポートがどこにあるかを必ず確認する必要があります。

あなたのシステムで同じことを何度もインポートすることができればいいです(http://en.wikipedia.org/wiki/Idempotence参照)。そうすれば、1セグメントを完全に再送する必要がある場合、あなたの安らぎのバックエンドはデータを複製することなくそれを受け入れることができます。

うまく機能する場合は、インポートプログラムを複数のチャンクで同時に実行して、並列化および高速化することもできます。 (あなたのhttp /安らかなバックエンドがそれを処理できる限り)

+0

...はい、私は1000エンティティの請求でPOSTingで現在のアプローチに固執するようです。操作の冪等に関するヒントをお寄せいただきありがとうございます。これはおそらく、個々の操作の成功を追跡し、後で試みる際にスキップできるものがあるかどうかを確認する必要があります。 – ngeek