सूची को कैसे कॉपी करें और एक सेकंड के अंश में पोस्टग्रेस्क्ल डेटाबेस में कैसे आयात करें


मेरे पास एक सरणी सूची है जिसमें 1 मिलियन से अधिक रिकॉर्ड हैं, मैं इसे कॉपी-मैंगर या किसी भी विधि जैसे अंतर्निहित तरीकों का उपयोग करके पोस्टग्रेएसक्यूएल डेटाबेस में डंप करना चाहता हूं जो आयात करने के लिए और अधिक तेज़ होगा 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

कोई भी आपको DB, PostgreSQL में दस लाख पंक्तियाँ जोड़ने या नहीं जोड़ने के लिए “एक सेकंड का एक अंश” की गारंटी नहीं दे सकता है – यह बहुत सारे कारकों पर निर्भर करेगा: कंप्यूटर जिस पर DB इंजन चल रहा है, गतिविधि स्तर पर डीबी, डीबी कंप्यूटर और आपका कोड चलाने वाले कंप्यूटर के बीच कनेक्शन।
इसके बारे में सोचें: यदि आपके पास जोड़ने के लिए 1,000,000 पंक्तियाँ हैं, और प्रत्येक पंक्ति में 100 अक्षर हैं (आम तौर पर एक रूढ़िवादी अनुमान) तो आपके पास स्थानांतरित करने के लिए 100 मेगाबाइट हैं – जो बैंडविड्थ का एक महत्वपूर्ण हिस्सा है: एक गीगाबिट नेटवर्क को एक सेकंड या उससे अधिक समय लगेगा यदि नेटवर्क पर कोई अन्य ट्रैफ़िक नहीं है तो इसे दो कंप्यूटरों के बीच स्थानांतरित करें! और इससे पहले कि डीबी इंजन इसे संसाधित करे और उन्हें संग्रहीत करने के लिए डीबी फाइलों में पंक्तियों का संयोजन शुरू कर दे।

इस बारे में सोचें कि आप क्या करने का प्रयास कर रहे हैं और क्यों, फिर यह मानने के बजाय कि इसे “सिर्फ एक सॉफ़्टवेयर समस्या” है, उन तरीकों के बारे में सोचें जिनसे आप डेटा को भारी रूप से कम कर सकते हैं।

समाधान 2

यह जाने बिना कि आप अपना डेटा कहां से प्राप्त कर रहे हैं, इस प्रश्न का उत्तर देना लगभग असंभव है। इसे देखने से कुछ चीज़ें घटित होती हैं। आप एक यादृच्छिक यूयूआईडी जोड़ रहे हैं लेकिन इसे डेटाबेस द्वारा आसानी से स्वचालित रूप से जेनरेट किया जा सकता है। वहां ऐसा कुछ भी नहीं है जो इस मूल्य पर निर्भर करता हो। यदि डेटा एपीआई कॉल के परिणाम से आता है, तो आप ईटीएल टूल का उपयोग कर सकते हैं जैसे एचपीसीसी सिस्टम[^] आपके लिए भारी सामान उठाने के लिए।

अंततः, आपको यह पता लगाने के लिए कुछ चीज़ें आज़मानी होंगी कि आपके लिए सबसे अच्छा क्या काम करेगा।

コメント

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