उपयोगकर्ता इवेंट डेटा संग्रहीत करने के लिए उचित तकनीक


12

जब मैं डेटाबेस डिजाइनों की बात करता हूं तो मैं ज्यादातर स्व-सिखाया जाता हूं। मैं इस प्रश्न को प्रस्तुत कर रहा हूं क्योंकि मैं इस सामान्य संरचना पर बस गया हूं, लेकिन सोच रहा हूं कि क्या यह सबसे कुशल या 'उद्योग मानक' विधि है।

मेरे द्वारा डिज़ाइन किए गए अधिकांश डेटाबेस में एक उपयोगकर्ता तालिका है, और फिर एक व्यक्ति की गतिविधि को अन्य तालिका में ट्रैक किया जाता है। मैं समझता हूं कि डेटाबेस की सुंदरता में इस प्रकार की प्रभावकारिताएं हैं, लेकिन गतिविधि तालिका नियमित रूप से इसका उपयोग करने वाले प्रत्येक उपयोगकर्ता से बहुत जल्दी बहुत सारी घटनाओं को इकट्ठा करेगी, इस प्रकार मध्यम उपयोगकर्ता के उपयोग के साथ एक बड़ी तालिका बन जाती है। क्या यह इस तरह से विकसित होने के लिए सबसे अच्छा अभ्यास है? या तालिकाओं का एक समूह है, या तारीखों के आधार पर अलग-अलग तालिकाओं में विभाजित है, या उपयोगकर्ताओं की प्रति राशि, या कुछ और है?

+--------------------+                   +------------------------+
|   UserData         |                   |   Activity             |
+-=------------------+                   +------------------------+
| ID     (auto uint) | <--1-to-many-+    | ID  (auto uint)        |
| UserName (text)    |              +--> | UserID (uint)          |
| Email    (text)    |                   | Timestamp (time)       |
| additional info... |                   | Type (ID to elsewhere) |
+--------------------+                   | additional info...     | 
                                         +------------------------+

मैं सिर्फ यह जानना चाहूंगा कि मैं कुछ भी सुधार सकता हूं, जैसे कि मुझे सीखने में मदद करना।

जवाबों:


5

या तालिकाओं का एक समूह है, या तारीखों के आधार पर अलग-अलग तालिकाओं में विभाजित है, या उपयोगकर्ताओं की प्रति राशि, या कुछ और है?

आप अपने डेटाबेस में 'विभाजन' की अवधारणा को देखना चाह सकते हैं। अधिकांश RDBMSes के पास उनके लिए कुछ समर्थन है (उदाहरण के लिए, mysql , oracle , sql server , postgresql )। असल में, आप RDBMS को इस तथ्य को बनाने / प्रबंधित करने की प्रक्रिया को संभालने देते हैं कि प्रत्येक माह / वर्ष / जो कुछ भी एक अलग तालिका में संग्रहीत है, जबकि इसे एक्सेस करने वाला कोड इसे एक बड़ी तालिका के रूप में मानता है।

आप इसे उपयोगकर्ता नाम, दिनांक, या जो कुछ भी उपयोग करने जा रहे हैं, डेटा का उपयोग करने के लिए सबसे अधिक बार कर सकते हैं। (इसे उपयोगकर्ता-केंद्रित बनाम दिनांक-केंद्रित बनाने के फायदे / नुकसान हैं ... लेकिन मुझे नहीं पता कि क्या आप चाहते हैं कि मैं बिल्कुल जाऊं)


धन्यवाद @Joe, मैंने इसे विकिपीडिया ( en.wikipedia.org/wiki/Partition_%28database%29 ) और आपके द्वारा पोस्ट किए गए कुछ लिंक पर पढ़ा । आप जिस प्रकार के विभाजन का उल्लेख करेंगे, वह क्षैतिज विभाजन होगा। यह एक ऐसी विशेषता है जिसका मुझे अब तक पता नहीं था। अब मैं एक नया प्रश्न प्रस्तुत करूंगा : dba.stackexchange.com/questions/4134/… जो उचित विभाजन अभ्यास पूछता है।
सेंटरऑर्बिट

6

आपने बहुत अच्छा अवलोकन किया है। गतिविधि तालिका तेजी से और बड़े बढ़ेगा। मैंने अतीत में जो भी किया है, वह पुराने डेटा (14 दिनों से अधिक पुराने) को एक एक्टिविस्टेरॉन टेबल पर संग्रहीत करना है । ऐसा करने से गतिविधि तालिका एक प्रबंधनीय आकार में रहती है और यदि आपको अनुसंधान करने की आवश्यकता है, तो आप हमेशा गतिविधिहिस्टर टेबल पर वापस देख सकते हैं ।


1
मुझे आपका विचार पसंद है, और यह एक समाधान है जो लगभग किसी भी डेटाबेस सेटअप को फिट करेगा जो @Joe समाधान का समर्थन नहीं करता है। फिर भी इसमें शामिल कुछ प्रश्नों को जटिल किया जाएगा यदि आपको पुराने संग्रहीत डेटा तक पहुंचने और यूनियन में शामिल होने की आवश्यकता पैदा करनी है। हालांकि, मैं इस दृष्टिकोण के बारे में नहीं सोचता था। धन्यवाद।
सेंटरऑर्बिट

यह आवश्यक रूप से जटिल नहीं है, आप डेटा के पुराने होने के मामले में इतिहास db को चुनने के लिए ऐप से कनेक्शन स्ट्रिंग्स के साथ खेल सकते हैं .. या आप प्रक्रियाओं में लिंक किए गए सर्वर का उपयोग कर सकते हैं, और मामले में कुछ डेटाटाइम x से पुराना है दिन, मुख्य सर्वर के बजाय आर्काइव लिंक्ड सर्वर पर जाएं।
मैरियन

अगर संग्रह एक ही डेटाबेस में है तो यह और भी कम जटिल है।
माइकल रिले - AKA Gunny
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.