2012-01-30 14 views
10

मैं इकाई परीक्षण के लिए इन-मेमोरी मोड में RavenDB का उपयोग कर रहा हूं। मेरे प्रश्न स्थिर सूचकांक द्वारा समर्थित हैं। मैं WaitForNonStaleResults() एपीआई का उपयोग नहीं कर रहा हूं (न ही मैं चाहता हूं)।परीक्षण के दौरान स्टेल इंडेक्स को कैसे संभाला जाना चाहिए?

एक परीक्षण के लिए विशिष्ट कार्यप्रवाह है:

  1. आरंभ में मेमोरी मोड
  2. एकीकृत (क्वेरी व्यवहार की पुष्टि करने के लिए) IndexCreation.CreateIndexes(Assembly, IDocumentStore)
  3. परीक्षण सम्मिलित डेटा का उपयोग कर सूचकांकों में RavenDB
  4. भागो क्वेरी
  5. क्वेरी आउटपुट सत्यापित करें

मैंने देखा है कि चरण 1-3 इतनी जल्दी हो रहा है कि स्थिर सूचकांक में चरण 4 से पहले अपडेट होने का समय नहीं है - इसलिए इंडेक्स बेकार हैं।

मैंने इसके लिए एक त्वरित कार्य-निर्माण किया है। चरण 3 के बाद, मैं निष्पादित करें:

while (documentStore.DocumentDatabase.Statistics.StaleIndexes.Length != 0) 
    Thread.Sleep(10); 

यह बोझिल महसूस करता है। मैं क्या जानना चाहता हूं:

  • क्या इन-मेमोरी मोड में RavenDB चलाते समय इंडेक्स को बाँधना सामान्य है?
  • परीक्षण के दौरान बासी इंडेक्स से बचने का कोई बेहतर तरीका है?

उत्तर

14

इसे RavenDB usergroup पर क्रॉस-पोस्ट किया गया है और इसमें एक समाधान समाधान है।

क्या इन-मेमोरी मोड में RavenDB चलाते समय सूचकांक सामान्य होने के लिए सामान्य है?

हां। एक सूचकांक एक सूचकांक है।

परीक्षण के दौरान बासी इंडेक्स से बचने का कोई बेहतर तरीका है?

हां। एक Reduce => ... अनुभाग के साथConsistencyOptions.QueryYourWrites मानचित्र के साथ काम नहीं करता है/कम अनुक्रमित है, यानी अनुक्रमित: वैश्विक सम्मेलनों कॉन्फ़िगर जब दस्तावेज़ दुकान initialising:

var store = new EmbeddableDocumentStore(); 
store.RunInMemory = true; 
store.Conventions = new DocumentConvention 
{ 
    DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites 
}; 

store.Initialize(); 

नोट। इन के लिए आप जब क्वेरी करने

अद्यतन Customize(x => x.WaitForNonStale...()) उपयोग करने के लिए: वहाँ another approach है, जो बेहतर हो सकता है है (है व्यक्तिगत रूप से यह अभी तक की कोशिश की नहीं)। गैर-स्टेल परिणामों को वापस करने के लिए सभी प्रश्नों को मजबूर करने के लिए आप IDocumentQueryListener को कार्यान्वित कर सकते हैं:

var store = new EmbeddableDocumentStore { RunInMemory = true }; 
store.Initialize(); 

store.RegisterListener(new ForceNonStaleQueryListener()); 

public class ForceNonStaleQueryListener : IDocumentQueryListener 
{ 
    public void BeforeQueryExecuted(IDocumentQueryCustomization customization) 
    { 
     queryCustomization.WaitForNonStaleResults(); 
    } 
} 
+0

@MattWarren धन्यवाद, मैट। जानना उपयोगी है। –

+0

श्रोता दृष्टिकोण वर्तमान RavenDB बिल्ड के साथ मान्य नहीं है। – nathanchere

+0

@ फेरेटेलिक एए मैं इसे नवीनतम निर्माण के साथ फिर से देखूंगा। –

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