2012-05-30 11 views
16

मैं एक 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 बाइट्स।

तो ऐसा लगता है कि पूर्णांक में कनवर्ट करने से स्टोरेज थोड़ा कम कुशल हो जाता है, और मेरे सभी लाभ प्रत्येक पंक्ति में संग्रहीत वर्णों की संख्या को कम करने के रूप में आते हैं।

+6

स्पष्ट रूप से एसक्लाइट एक बाइनरी प्रारूप है, जबकि सीएसवी टेक्स्ट है। उसमें 60% आकार का अंतर हो सकता है। –

+1

क्षमा करें, स्वास्थ्य का समय क्या है? एक त्वरित Google खोज कुछ भी चालू नहीं हुआ। –

+0

स्वास्थ्य समय सिर्फ क्षेत्र का नाम है। – Maus

उत्तर

23

SQLite एक संपीड़न एल्गोरिथ्म नहीं चल रहा है, लेकिन यह एक पाठ फ़ाइल के बजाय एक बाइनरी फ़ाइल में डेटा स्टोर होगा। जिसका अर्थ यह है कि डेटा को अधिक कुशलतापूर्वक संग्रहीत किया जा सकता है, उदाहरण के लिए 32-बिट (4 बाइट) संख्या का उपयोग करके 10,000,000 का प्रतिनिधित्व करने के बजाय इसे 8 बाइट टेक्स्ट (या यदि फ़ाइल यूनिकोड है) के रूप में संग्रहीत करने के बजाय।

यहाँ अगर आप रुचि रखते हैं SQL Database File Format बारे में अधिक जानकारी नहीं है।

क्या यह समझ में आता है?

+4

यह इंगित करने योग्य है कि SQLite केवल आवश्यकतानुसार कई बाइट्स का उपयोग करता है। उदाहरण के लिए मान 7 को केवल एक बाइट की आवश्यकता है। –

+2

मूल्य 7 को दो बाइट्स की आवश्यकता होती है: एक सीरियल प्रकार वैरिंट जो इस मामले में एक बाइट लंबा होगा, और यह मान जो इस मामले में एक बाइट होगा। सीरियल प्रकार डेटाबेस में प्रत्येक मान के लिए मौजूद है, यह नल और संख्याओं के लिए एक बाइट है, और ब्लॉब्स और टेक्स्ट के लिए 9 बाइट्स तक एक चर लंबाई है। इसलिए, उदाहरण के लिए, 32-बिट लंबा पूर्णांक 5 बाइट लेता है, 64-बिट फ्लोट 9 बाइट्स है क्योंकि दोनों मामलों में इसमें एक-बाइट सीरियल प्रकार होता है। – thomasrutter

17

डिफ़ॉल्ट रूप से SQLite, डिस्क पर लिखने वाले डेटा को संपीड़ित नहीं करता है; हालांकि, SQLite के पास और अन्य उद्देश्यों के लिए "मालिकाना एक्सटेंशन" का एक सेट है। निम्नानुसार लिंक में ZIPVFS देखें।

http://www.sqlite.org/support.html और http://www.hwaci.com/sw/sqlite/prosupport.html

आप पूर्णांक के रूप में क्षेत्रों एन्कोडिंग द्वारा "संपीड़न" आपके डेटा में का एक बहुत प्राप्त कर सकते हैं। उदाहरण के लिए एक आईपी पता एक शब्द (4 बाइट्स) में फिट करने के लिए इंजीनियर किया गया था।पते के प्रत्येक ऑक्टेट को एक शब्द के एक बाइट में दर्शाया जा सकता है।

string[] octets = '172.168.0.1'.split('.') 
int ip = atoi(octets[0]) << 24 
ip |= atoi(octets[1]) << 16 
ip |= atoi(octets[2]) << 8 
ip |= atoi(octets[3]) 

इसके अतिरिक्त, आपका टाइमस्टैम्प यूनिक्स समय में प्रदर्शित किया जा सकता है, जो युग के बाद से सेकंड की संख्या है।

UPDATE mytable SET healthtime = CAST(strftime('%s',healthtime) AS INTEGER); 

See the Date and Time functions

नोट ऊपर एसक्यूएल में CAST निर्देश: SQLite एक स्तंभ पर प्रकार लागू नहीं करता है, तो आप एक स्ट्रिंग के रूप में जमा अंक के एक समूह हो सकता है; अपने क्षेत्र के आकार को आवश्यक से अधिक बढ़ाएं (यह कुछ प्रश्नों को अजीब तरीके से व्यवहार करेगा)।

एक और बात: फ़ील्ड का आकार कहानी का एकमात्र हिस्सा नहीं है। याद रखें कि इंडेक्स एक स्थान भी लेते हैं, और पूर्णांक पर इंडेक्स अधिक कुशल होते हैं - डिस्क आकार और प्रदर्शन की शर्तें।

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