यदि आप शून्य, एक या अनेक . का पालन करते हैं सिद्धांत, जिससे या तो ऐसी कोई चीज नहीं है, उनमें से एक, या असीमित संख्या है, आप हमेशा इस तरह की चीजों को ट्रैक करने के लिए सामान्य रूप से सामान्य तालिकाओं का निर्माण करेंगे।
उदाहरण के लिए, एक संभावित स्कीमा:
CREATE TABLE user_attributes (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
user_id INT NOT NULL,
attribute_name VARCHAR(255) NOT NULL,
attribute_value VARCHAR(255),
UNIQUE INDEX index_user_attributes_name(user_id, attribute_name)
);
यह मूल कुंजी-मूल्य स्टोर पैटर्न है जहां आप कई रख सकते हैं प्रति उपयोगकर्ता विशेषताएँ।
हालांकि इसके लिए भंडारण की आवश्यकताएं attribute1
जैसे स्थायी-निराशाजनक नामों के साथ एक निश्चित-स्तंभ व्यवस्था से अधिक है , टेराबाइट के आकार की हार्ड-ड्राइव की उम्र में लागत इतनी कम है कि यह शायद ही कभी एक मुद्दा है।
आम तौर पर आप इस डेटा के लिए एक टेबल बनाते हैं जब तक कि सम्मिलन समय एक समस्या न हो जाए। जब तक आपके इंसर्ट्स तेज़ हैं, मैं इसके बारे में चिंता नहीं करूँगा। उस समय आप शार्डिंग . पर विचार करना चाहेंगे इस डेटा को एक समान स्कीमा के साथ कई तालिकाओं में विभाजित करने की रणनीति, लेकिन केवल तभी जब इसकी आवश्यकता हो।
मुझे लगता है कि यह ~ 10-50 मिलियन पंक्तियों के चरण में होगा, लेकिन अधिक हो सकता है यदि इस तालिका में सम्मिलित गतिविधि की मात्रा अपेक्षाकृत कम है।
यह न भूलें कि पठन गतिविधि के लिए अनुकूलित करने का सबसे अच्छा तरीका कैश का उपयोग करना है:सबसे तेज़ डेटाबेस क्वेरी वह है जिसे आप नहीं बनाते हैं। उस तरह के काम के लिए आप आमतौर पर memcached जैसी किसी चीज़ का इस्तेमाल करते हैं पिछले फ़ेच के परिणामों को संग्रहीत करने के लिए, और आप इसे लिखने पर अमान्य कर देंगे।
हमेशा की तरह, किसी भी प्रस्तावित स्कीमा को उत्पादन . पर बेंचमार्क करें पैमाना।