2010-07-07 16 views
9

मैं कुछ समय के लिए हमारी कुछ परियोजनाओं के लिए एक अच्छा नोएसक्यूएल डेटाबेस ढूंढ रहा हूं और मैंने हाल ही में रावेनडीबी की खोज की है जो एक .NET समर्थन परिप्रेक्ष्य से बहुत बढ़िया दिखता है, इसलिए मैंने इसे थोड़ा सा बेंचमार्क लिखने और लिखने का फैसला किया। व्यवसाय का पहला डालने की गति का परीक्षण किया गया था, निम्नलिखित कोड का उपयोग कर:रावेनडीबी से मुझे किस स्तर के प्रदर्शन की उम्मीद करनी चाहिए?

class Program 
{ 
    private const int TEST_COUNT = 10000; 
    static void Main(string[] args) 
    { 

     var store = new DocumentStore(); 
     store.Url = "http://localhost:8117"; 
     store.Initialize(); 

     var timer = Stopwatch.StartNew(); 
     var session = store.OpenSession(); 
     for (var i = 0; i < TEST_COUNT; i++) 
     { 
      session.Store(new TestEntity() 
      { 
       Name = "Test Entity" 
      }); 

      if (i % 127 == 0) 
      { 
       session.SaveChanges(); 
       session.Dispose(); 
       session = store.OpenSession(); 
      } 
     } 

     session.SaveChanges(); 
     session.Dispose(); 
     timer.Stop(); 

     Console.WriteLine("Processed {0:n0} records", TEST_COUNT); 
     Console.WriteLine("Time elapsed: {0:n0} ms", timer.ElapsedMilliseconds); 
     Console.WriteLine("Records/sec: {0:n0}", TEST_COUNT/(timer.ElapsedMilliseconds/1000d)); 
    } 
} 

class TestEntity 
{ 
    public string Name { get; set; } 
    public DateTime Created { get; set; } 

    public TestEntity() 
    { 
     Created = DateTime.UtcNow; 
    } 
} 

उत्पादन इस प्रकार है के रूप में:

Processed 10,000 records 
Time elapsed: 9,531 ms 
Records/sec: 1,049 
Press any key to continue . . . 

यह एक अपेक्षाकृत तेजी से मशीन पर है (3ghz, 2GB RAM विंडोज 7 चल रहा है)

मुझे पागल कहो, लेकिन 1000 आवेषण/सेक बहुत धीमी है, खासतौर पर उन दस्तावेज़ों के लिए जिनमें केवल दो फ़ील्ड हैं। क्या इसकी उम्मीद की जानी चाहिए थी? मुझे पता है कि रावेनडीबी को पढ़ने के लिए अनुकूलित किया गया है, लिखता नहीं है, लेकिन यह बहुत बुरा है।

+0

क्या आपने गर्म अवधि की अनुमति दी, जैसे कि जेआईटी और अन्य स्टार्टअप गतिविधियों को बाहर निकाला गया? –

उत्तर

9

मुझे नहीं पता कि आप "पढ़ने के लिए अनुकूलित, लिखने के लिए अनुकूलित" चीज़ के मुकाबले ज्यादा तेज़ी से नहीं जा रहे हैं।

  • बैच लिखते हैं (जो आप कर रहे हैं):

    लेकिन अगर आप this thread के माध्यम से पढ़ने वहाँ कुछ सुझाव हैं। मुझे यकीन है कि आप बंद करने के लिए और उसके बाद सत्र हालांकि फिर से खोलने की जरूरत नहीं कर रहा हूँ, तो आप सिर्फ कई धागे से कॉल करने के लिए SaveChanges()

  • आलसी (Raven/TransactionMode)
  • के लेन-देन मोड सेट करें एसिंक्रोनस रूप से आयात करते हैं, यानी सक्षम होना चाहिए

एक अन्य बात यह है कि आप की कोशिश कर सकते embedded mode, यानी

var documentStore = new DocumentStore { DataDirectory = "path/to/database/directory" }; 
documentStore.Initialize(); 

यह HTTP यातायात बाईपास और दस्तावेज़ों को सीधे सम्मिलित करता है करने के लिए अपने सत्र बदल रहा है, the docs देखने के लिए और जानकारी।

+0

मैंने इन सभी को आजमाया और प्रदर्शन लाभ उल्लेखनीय नहीं था। मुझे लगता है कि RavenDB मेरे उपयोग परिदृश्यों के लिए बहुत धीमा है (भारी लिखें)। मैं आपको वैसे भी जवाब दूंगा, लेकिन इस बिंदु पर मुद्दा अनजान है। – Chris

+0

आप इसे RavenDB मेलिंग सूची http://groups.google.com/group/ravendb/ पर पोस्ट करना चाहेंगे। मैं एक रावेनडीबी विशेषज्ञ से बहुत दूर हूं ताकि आपको बेहतर उत्तर मिल सके। –

+6

2011 में पहले भारी परिदृश्य लिखने के लिए कुछ प्रदर्शन ट्यूनिंग किया गया था। आपको शायद बेहतर परिणाम मिलेंगे। –

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