【解決方法】リストをコピーして、そのまま postgresql データベースにインポートする方法


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システム[^] 面倒な作業をあなたのためにやってくれます。

最終的には、自分にとって何が最適かを見つけるために、いくつかのことを試してみる必要があります。

コメント

タイトルとURLをコピーしました