PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Django पोस्टग्रेज ArrayField बनाम एक-से-अनेक संबंध

यदि आप किसी सरणी फ़ील्ड का उपयोग करते हैं

  • आपके DB में प्रत्येक पंक्ति का आकार थोड़ा बड़ा होने वाला है, इसलिए Postgres बहुत अधिक टोस्ट तालिकाओं का उपयोग करने जा रहा है (http://www.postgresql.org/docs/9.5/static/storage-toast.html )
  • हर बार जब आप पंक्ति प्राप्त करते हैं, जब तक कि आप विशेष रूप से defer . का उपयोग नहीं करते हैं (https://docs.djangoproject.com/en/1.9 /ref/models/querysets/#defer ) फ़ील्ड या अन्यथा इसे only . के माध्यम से क्वेरी से बाहर कर दें , या values या कुछ और, जब भी आप उस पंक्ति में पुनरावृति करते हैं, तो आप उन सभी मूल्यों को लोड करने की लागत का भुगतान करते हैं। अगर आपको यही चाहिए तो हो।
  • उस सरणी में मानों के आधार पर फ़िल्टर करना, जबकि संभव हो उतना अच्छा नहीं होगा और Django ORM इसे उतना स्पष्ट नहीं करता जितना कि यह M2M तालिकाओं के लिए करता है।

यदि आप M2M का उपयोग करते हैं

  • आप उन संबंधित मानों पर अधिक आसानी से फ़िल्टर कर सकते हैं
  • वे फ़ील्ड डिफ़ॉल्ट रूप से स्थगित हैं, आप prefetch_related का उपयोग कर सकते हैं यदि आपको उनकी आवश्यकता है और फिर फैंसी प्राप्त करें यदि आप केवल उन मूल्यों का एक सबसेट लोड करना चाहते हैं
  • कुंजी और अतिरिक्त आईडी फ़ील्ड के कारण M2M के साथ DB में कुल संग्रहण थोड़ा अधिक होने वाला है
  • चाबियों के कारण इस मामले में जुड़ने की लागत पूरी तरह से नगण्य है।

व्यक्तिगत रूप से मैं कहूंगा कि एम 2 एम टेबल के साथ जाएं, लेकिन मुझे आपका विशिष्ट एप्लिकेशन नहीं पता है। यदि आप बड़ी मात्रा में डेटा के साथ काम करने जा रहे हैं, तो यह एक प्रतिनिधि डेटासेट को हथियाने और इसके साथ दोनों विधियों का परीक्षण करने के लायक है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्वेरी का उपयोग करके माता-पिता को पुनरावर्ती रूप से खोजें

  2. PostGIS का उपयोग करके बहुभुज डेटा को लाइन सेगमेंट में कैसे बदलें

  3. PostgreSQL में रोमन अंकों में महीने को प्रारूपित करें

  4. बैश खोल से psql कमांड का उपयोग करके एकाधिक प्रश्नों को कैसे निष्पादित करें?

  5. org.hibernate.type.TextType और Oracle