Cara menyalin daftar dan mengimpor apa adanya di database postgresql dalam sepersekian detik

pemrograman


Saya memiliki daftar array yang memiliki lebih dari 1 juta catatan di dalamnya, saya ingin membuangnya seperti di database PostgreSQL menggunakan metode bawaan seperti Copy-manger atau metode apa pun yang akan lebih cepat untuk diimpor sejumlah besar data di postgresql

Kode saya adalah sebagai berikut

Apa yang saya coba:

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

Daripada menyimpan daftar, saya ingin menyalinnya dan membuangnya ke database PostgreSQL sehingga saya dapat meminimalkan waktu eksekusi untuk mengimpor data ke database.

Solusi 1

Tidak ada yang bisa menjamin Anda “sepersekian detik” untuk menambahkan satu juta baris ke DB, PostgreSQL atau tidak – itu akan bergantung pada terlalu banyak faktor: komputer yang menjalankan mesin DB, tingkat aktivitas di DB, koneksi antara komputer DB dan komputer yang menjalankan kode Anda.
Coba pikirkan: jika Anda memiliki 1.000.000 baris untuk ditambahkan, dan setiap baris memiliki 100 karakter (umumnya merupakan perkiraan konservatif) maka Anda memiliki 100 megabyte untuk ditransfer – yang merupakan potongan bandwidth yang signifikan: jaringan gigabit akan memerlukan waktu satu detik atau lebih untuk mentransfernya. transfer antara dua komputer jika tidak ada lalu lintas lain di jaringan! Dan itu sebelum mesin DB memprosesnya dan mulai mengatur baris-baris dalam file DB untuk menyimpannya.

Pikirkan tentang apa yang Anda coba lakukan dan alasannya, lalu pikirkan cara untuk mengurangi data secara signifikan alih-alih berasumsi bahwa itu “hanya masalah perangkat lunak”.

Solusi 2

Tanpa mengetahui dari mana Anda mendapatkan data, ini adalah pertanyaan yang hampir mustahil untuk dijawab. Ada beberapa hal yang terjadi jika dilihat dari hal ini. Anda menambahkan UUID acak tetapi itu dapat dengan mudah dibuat secara otomatis oleh database. Tidak ada hal lain di sana yang bergantung pada nilai ini. Jika data berasal dari hasil panggilan API, Anda bisa menggunakan alat ETL seperti Sistem HPCC[^] untuk melakukan pekerjaan berat untukmu.

Pada akhirnya, Anda harus mencoba beberapa hal untuk mencari tahu apa yang terbaik bagi Anda.

コメント

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