सबसे पहले डेटा संचालित डिज़ाइन के साथ इसे भ्रमित न करें।
डेटा ओरिएंटेड डिज़ाइन की मेरी समझ यह है कि यह आपके डेटा को कुशल प्रसंस्करण के लिए व्यवस्थित करने के बारे में है। विशेष रूप से कैश मिस आदि के संबंध में। दूसरी ओर डेटा संचालित डिजाइन डेटा प्रोग्राम को आपके बहुत से प्रोग्राम व्यवहार को नियंत्रित करने के बारे में है (Andrew Keith's answer द्वारा बहुत अच्छी तरह वर्णित)।
:
आप इस तरह के रंग, त्रिज्या, bounciness, स्थिति आदि
ऑब्जेक्ट ओरिएंटेड दृष्टिकोण
OOP में आप इस तरह आप गेंदों का वर्णन होगा के रूप में गुणों के साथ अपने आवेदन में गेंद वस्तुओं है कहो
class Ball {
Point position;
Color color;
double radius;
void draw();
};
और फिर आप इस तरह गेंदों का एक संग्रह बनाने होगा:
vector<Ball> balls;
डाटा उन्मुखी दृष्टिकोण
डाटा उन्मुखी डिजाइन में हालांकि आप और अधिक इस तरह कोड लिखने की संभावना है:
class Balls {
vector<Point> position;
vector<Color> color;
vector<double> radius;
void draw();
};
आप देख सकते हैं कोई एक इकाई अब और एक गेंद का प्रतिनिधित्व नहीं है। बॉल ऑब्जेक्ट्स केवल निहित मौजूद हैं।
इसमें कई फायदे प्रदर्शन के अनुसार हो सकते हैं। आम तौर पर हम एक ही समय में कई गेंदों पर संचालन करना चाहते हैं। हार्डवेयर आमतौर पर स्मृति के बड़े निरंतर भाग कुशलतापूर्वक संचालित करने के लिए चाहता है।
दूसरा आप ऑपरेशन कर सकते हैं जो गेंदों के गुणों के केवल एक हिस्से को प्रभावित करता है। जैसे यदि आप सभी गेंदों के रंगों को विभिन्न तरीकों से जोड़ते हैं, तो आप चाहते हैं कि आपके कैश में केवल रंग की जानकारी हो। हालांकि जब सभी गेंद गुण एक इकाई में संग्रहीत होते हैं तो आप गेंद के सभी अन्य गुणों को भी खींचेंगे। भले ही आपको उनकी आवश्यकता नहीं है।
कैश प्रयोग उदाहरण
एक गेंद प्रत्येक गेंद 64 बाइट्स लेता है और एक प्वाइंट 4 बाइट लेता है कहो। एक कैश स्लॉट 64 बाइट्स भी कहते हैं। अगर मैं 10 गेंदों की स्थिति को अपडेट करना चाहता हूं तो मुझे कैश में 10 * 64 = 640 मेमोरी बाइट्स को खींचना होगा और 10 कैश मिस प्राप्त करना होगा। यदि मैं गेंदों की स्थिति अलग इकाइयों के रूप में काम कर सकता हूं, तो इसमें केवल 4 * 10 = 40 बाइट्स लगेगा। यह एक कैश लाने में फिट बैठता है। इस प्रकार हम सभी 10 गेंदों को अपडेट करने के लिए केवल 1 कैश मिस प्राप्त करते हैं। ये संख्या मनमानी हैं मुझे लगता है कि एक कैश ब्लॉक बड़ा है।
लेकिन यह दिखाता है कि कैसे स्मृति लेआउट गंभीर प्रभाव कैश हिट और इस प्रकार प्रदर्शन कर सकता है। यह केवल महत्व में वृद्धि करेगा क्योंकि सीपीयू और रैम की गति के बीच का अंतर बढ़ता है।
स्मृति
लेआउट कैसे मेरी गेंद उदाहरण में मैं इस मुद्दे एक बहुत आसान बनाया है, क्योंकि आम तौर पर आप की संभावना कई चर एक साथ उपयोग करेंगे किसी भी सामान्य एप्लिकेशन के लिए। जैसे स्थिति और त्रिज्या का उपयोग अक्सर एक साथ किया जाएगा। फिर अपने संरचना होना चाहिए:
class Body {
Point position;
double radius;
};
class Balls {
vector<Body> bodies;
vector<Color> color;
void draw();
};
कारण आप इस करना चाहिए एक साथ इस्तेमाल किया डेटा अलग सरणियों में रखा जाता है, तो, वहाँ एक जोखिम है कि वे कैश में एक ही स्लॉट के लिए प्रतिस्पर्धा करेंगे है। इस प्रकार एक लोडिंग दूसरे को फेंक देगा।
तो ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की तुलना में आप जो कक्षाएं बनाते हैं, वे समस्या के आपके मानसिक मॉडल में इकाइयों से संबंधित नहीं हैं। चूंकि डेटा डेटा उपयोग के आधार पर डेटा को एक साथ लाया जाता है, इसलिए आपके डेटा को ओरिएंटेड डिज़ाइन में अपनी कक्षाएं देने के लिए हमेशा समझदार नाम नहीं होंगे। रिलेशनल डेटाबेस
पीछे डाटा उन्मुखी डिजाइन सोच को
रिलेशन बहुत आप रिलेशनल डेटाबेस के बारे में कैसे सोचते हैं के समान है। एक रिलेशनल डेटाबेस को अनुकूलित करने से कैश का अधिक कुशलता भी शामिल हो सकता है, हालांकि इस मामले में, कैश सीपीयू कैश को स्मृति में पृष्ठों को नहीं डालता है। एक अच्छा डेटा बेस डिजाइनर भी बड़ी संख्या में कॉलम के साथ एक टेबल बनाने के बजाय अक्सर अलग-अलग एक्सेस डेटा को अलग तालिका में विभाजित कर सकता है, केवल कॉलम का उपयोग किया जाता है। वह कुछ तालिकाओं को denormalize भी चुन सकता है ताकि डेटा डिस्क पर कई स्थानों से पहुंचा जा सके। डेटा ओरिएंटेड डिज़ाइन की तरह ही इन विकल्पों को देखकर किया जाता है कि डेटा एक्सेस पैटर्न क्या हैं और जहां प्रदर्शन बाधा है।
गेम डेवलपर में यह आलेख अब ब्लॉग फॉर्म में पढ़ने में आसान है: http://gamesfromwithin.com/data-oriented-design – Edmundito
क्या आपने कभी कुछ लोगों को गुगल किया है, एक अच्छा लक्षित SO प्रश्न मिला है, और फिर एहसास हुआ क्या तुमने इसे साल पहले पूछा था? – ryeguy
यहां एक [डीओडी सामग्री का कुल] है (http://www.asawicki.info/news_1422_data-oriented_design_-_links_and_thoughts.html) वेब – legends2k