Comment copier la liste et l’importer telle quelle dans la base de données postgresql en fraction de seconde

la programmation


J’ai une liste de tableaux qui contient plus d’un million d’enregistrements, je veux la vider telle qu’elle est dans la base de données PostgreSQL en utilisant quelque chose de méthodes intégrées comme Copy-manger ou toute méthode qui sera plus rapide à importer cette grande quantité de données dans postgresql

Mon code est le suivant

Ce que j’ai essayé :

@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);
 }
} 

Au lieu de sauvegarder la liste, je souhaite la copier et la transférer dans la base de données PostgreSQL afin de minimiser le temps d’exécution de l’importation des données dans la base de données.

Solution 1

Personne ne peut vous garantir “une fraction de seconde” pour ajouter un million de lignes à une base de données, PostgreSQL ou non – cela dépendra de bien trop de facteurs : le ou les ordinateurs sur lesquels le moteur de base de données est exécuté, le niveau d’activité sur lequel la base de données, la connexion entre l’ordinateur de base de données et l’ordinateur exécutant votre code.
Pensez-y : si vous avez 1 000 000 de lignes à ajouter et que chaque ligne comporte 100 caractères (généralement une estimation prudente), alors vous avez 100 Mo à transférer, ce qui représente une part importante de la bande passante : un réseau Gigabit prendra une seconde ou plus pour transférez-le entre les deux ordinateurs s’il n’y a pas d’autre trafic sur le réseau ! Et c’est avant que le moteur de base de données ne puisse le traiter et commencer à jongler avec les lignes des fichiers de base de données pour les stocker.

Réfléchissez à ce que vous essayez de faire et pourquoi, puis réfléchissez aux moyens de réduire considérablement les données au lieu de supposer qu’il s’agit “d’un simple problème logiciel”.

Solution 2

Sans savoir d’où proviennent vos données, il est presque impossible de répondre à cette question. Il y a quelques choses qui se produisent en regardant cela. Vous ajoutez un UUID aléatoire mais cela pourrait facilement être généré automatiquement par la base de données. Il n’y a rien d’autre qui dépend de cette valeur. Si les données proviennent du résultat d’un appel API, vous pouvez utiliser un outil ETL tel que Systèmes HPCC[^] pour faire le gros du travail à votre place.

En fin de compte, vous devrez essayer certaines choses pour découvrir ce qui fonctionnera le mieux pour vous.

コメント

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