2010-09-13 18 views
7

से libxml2 यह प्रश्न कुछ हद तक Fastest XML parser for small, simple documents in Java से संबंधित है लेकिन कुछ और विशिष्टताओं के साथ।जावा

मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जिसमें कई (लाखों के लाखों), छोटे (लगभग 300k) xml दस्तावेज़ों को पार्स करने की आवश्यकता है। वर्तमान कार्यान्वयन xerces-j का उपयोग कर रहा है और 1.5 गीगाहर्ट्ज़ मशीन पर प्रति xml दस्तावेज़ में लगभग 2.5 एमएस लगता है। मैं इस प्रदर्शन में सुधार करना चाहता हूं। मैं इस लेख

http://www.xml.com/pub/a/2007/05/16/xml-parser-benchmarks-part-2.html

कि libxml2 का दावा तेजी से किसी भी जावा पारसर्स से परिमाण के एक आदेश के बारे में पार्स कर सकते हैं भर में आया था। मुझे यकीन नहीं है कि मुझे विश्वास है, लेकिन यह मेरा ध्यान पकड़ा। क्या किसी ने jvm से libxml2 का उपयोग करने का प्रयास किया है? यदि हां, तो क्या यह जावा डोम पार्सिंग (xerces) से तेज है? मुझे लगता है कि मुझे अभी भी अपनी जावा डोम संरचना की आवश्यकता होगी, लेकिन मुझे लगता है कि एक सी-संरचित डोम से जावा-डोम में कॉपी करने में लंबा समय नहीं लगना चाहिए। मेरे पास जावा-डोम होना चाहिए - एसएक्स इस मामले में मेरी मदद नहीं करेगा।

अद्यतन: मैंने अभी libxml2 के लिए एक परीक्षण लिखा है और यह xerces से कोई तेज़ नहीं था ... मेरी सी कोडिंग क्षमता बेहद जंगली है।

अद्यतन मैं थोड़ा यहाँ सवाल चौड़ी: why is sax parsing faster than dom parsing ? and how does stax work? और डोम खुदाई की संभावना के लिए खुला रहा हूँ।

धन्यवाद

उत्तर

0

सबसे पहले, अपने प्रश्न में एक प्रश्न शामिल नहीं है। तुम क्या जानना चाहते हो?

मुझे लगता है कि आप सी-डोम को जावा-डोम में परिवर्तित करने के लिए जेएनआई का उपयोग कर रहे थे। मुझे नहीं पता कि आधिकारिक संख्याएं हैं, लेकिन मेरे अनुभव में सी + जेएनआई अक्सर जावा में इसे करने से धीमा है।

यदि आप वास्तव में अपनी प्रसंस्करण को तेज करना चाहते हैं, तो डोम से छुटकारा पाने का प्रयास करें (आपको इसकी आवश्यकता क्यों है? शायद हम एक समाधान के बारे में सोच सकते हैं)। यदि सभी एक्सएमएल फाइलों में एक ही स्कीमा है, तो अपने स्वयं के विशेष डेटा मॉडल (और एक SAX पार्सर) का उपयोग करें।

यदि आप केवल एक्सएमएल (यानी नामस्थानों के बिना, केवल कुछ विशेषताओं) का सबसेट उपयोग करते हैं, तो अपने स्वयं के पार्सर को लिखने पर विचार करें जो सीधे अधिक कुशल जावा ऑब्जेक्ट्स उत्पन्न करता है (लेकिन मैं इसकी अनुशंसा नहीं करता)।

+0

मैं बोल्ड और प्रश्न चिह्न गयी। डीओएम को हटाने के संबंध में - मैं नहीं कर सकता और मुझे समझाने में कोई दिलचस्पी नहीं है। – andersonbd1

+0

आपके इनपुट के लिए धन्यवाद। मैंने अपना मन बदल लिया है। मैं डोम डालने के लिए खुला हूं अगर मैं कर रहा हूं और जो कुछ भी कर रहा हूं उसके बारे में और समझाता हूं।मैंने यहां एक नया प्रश्न बनाया: http://stackoverflow.com/questions/3825206/why-is-sax-parsing-faster-than-dom-parsing-and-how-does-stax-work – andersonbd1

2

जावा में, StAX JSR-173 को आम तौर पर XML को पार्स करने का सबसे तेज़ तरीका माना जाता है। StAX के कई कार्यान्वयन हैं, Woodstox कार्यान्वयन को आमतौर पर तेज़ माना जाता है।

प्रदर्शन में सुधार करने के लिए मैं डोम से बचूंगा। आप एक्सएमएल के साथ क्या कर रहे हैं? यदि आप अंततः वस्तुओं के रूप में इसके साथ काम कर रहे हैं, तो आपको एक ओएक्सएम समाधान पर विचार करना चाहिए। मानक जेएक्सबी JSR-222 है। JAXB कार्यान्वयन ऐसे MOXy (मैं तकनीक का नेतृत्व कर रहा हूँ) आपको एक आंशिक मानचित्रण जो प्रदर्शन में सुधार होगा करने की अनुमति देगा के रूप में:

+0

कुचलने के संबंध में डोम - मैं नहीं कर सकता और मुझे समझाने में दिलचस्पी नहीं है क्यों। – andersonbd1

+0

आपके इनपुट के लिए धन्यवाद। मैंने अपना मन बदल लिया है। मैं डोम डालने के लिए खुला हूं अगर मैं कर रहा हूं और जो कुछ भी कर रहा हूं उसके बारे में और समझाता हूं। मैंने यहां एक नया प्रश्न बनाया: http://stackoverflow.com/questions/3825206/why-is-sax-parsing-faster-than-dom-parsing-and-how-does-stax-work – andersonbd1