Cách sao chép và nhập danh sách như trong cơ sở dữ liệu postgresql trong một phần giây

lập trình


Tôi đang có một danh sách mảng có hơn 1 triệu bản ghi trong đó, tôi muốn kết xuất nó giống như trong cơ sở dữ liệu PostgreSQL bằng cách sử dụng thứ gì đó được xây dựng trong các phương thức như Copy-manger hoặc bất kỳ phương thức nào sẽ nhập nhanh hơn lượng dữ liệu lớn này trong postgresql

Mã của tôi là như sau

Những gì tôi đã thử:

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

Thay vì lưu danh sách, tôi muốn sao chép nó và kết xuất nó vào cơ sở dữ liệu PostgreSQL để có thể giảm thiểu thời gian thực hiện nhập dữ liệu vào cơ sở dữ liệu.

Giải pháp 1

Không ai có thể đảm bảo cho bạn “một phần giây” có thể thêm một triệu hàng vào DB, PostgreSQL hay không – điều đó sẽ phụ thuộc vào quá nhiều yếu tố: (các) máy tính mà công cụ DB đang chạy, mức độ hoạt động trên đó DB, kết nối giữa máy tính DB và máy tính chạy mã của bạn.
Hãy suy nghĩ về điều này: nếu bạn có 1.000.000 hàng cần thêm và mỗi hàng có 100 ký tự (thường là ước tính thận trọng) thì bạn có 100 megabyte để truyền – đây là một đoạn băng thông đáng kể: mạng gigabit sẽ mất một giây hoặc hơn để chuyển nó giữa hai máy tính nếu không có lưu lượng truy cập nào khác trên mạng! Và đó là trước khi công cụ DB xử lý nó và bắt đầu sắp xếp các hàng trong tệp DB để lưu trữ chúng.

Hãy suy nghĩ về những gì bạn đang cố gắng làm và tại sao, sau đó nghĩ về những cách bạn có thể giảm đáng kể dữ liệu thay vì cho rằng đó “chỉ là sự cố phần mềm”.

Giải pháp 2

Nếu không biết bạn đang tìm nguồn dữ liệu của mình ở đâu, đây là một câu hỏi gần như không thể trả lời. Có một vài điều xảy ra khi nhìn vào điều này. Bạn đang thêm một UUID ngẫu nhiên nhưng cơ sở dữ liệu có thể dễ dàng tạo tự động. Không có gì khác ở đó phụ thuộc vào giá trị này. Nếu dữ liệu đến từ kết quả của lệnh gọi API, bạn có thể sử dụng công cụ ETL như Hệ thống HPCC[^] để thực hiện công việc nặng nhọc cho bạn.

Cuối cùng, bạn sẽ phải thử một số thứ để tìm ra thứ nào phù hợp nhất với mình.

コメント

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