मैं एक 7.4Gb csv फ़ाइल मिल गया है। उत्पादन एक python script के साथ एक SQLite डेटाबेस के लिए परिवर्तित करने के बाद डीबी 4.7GB, मूल आकार के लगभग 60% है।क्या sqlite3 संपीड़ित डेटा है?
सीएसवी के आसपास 150,000,000 पंक्तियां हैं। यह शीर्ष लेख है:
tkey,ipaddr,healthtime,numconnections,policystatus,activityflag
और प्रत्येक पंक्ति की तरह
261846,172.10.28.15,2012-02-03 16:15:00,22,1,1
दिखता स्क्रिप्ट healthtime का उपयोग करता तालिकाओं में डेटा को विभाजित 192 टेबल
जब मैं पहली बार इन नंबरों को देखा तो मुझे लगता है मैं ग्रहण करने के लिए किसी जगह में एक त्रुटि हुई थी। मैं केवल healthtime लेखन के बजाय 192 बार 150,000,000 बार का अतिरिक्त क्षमता से फ़ाइल आकार में कमी का कितना बड़ा उम्मीद करनी चाहिए?
संपादित करें: जैसे ही मैंने इसे पोस्ट किया, मुझे जवाब का एहसास हुआ। मैं लगभग 40% स्ट्रिंग को हटा रहा हूं, इसलिए आकार में 40% की कमी।
संपादित 2 चलो सादा पाठ के बीच आकार में अंतर की गणना:
"261846,172.10.28.15,2012-02-03 16:15:00,22,1,1"
और डेटा बेस प्रविष्टि:
db(261846,'172.10.28.15',22,1,1)
सबसे पहले, हम 46 से 26 वर्ण से ड्रॉप सादा पाठ प्रतिनिधित्व में।
शेष वर्ण हैं:
"261846,172.10.28.15,22,1,1"
या 26 बाइट्स। प्रत्येक पूर्णांक 32 बिट (4 बाइट्स) में रखने की ज़रूरत हो, तो हम हैं:
12 बाइट (ipaddr) 4 बाइट्स * 4 (पूर्णांक क्षेत्रों) = 28 बाइट्स।
तो ऐसा लगता है कि पूर्णांक में कनवर्ट करने से स्टोरेज थोड़ा कम कुशल हो जाता है, और मेरे सभी लाभ प्रत्येक पंक्ति में संग्रहीत वर्णों की संख्या को कम करने के रूप में आते हैं।
स्पष्ट रूप से एसक्लाइट एक बाइनरी प्रारूप है, जबकि सीएसवी टेक्स्ट है। उसमें 60% आकार का अंतर हो सकता है। –
क्षमा करें, स्वास्थ्य का समय क्या है? एक त्वरित Google खोज कुछ भी चालू नहीं हुआ। –
स्वास्थ्य समय सिर्फ क्षेत्र का नाम है। – Maus