कुछ हद तक संबंधित: libxml2 from javaडोक्स पार्सिंग से सैक्स पार्सिंग तेज क्यों है? और कैसे काम करता है?
हाँ, यह प्रश्न अपेक्षाकृत लंबी हवा वाली है - क्षमा करें। मैंने जितना संभव महसूस किया उतना घना रखा है। मैंने पूरी बात पढ़ने से पहले इसे देखना आसान बनाने के लिए प्रश्नों को बोल्ड किया।
सैक्स तेजी से डोम पार्स से क्यों पार्स करने की जाती है? एकमात्र चीज जिसके साथ मैं आ सकता हूं वह यह है कि w/sax आप शायद आने वाले डेटा के बहुमत को अनदेखा कर रहे हैं, और इस प्रकार एक्सएमएल के समय प्रसंस्करण भागों को बर्बाद नहीं कर रहे हैं जिनकी आपको परवाह नहीं है। IOW - w/SAX पार्स करने के बाद, आप मूल इनपुट को पुन: बना नहीं सकते हैं। यदि आपने अपना SAX पार्सर लिखा है, तो यह प्रत्येक xml नोड (और इस प्रकार मूल को फिर से बना सकता है) के लिए जिम्मेदार है, तो यह डोम की तुलना में तेज़ नहीं होगा?
कारण मैं पूछ रहा हूँ कि मैं और अधिक तेजी से XML दस्तावेज़ों पार्स करने के लिए कोशिश कर रहा हूँ है। मुझे पार्सिंग के बाद पूरे एक्सएमएल पेड़ तक पहुंच की आवश्यकता है। मैं तीसरे पक्ष की सेवाओं के लिए प्लग-इन लिखने के लिए एक मंच लिख रहा हूं, इसलिए मैं अनुमान नहीं लगा सकता कि एक्सएमएल दस्तावेज़ के कौन से हिस्सों की आवश्यकता होगी और कौन से हिस्से नहीं होंगे। मुझे आने वाले दस्तावेज़ की संरचना भी नहीं पता है। यही कारण है कि मैं जैक्सबी या सैक्स का उपयोग नहीं कर सकता। मेमोरी पदचिह्न मेरे लिए कोई मुद्दा नहीं है क्योंकि एक्सएमएल दस्तावेज छोटे हैं और मुझे एक समय में स्मृति में केवल 1 की आवश्यकता है। यह वह समय है जो मुझे अपेक्षाकृत छोटे एक्सएमएल दस्तावेज़ को पार्स करने के लिए लेता है जो मुझे मार रहा है। मैंने पहले स्टैक्स का उपयोग नहीं किया है, लेकिन शायद मुझे आगे की जांच करने की ज़रूरत है क्योंकि यह मध्य मैदान हो सकता है? यदि मैं सही ढंग से समझता हूं, तो स्थिर मूल XML संरचना को रखता है और उन हिस्सों को संसाधित करता है जिन्हें मैं मांग पर मांगता हूं? इस तरह, मूल पार्स समय जल्दी हो सकता है, लेकिन हर बार जब मैं इसे पेड़ के हिस्से को पार करने के लिए कहता हूं तो यह अभी तक नहीं चला है, जब प्रसंस्करण होता है?
आप एक लिंक है कि सवालों के अधिकांश का जवाब देता प्रदान करते हैं, मैं अपने जवाब को स्वीकार करेंगे (आप सीधे मेरे सवालों का जवाब अगर वे पहले से ही कहीं जवाब कर रहे हैं की जरूरत नहीं है)।
अद्यतन: मैं सैक्स में यह दुबारा लिखा और यह औसत 2.1 एमएस पर दस्तावेज़ों पार्स करता है। यह एक सुधार (16% तेजी से) 2.5 एमएस कि डोम ले रहा था खत्म हो गया है लेकिन यह परिमाण है कि मैं (एट अल) अनुमान लगाया गया है जाएगा
धन्यवाद
मैं कहूंगा कि जिस प्रश्न का तेज़ तेज़ है, वह आपके उद्देश्यों के लिए अप्रासंगिक है, क्योंकि आपको पेड़ के खिलाफ मनमाने ढंग से पूछताछ करने की आवश्यकता है। जिसका अर्थ है कि आपको पेड़ के कुछ प्रतिनिधित्व का निर्माण करना है, और इसके खिलाफ प्रश्न बनाने का कोई तरीका है। तो या तो आप डोम/XPath का उपयोग करते हैं, या आप अपने समकक्ष लिखते हैं। – Anon
मुझे संदेह है कि, आपका असली मुद्दा सैक्स बनाम डीओएम प्रति नहीं है, लेकिन आपका सिस्टम कैसे कॉन्फ़िगर किया गया है और/या आप डेटा तक कैसे पहुंच रहे हैं। इसे वास्तव में डोम (या डोम समकक्षों में से एक) का उपयोग करके "छोटे" दस्तावेज़ को पार्स करने में इतना लंबा समय नहीं लेना चाहिए। क्या आपने SAX और DOM के बीच अंतर (जिसे आप देख रहे हैं) को प्रमाणित किया है? – Anon
मैंने डीओएम दृष्टिकोण को प्रमाणित किया है। छोटे (लगभग 300k) xml दस्तावेज़। वर्तमान कार्यान्वयन xerces-j का उपयोग कर रहा है और 1.5 गीगाहर्ट्ज़ मशीन पर प्रति xml दस्तावेज़ में लगभग 2.5 एमएस लगता है। sax को मापने के लिए कुछ हद तक निर्भर है कि आप कितने एक्सएमएल को चुनने के लिए चुनते हैं और आप इसके साथ क्या करते हैं। आप सही हैं - मुझे नहीं लगता कि सैक्स मेरे लिए काम करेगा - प्रश्न जिज्ञासा से अधिक था। – andersonbd1