2012-08-30 18 views
10

आधिकारिक साइट OrientDB का कहना है:OrientDB धीमी गति से लिखने

आम हार्डवेयर स्टोर पर 150.000 अप करने के लिए प्रति सेकंड दस्तावेजों, प्रतिदिन दस्तावेजों के 10 अरबों। बिग ग्राफ कुछ मिलीसेकंड में भरोसेमंद जॉइन जैसे रिलेशनल डीबीएमएस के निष्पादित किए बिना लोड किए गए हैं।

लेकिन, निम्नलिखित कोड निष्पादित करने से पता चलता है कि यह 150000 सरल दस्तावेज़ों को सम्मिलित करने के लिए ~ 17000ms ले रहा है।

import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; 
import com.orientechnologies.orient.core.record.impl.ODocument; 

public final class OrientDBTrial { 

    public static void main(String[] args) { 
     ODatabaseDocumentTx db = new ODatabaseDocumentTx("remote:localhost/foo"); 
     try { 
      db.open("admin", "admin"); 

      long a = System.currentTimeMillis(); 
      for (int i = 1; i < 150000; ++i) { 
       final ODocument foo = new ODocument("Foo"); 
       foo.field("code", i); 
       foo.save(); 
      } 
      long b = System.currentTimeMillis(); 
      System.out.println(b - a + "ms"); 

      for (ODocument doc : db.browseClass("Foo")) { 
       doc.delete(); 
      } 
     } finally { 
      db.close(); 
     } 
    } 

} 

मेरे हार्डवेयर:

  • डेल Optiplex 780
  • इंटेल (आर) कोर (टीएम) 2 डुओ सीपीयू E7500 @ 2.93GHz
  • 8GB राम
  • विंडोज 7 64bits

मैं क्या गलत कर रहा हूं?

जावा के ओवरहेड को कम करने के लिए 10 समवर्ती धागे में सहेजते हुए इसे 13000ms में चलाया गया। OrientDB फ्रंट पेज के मुकाबले अभी भी धीमा है।

+0

क्या आप सबसे अधिक प्रदर्शन प्राप्त करने में सक्षम थे? मैं इस समस्या का अध्ययन करता हूं, लेकिन मेरा प्रदर्शन –

+0

से भी बदतर है I OrientDB के बजाय H2 का उपयोग करने का निर्णय लिया है। एच 2 मेरे उपयोग के मामले फिट बैठता है। –

उत्तर

3

आपको लगता है कि प्राप्त कर सकते हैं जावा में एक एम्बेडेड पुस्तकालय के रूप में 'फ्लैट डाटाबेस' और orientdb का उपयोग करके अधिक यहाँ http://code.google.com/p/orient/wiki/JavaAPI

समझाया क्या आप का उपयोग सर्वर मोड है और यह कई अनुरोधों को पहचानने सर्वर, orientdb के लिए भेजता है को देखने के आपके बेंचमार्क द्वारा आपको प्रति सेकंड ~ 10 000 आवेषण मिलते हैं जो खराब नहीं हैं, उदाहरण के लिए मुझे लगता है कि किसी भी वेबसर्वर (और ओरिएंटब सर्वर वास्तव में एक वेबसर्वर है और आप इसे http के माध्यम से पूछ सकते हैं, लेकिन 10 000 अनुरोध/एस बहुत अच्छा प्रदर्शन है) मुझे लगता है कि जावा बाइनरी मोड का उपयोग कर रहा है)

3

सर्वोत्तम प्रदर्शन को प्राप्त करने के तरीके पर पहले दस्तावेज़ पढ़ें!

कुछ टिप्स:

-> ODocument हमेशा का दृष्टांत नहीं है:

final ODocument doc; 
    for (...) { 
    doc.reset(); 
    doc.setClassName("Class"); 
    // Put data to fields 
    doc.save(); 
    } 

->System.currentTimeMillis() पर भरोसा नहीं करते - perf4j या इसी तरह के उपकरण का उपयोग बार को मापने के लिए है, क्योंकि पहली एक वैश्विक प्रणाली के समय को मापता है इसलिए आपके सिस्टम पर चल रहे सभी अन्य कार्यक्रमों का निष्पादन समय शामिल है!

+0

System.currentTimeMillis को स्टॉपवॉच के रूप में उपयोग करने के लिए इतने लंबे समय तक चलने वाले परीक्षण के लिए कोई समस्या नहीं है।बेशक आप मापने से पहले कुछ गर्मजोशी कर सकते हैं (और नैनोटाइम का उपयोग करें), लेकिन मुझे नहीं लगता कि परिणामस्वरूप आवर्धन के क्रम में परिवर्तन होता है। आप समय को हाथ-माप भी सकते हैं और यह मान्य होगा। – eckes

3

OrientDB साइट से संख्या एक स्थानीय डेटाबेस (कोई नेटवर्क भूमि के ऊपर के साथ) के लिए बेंचमार्क कर रहे हैं, इसलिए यदि आप एक दूरस्थ प्रोटोकॉल का उपयोग, कुछ देरी की उम्मीद है।

जैसा कि क्रिज़टियन ने बताया, यदि संभव हो तो वस्तुओं का पुन: उपयोग करें।

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