[ad_1]
100万件を超えるレコードを含む配列リストを持っています。Copy-mangerなどの組み込みメソッドまたはインポートがより高速なメソッドを使用して、PostgreSQLデータベースにそのままダンプしたいと考えています。 postgresql 内のこの大量のデータ
私のコードは次のとおりです
私が試したこと:
@Service public class OrderProcessingService { @Autowired private OrderRepository orderRepository; public void process_data(String hfrcode, List<Order> order) { List<Order> orderList = new ArrayList<>(); for(var data : order) { Order order_data = new Visit(); order_data .setUuid(UUID.randomUUID().toString()); order_data .setOrderID(data.getOrderID()); order_data .setOrderDate(data.getOrderDate()); order_data .setWeight(data.getWeight()); order_data .setOrderQuantity(data.getOrderQuantity()); order_data .setOrderLocation(data.getOrderLocation()); orderList.add(order_data ); } orderRepository.saveAll(orderList); } }
リストを保存する代わりに、リストをコピーして PostgreSQL データベースにダンプし、データをデータベースにインポートする実行時間を最小限に抑えたいと考えています。
解決策 1
PostgreSQL かどうかに関係なく、DB に 100 万行を「ほんの一瞬」で追加できることを誰も保証できません。DB エンジンが実行されているコンピューター、アクティビティ レベルなど、非常に多くの要因に依存します。 DB、DB コンピューターとコードを実行しているコンピューターの間の接続。
考えてみてください。追加する行が 1,000,000 行あり、各行に 100 文字がある場合 (通常は控えめに見積もってください)、転送する必要のあるデータは 100 メガバイトです。これはかなりの帯域幅です。ギガビット ネットワークでは、転送に 1 秒以上かかります。ネットワーク上に他のトラフィックがない場合は、2 台のコンピュータ間で転送してください。 それは、DB エンジンがそれを処理し、DB ファイル内の行を操作して保存する前です。
何をしようとしているのか、そしてその理由を考えてから、「単なるソフトウェアの問題」と考えるのではなく、データを大幅に削減できる方法を考えてください。
解決策 2
データをどこから入手したかが分からなければ、これに答えるのはほぼ不可能な質問です。 これを見るといくつかのことが分かります。 ランダムな UUID を追加していますが、これはデータベースによって簡単に自動生成される可能性があります。 この値に依存するものは他にありません。 データが API 呼び出しの結果から取得されたものである場合は、次のような ETL ツールを使用できます。 HPCCシステム[^] 面倒な作業をあなたのためにやってくれます。
最終的には、自分にとって何が最適かを見つけるために、いくつかのことを試してみる必要があります。
[ad_2]
コメント