2010-06-01 17 views
17

संभव डुप्लिकेट:
datetime vs timestamp?यूनिक्स datetime वी.एस. टाइमस्टैम्प

मैं ने MySQL तालिका है, जो एक स्तंभ add_date है की है। जब डेटाबेस में रिकॉर्ड जोड़ा गया था तो यह दिनांक/समय ट्रैक करता है।

प्रश्नों इस तालिका के आधार पर:

  1. प्रदर्शन जब रिकॉर्ड प्रारूप में जोड़ा गया है: 2 घंटे पहले, 4 सप्ताह पहले, 1 साल पहले आदि
  2. उपयोगकर्ताओं को किसी भी दिन में डाला रिकॉर्ड खोज करने के लिए अनुमति दें /महीना वर्ष। तो उपयोगकर्ता को केवल 200 9 में दर्ज रिकॉर्ड्स को देखने का चयन करने की अनुमति दी जा सकती है।

जो इस मामले में बेहतर होगा - यूनिक्स टाइमस्टैम्प या डेटाटाइम?

अभी मैं दोनों का उपयोग कर रहा हूं, लेकिन चूंकि तालिका में समय के साथ लाखों रिकॉर्ड होंगे, दोनों कॉलम डेटाबेस के आकार को प्रभावित कर सकते हैं।

यूनिक्स टाइमस्टैम्प 2 hours रूपांतरण में PHP के प्रारूप में रूपांतरण के लिए बेहतर प्रतीत होता है और यह समय-समय पर स्वतंत्र है। लेकिन डेटाटाइम में बेहतर पठनीयता है और किसी विशेष दिनांक/समय/वर्ष के लिए क्वेरी बनाना आसान लगता है।

आपका सुझाव?

उत्तर

14

जब आपके पास विकल्प होता है, तो मैं कहूंगा कि मेरी एसक्यूएल तिथियों के लिए जाना है।

  • आप date range issue रों

  • आप आसानी से समय क्वेरी कर सकता है की देखभाल लिए MySQL की तारीख कार्य (BETWEEN(), DATE_ADD आदि)

  • तिथि संबंधित प्रश्नों का उपयोग कर spans बहुत तेजी से हो जाएगा नहीं होगा , विशेष रूप से आप रिकॉर्ड के लाखों लोगों की है जब, क्योंकि आप FROM_UNIXTIME() का उपयोग करने के लिए नहीं होगा बड़े प्रश्नों में महंगा हो सकता है जो

  • यह ची है जब आवश्यक हो तो DATE फ़ील्ड को यूनिक्स टाइमस्टैम्प में परिवर्तित करने के लिए एलडी का खेल।

+2

यह। यदि आप php end पर टाइमस्टैंप के साथ खेलना चाहते हैं तो बस UNIX_TIMESTAMP (your_column) का उपयोग करें। लेकिन अपने डेटाबेस में, तिथियों को संग्रहीत करने के लिए मूल दिनांक प्रकार का उपयोग करें। इसके अलावा, आपके डेटाबेस में डेटा अन्य अनुप्रयोगों द्वारा उपयोग किया जा सकता है जो टाइमस्टैम्प की तुलना में एसक्यूएल दिनांक प्रारूप पसंद कर सकते हैं। – Arkh

+0

क्या टाइमज़ोन के संबंध में यूनिक्स टाइमस्टैम्प में तारीख को परिवर्तित करने में कोई समस्या होगी? – Yeti

+1

@Lost_in_code वास्तव में अच्छा सवाल है। इसमें कई कारक शामिल हैं, MySQL सर्वर की टाइमज़ोन सेटिंग, और सिस्टम की टाइमज़ोन सेटिंग जो PHP डिफ़ॉल्ट रूप से उपयोग करेगी। आम तौर पर, MySQL DATETIME फ़ील्ड टाइमज़ोन असंवेदनशील होते हैं। जब तक आप वहां यूटीसी तिथियों को स्टोर करते हैं, तो आप उन्हें आसानी से टाइमस्टैम्प में परिवर्तित करने में सक्षम होना चाहिए, लेकिन सावधान रहें यदि mySQL और/या PHP में यूटीसी से समय क्षेत्र अलग हैं। संबंधित: http://stackoverflow.com/questions/18449/dealing-with-php-server-and-mysql-server-in- अलग-समय- ज़ोन –

4

मैं mysql प्रारूपों के लिए जाना चाहूंगा, सिर्फ इसलिए कि mysql में बहुत से डेटाटाइम फ़ंक्शन हैं, जिसका उपयोग करने के लिए टाइमस्टैम्प के साथ आपको एक और रूपांतरण होगा।

लेकिन जब से तालिका समय के साथ लाखों लोगों की रिकॉर्ड की होगा, दोनों कॉलम डेटाबेस के आकार को प्रभावित कर सकता है।

ओह मेरा।
क्या आप वास्तव में 4 अतिरिक्त मेगाबाइट्स स्पेस में चिंतित हैं?

+0

मुझे वास्तव में पता नहीं है कि कितना स्थान लेगा (मैं बड़े डेटाबेस में नया हूं)। यदि आप कहते हैं कि यह सिर्फ एमबी के कुछ होने वाला है तो मुझे दोनों में कोई समस्या नहीं दिख रही है। – Yeti

+0

यदि आप संख्या को नहीं मानते हैं, तो आपको इसका जिक्र नहीं करना चाहिए। कोई प्रोग्रामर कभी अनुमान लगाया जाना चाहिए। यह मौसम पूर्वानुमानियों का काम है। http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html आपको बताएगा कि डेटाटाइम 8 बाइट्स लेता है और टाइमस्टैम्प के लिए int - 4. इसलिए, 4 * 1000000 = 4 एमबी –

+1

से कम आप ' शायद दोनों क्षेत्रों में भी एक सूचकांक का उपयोग करना चाहते हैं। यह बहुत महंगा नहीं है, लेकिन यदि आप एकाधिक फ़ील्ड इंडेक्स का उपयोग कर रहे हैं तो यह आपके प्रदर्शन को प्रभावित कर सकता है। – Kaivosukeltaja

3

आप एक यूनिक्स टाइमस्टैम्प और MySQL from_unixtime() फ़ंक्शन का उपयोग कर दोनों दुनिया के सर्वश्रेष्ठ प्राप्त कर सकते हैं ताकि परिणाम को डेटाटाइम प्रारूप में परिवर्तित कर सकें।

+1

आप डेटाटाइम का उपयोग करके और आवश्यकतानुसार यूनिक्स टाइमस्टैम्प में कनवर्ट करने के लिए डेट फ़ंक्शंस का उपयोग करके दोनों दुनिया के सर्वश्रेष्ठ भी प्राप्त कर सकते हैं। यह देखते हुए कि डेटाटाइम डेटा प्रकारों का उपयोग करके कई प्रश्न आसान हो जाते हैं, मैं कहूंगा कि इस तरह से जाना बेहतर है। –

+0

क्या एल योबो कहते हैं। संभावित प्रदर्शन हानि यह है कि मुझे बड़ी टेबलों में 'from_unixtime()' से दूर शर्मिंदा कर दिया जाएगा (हालांकि कोई बेंचमार्क नहीं है।) –

+0

बेशक से_unixtime() से उन प्रश्नों पर उपयोग नहीं किया जाना चाहिए जिनकी अपेक्षा बड़ी मात्रा में होती है डेटा, केवल वे परिणाम जो परिणाम सेट लौटाते हैं जिन्हें प्रदर्शित किया जाना है। साथ ही, unix_timestamp ('2010-06-01 13:00') के साथ प्रश्नों को और अधिक पठनीय बनाने के लिए डेटाटाइम प्रकारों का उपयोग अभी भी किया जा सकता है। रूपांतरण प्रति प्रश्न केवल एक बार किया जाता है इसलिए कोई प्रदर्शन हानि नहीं होती है। – Kaivosukeltaja

संबंधित मुद्दे