निश्चित रूप से, संख्या के रूप में आई पी पतों को बचाने के लिए यदि आप काम है कि यह लेता है की अतिरिक्त बिट कोई आपत्ति नहीं है, खासकर अगर आप उन पतों पर प्रश्नों करने की जरूरत है और आप बड़े टेबल/संग्रह।
भंडारण
- एक IPv4 पता 4 बाइट है अगर अहस्ताक्षरित पूर्णांक के रूप में जमा:
यहां इसका कारण बताया।
- बिंदीदार ऑक्टेटेड फॉर्म में स्ट्रिंग के रूप में लिखे जाने पर एक आईपीवी 4 पता 10 बाइट्स और 18 बाइट्स के बीच बदलता है। (आइए मान लें कि औसत 14 बाइट्स है।)
यह वर्णों के लिए 7-15 बाइट्स है, साथ ही 2-3 बाइट्स यदि आप एक परिवर्तनीय लंबाई स्ट्रिंग प्रकार का उपयोग कर रहे हैं, जो डेटाबेस पर आधारित भिन्न होता है, फिर से उपयोग कर रहे हैं। यदि आपके पास एक निश्चित लंबाई स्ट्रिंग प्रस्तुति उपलब्ध है, तो आपको 15-वर्णित निश्चित चौड़ाई फ़ील्ड का उपयोग करना होगा।
डिस्क संग्रहण सस्ता है, इसलिए यह अधिकांश उपयोग मामलों में कारक नहीं है। हालांकि, मेमोरी उतनी सस्ता नहीं है, और यदि आपके पास बड़ी टेबल/संग्रह है और आप तेज़ प्रश्न पूछना चाहते हैं, तो आपको एक इंडेक्स चाहिए। स्ट्रिंग एन्कोडिंग के 2-3x स्टोरेज पेनल्टी में इंडेक्स निवासी को स्मृति में रखते हुए आप रिकॉर्ड कर सकते हैं रिकॉर्ड की मात्रा को कम कर देता है।
- एक आईपीवी 6 पता 16 बाइट्स है जो एक हस्ताक्षरित पूर्णांक के रूप में संग्रहीत किया जाता है। (आपके प्लेटफ़ॉर्म के आधार पर, एकाधिक 4 या 8 बाइट पूर्णांक के रूप में।)
- संक्षिप्त आईएक्स नोटेशन में स्ट्रिंग के रूप में एन्कोड किए जाने पर एक आईपीवी 6 पता 6 बाइट से 42 बाइट तक होता है।
कम अंत में, एक लूप बैक पता (:: 1) 3 बाइट्स और चर लंबाई लंबाई स्ट्रिंग ओवरहेड है। उच्च अंत में, 2002:4559:1FE2:1FE2:4559:1FE2:4559:1FE2
जैसे पते 39 बाइट्स और परिवर्तनीय लंबाई स्ट्रिंग ओवरहेड का उपयोग करते हैं।
आईपीवी 4 के विपरीत, यह मानना सुरक्षित नहीं है कि औसत आईपीवी 6 स्ट्रिंग लंबाई 6 और 42 का मतलब होगी, क्योंकि लगातार ज़ीरो की एक बड़ी संख्या वाले पते की संख्या समग्र आईपीवी 6 पता स्थान का एक बहुत छोटा हिस्सा है।लूपबैक और ऑटोकॉन्फ पते जैसे कुछ विशेष पते, इस तरह से संपीड़ित होने की संभावना है।
फिर से, यह स्ट्रिंग एन्कोडिंग बनाम पूर्णांक एन्कोडिंग के लिए 2x का भंडारण जुर्माना है।
नेटवर्क मठ
आप तारों के रूप में लगता है रूटर दुकान IP पते है? बेशक वे नहीं करते हैं।
यदि आपको आईपी पते पर नेटवर्क गणित करने की आवश्यकता है, तो स्ट्रिंग का प्रतिनिधित्व एक परेशानी है। जैसे यदि आप एक प्रश्न लिखना चाहते हैं जो एक विशिष्ट सबनेट पर सभी पते की खोज करता है ("10.7.200.104/27 में आईपी पते के साथ सभी रिकॉर्ड लौटाएं", तो आप एक पूर्णांक सबनेट मास्क के साथ एक पूर्णांक पते को मास्क करके आसानी से ऐसा कर सकते हैं। (मोंगो इस विशेष प्रश्न का समर्थन नहीं करता है, लेकिन अधिकांश आरडीबीएमएस करते हैं।) यदि आप तारों को तारों के रूप में संग्रहीत करते हैं, तो आपकी क्वेरी को प्रत्येक पंक्ति को एक पूर्णांक में परिवर्तित करने की आवश्यकता होगी, फिर इसे मुखौटा करें, जो परिमाण धीमी गति के कई आदेश हैं। (बिटवाई मास्किंग एक आईपीवी 4 पते के लिए 2 रजिस्टरों का उपयोग करके कुछ सीपीयू चक्रों में किया जा सकता है। स्ट्रिंग को एक पूर्णांक में कनवर्ट करने के लिए स्ट्रिंग पर लूपिंग की आवश्यकता होती है।)
इसी तरह, रेंज क्वेरीज ("सभी रिकॉर्ड 1 9 2.168.1.50 और 1 9 2.168 के बीच रिकॉर्ड करें .50.100 ") पूर्णांक पते के साथ इंडेक्स का उपयोग करने में सक्षम होंगे, जबकि स्ट्रिंग पतों पर रेंज क्वेरी नहीं होगी।
बॉटम लाइन
यह बहुत थोड़ा और अधिक काम लेता है, लेकिन नहीं (देखते हैं एक लाख ATON() और ntoa() फ़ंक्शन वहाँ बाहर) है, लेकिन आप कुछ गंभीर और ठोस निर्माण कर रहे हैं, तो और आप भविष्य की आवश्यकताओं और बड़े डेटासेट की संभावना के मुकाबले इसे भविष्य में प्रमाणित करना चाहते हैं, आपको आईपी पते को पूर्णांक के रूप में स्टोर करना चाहिए, स्ट्रिंग नहीं।
यदि आप कुछ त्वरित और गंदे कर रहे हैं और भविष्य में रीमेडलिंग की संभावना को ध्यान में रखें, तो स्ट्रिंग का उपयोग करें।
ओपी के उद्देश्य के लिए, यदि आप गति और स्थान के लिए अनुकूलित कर रहे हैं और आपको नहीं लगता कि आप अक्सर पूछना चाहते हैं, तो डेटाबेस का उपयोग क्यों करें? बस एक फ़ाइल में आईपी पते मुद्रित करें। यह डेटाबेस में संग्रहीत करने से अधिक तेज़ और अधिक संग्रहण कुशल होगा (संबंधित एपीआई और स्टोरेज ओवरहेड के साथ)।
4 इंच आईपीवी 6 पते के लिए काम नहीं करेंगे। 4 अंक * स्ट्रिंग की तुलना में अधिक जगह नहीं ले पाएंगे। ईमानदारी से, आपको यह तय करना होगा कि स्रोत स्ट्रिंग या स्पेस लॉस से कनवर्ट करना अधिक महत्वपूर्ण है और उस पर आधारित निर्णय लेना है। – Joe
क्या आपको परिणामी संरचना से पूछताछ करने की आवश्यकता है? अगर यह अन्य डेटाबेस लेखन संचालन के साथ प्रतिस्पर्धा कर रहा है तो लॉगिंग के लिए मोंगोडीबी सबसे अच्छा विकल्प नहीं हो सकता है।विकल्पों का प्रयास करें और देखें कि वे कैसे प्रदर्शन करते हैं। संग्रह के लिए 'आंकड़े' देखें (http://docs.mongodb.org/manual/reference/collection-statistics/) यह देखने के लिए कि औसत दस्तावेज़ कितने बड़े हैं। आप कई छोटे व्यक्तिगत दस्तावेजों को लिखने के बजाय मेमोरी बफरिंग में कुछ भी करना चाह सकते हैं। – WiredPrairie
आपको स्ट्रिंग में कनवर्ट करना चाहिए और इसे स्टोर करना चाहिए। – Abhishek