Why the Generalized Data Model Is Not Yet Another Bad CaRMa: Analysis of Four Pitfalls and Measurements on a Live Database
The author compares their generalized data model (a quartet of id, up, t, val) with the failed CRM Vision from the book 'Dreaming in Code,' explaining why their approach does not repeat the mistakes of Bad CaRMa. The model implements a type system, a request controller, and indexes, confirmed by measurements: record collection takes 0.16 ms, and link traversal takes 0.30 ms. A concrete example is also shown: without an index, a query took 4 seconds; after adding one, it took 0.09 ms.
हैबर पर एक लेख में स्कॉट रोसेनबर्ग की पुस्तक 'ड्रीमिंग इन कोड' (जिसे बैड कारमा के नाम से जाना जाता है) से CRM विज़न के उदाहरण का उपयोग करके सामान्यीकृत डेटा मॉडल की समस्या पर विचार किया गया है। विज़न में बिना प्रकार के 240+ कॉलम वाली एक DATA तालिका का उपयोग किया गया था, जिसके कारण सरल खोज के लिए 6-10 सेल्फ-जॉइन, प्रदर्शन में गिरावट (50 गीगाबाइट डेटा के लिए 250 गीगाबाइट इंडेक्स की आवश्यकता) और $10 मिलियन का नुकसान हुआ। लेखक का दावा है कि उनका मॉडल - चौकड़ी (id, up, t, val) - तीन स्तरों के कारण इन गलतियों को नहीं दोहराता: एक प्रकार प्रणाली (कोर में मूल प्रकार, उपयोगकर्ता-परिभाषित प्रकार-शब्द, वास्तविक संबंध), एक नियंत्रक जो स्वचालित रूप से WITH RECURSIVE के साथ SQL उत्पन्न करता है, और इंडेक्स ((t, val) और (up, t) पर समग्र कवरिंग इंडेक्स)। Postgres में 133,731 चौकड़ी (168 मेगाबाइट डेटा, 40 मेगाबाइट इंडेक्स) के आधार पर, प्रकार द्वारा सटीक मिलान 0.08 मिलीसेकंड में, रिकॉर्ड के सभी विवरण एकत्र करना 0.16 मिलीसेकंड में, और संबंधों को ट्रैवर्स करना 0.30 मिलीसेकंड में होता है। इसके विपरीत, एक मामला दिया गया है जहां t और up निर्दिष्ट किए बिना ANN-इंडेक्स पर एक क्वेरी को सेक स्कैन के माध्यम से चलने में 4 सेकंड लगे, और आंशिक इंडेक्स जोड़ने के बाद यह 0.09 मिलीसेकंड हो गया। लेखक डैटॉमिक का उल्लेख एक सही EAV उदाहरण के रूप में भी करता है, लेकिन इसे एक विशिष्ट क्षेत्र तक सीमित बताता है। निष्कर्ष: यदि प्रकार प्रणाली, नियंत्रक और EXPLAIN के माध्यम से सत्यापित वास्तविक इंडेक्स हों, तो सामान्यीकरण पाप नहीं है।
स्रोत: Habr — хаб ИИ —
मूल
