मैं किसी वेबसाइट के लिए उपयोगकर्ता प्रोफ़ाइल सिस्टम पर काम करने की प्रक्रिया में हूं और सोच रहा हूं कि लेने के लिए एक बेहतर (स्केलेबल) दृष्टिकोण क्या होगा। मैं दो समाधानों के साथ आया हूं और कुछ भी इनपुट या शायद पॉइंटर्स की तलाश में हूं जो मैंने याद किया होगा।उपयोगकर्ता प्रोफाइल स्टोर करने के लिए कोई तरीका चुनना?
निम्नलिखित तालिका विवरण कथन निष्पादन योग्य नहीं हैं, लेकिन इसमें शामिल तालिकाओं के लेआउट का विचार देने के लिए केवल वहां हैं।
CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_email VARCHAR(320),
user_joined DATATIME,
user_last_seen DATATIME,
user_name_first VARCHAR,
user_name_last VARCHAR,
user_name_alias VARCHAR,
user_location_country VARCHAR,
user_location_region VARCHAR,
user_location_city VARCHAR
# ...
);
जाहिर है यह सब पर बहुत स्केलेबल नहीं है और मैं कष्टप्रद अतिरिक्त गुणों को जोड़ने:
मेरे प्रारंभिक सोचा कुछ इस तरह था। एक फायदा यह है कि मैं जल्दी से गुणों के एक विशिष्ट समूह से मेल खाने वाले उपयोगकर्ताओं की खोज कर सकता हूं। मैंने थोड़ा सा देखा है और यह एक बहुत ही आम दृष्टिकोण है (उदा। वर्डप्रेस)।
मेरे दूसरा दृष्टिकोण (एक मैं वर्तमान के साथ चारों ओर खेल रहा हूँ) और अधिक स्केलेबल है, लेकिन मैं प्रदर्शन के बारे में थोड़ा चिंतित हूँ:
CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_email VARCHAR(320)
);
CREATE TABLE user_profile(
user_id INT UNSIGNED NOT NULL,
visibility ENUM('PRIVATE', 'PUBLIC'),
name VARCHAR,
value VARCHAR
);
इस दृष्टिकोण हर उपयोग महत्वपूर्ण मूल्य का एक सेट का उपयोग करना इसके साथ जुड़े जोड़े जो अतिरिक्त गुणों को जोड़ते हैं और लॉगिन करते समय उपयोगकर्ता प्रोफ़ाइल लोड करते हैं। हालांकि मैं पहले दृष्टिकोण में सभी प्रकार की जानकारी खो देता हूं (उदा। DATETIME अब स्वरूपित स्ट्रिंग के रूप में संग्रहीत है) इसलिए कुछ खोज परेशान हो जाती हैं। इससे मुझे यह चुनने पर अधिक नियंत्रण मिलता है कि उपयोगकर्ता सार्वजनिक रूप से प्रदर्शित कौन से गुणों को चुनता है।
क्या एक संकर दृष्टिकोण बेहतर होगा कि मैं दोनों तरीकों के फायदे और नुकसान को संतुलित कर सकूं? एसओ किस विधि का उपयोग करता है? क्या इस पर कोई और दृष्टिकोण है कि मैंने सोचा या याद नहीं किया है?
एक्सटेंशन: एक संकर दृष्टिकोण के साथ यह भी user_profile तालिका में उपयोगकर्ता मेज से गुण सम्मिलित करने के लिए अन्य उपयोगकर्ताओं के लिए उनकी दृश्यता को नियंत्रित करने के लाभप्रद होगा या कि संभवतः अतिरिक्त भूमि के ऊपर के रूप में देखा जा सकता है?
यह मुझे मारता है कि (और अगर मैं गलत हूं तो मुझे सही करें) कि यह दृष्टिकोण 'टेबल ब्लोट' के समय के अधीन होगा, जिसमें विभिन्न कार्यक्षमताओं को जोड़ने के लिए डेटाबेस में कई तालिकाओं को जोड़ा जा रहा है? –
मुझे यकीन नहीं है कि टेबल ब्लोट वास्तव में एक समस्या है। यदि आपके पास 1000 फीचर पॉइंट्स के साथ एक एप्लीकेशन है लेकिन केवल 5 टेबल हैं, तो मैं टेबल के सामान्यीकरण के बारे में बहुत संदेहजनक हूं। मार्टिन फाउलर यहां टेबल मॉड्यूल डिज़ाइन पैटर्न पर चर्चा करता है: http://martinfowler.com/eaaCatalog/tableModule.html – DavGarcia