2012-12-12 23 views
8

मैं कैसे जांचूं कि कोई अनुक्रमणिका मौजूद है या नहीं? - कॉल करने से पहले:रैवेनडीबी जांचें कि सूचकांक मौजूद है

IndexCreation.CreateIndexes(typeof(MyIndexClass).Assembly, documentStore); 

सभी उदाहरण मैंने देखा है (नमूना परियोजना में भी शामिल होते हैं) हर बार सूचकांक फिर से बनाया ग्राहक शुरू कर दिया है जो सही नहीं लगता था।

सामान्य रणनीति क्या है? ऐसा लगता है कि सामान्य सीआरयूडी ऑपरेशन है, फिर प्रशासनिक कमांड जैसे उपरोक्त इंडेक्सिंग एक है। क्या लोग सिर्फ एक कंसोल ऐप बनाते हैं जो व्यवस्थापक को करता है और मुख्य ऐप से अलग से तैनात/चलाता है?

+0

मुझे पता है कि यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन मुझे लगा कि यह उल्लेखनीय है कि RavenDB स्वचालित रूप से आपके लिए इंडेक्स बना देता है यदि आप इसे देते हैं। [यह रावेनडीबी दस्तावेज़ पृष्ठ] देखें (http://ravendb.net/docs/client-api/querying) और विशेष रूप से गतिशील अनुक्रमणिका के बारे में हिस्सा। – ean5533

+0

@ ean5533 - जो गतिशील अनुक्रमणिका पर लागू होता है, हां। मेरा मानना ​​है कि ओपी स्थिर सूचकांक के निर्माण के बारे में चिंतित है। स्पष्टीकरण के लिए –

उत्तर

18

आपको अस्तित्व की जांच करने की आवश्यकता नहीं है। सर्वर स्वचालित रूप से आपके द्वारा भेजी गई इंडेक्स परिभाषा की तुलना करेगा और यह देखने के लिए जांच करेगा कि यह पहले से मौजूद है या नहीं। यदि कोई एक ही नाम और परिभाषा के साथ मौजूद है, तो यह अकेला छोड़ दिया जाता है। यदि कोई एक ही नाम से मौजूद है, लेकिन परिभाषा बदल गई है, तो पुराना व्यक्ति गिरा दिया गया है और नया बनाया गया है।

आमतौर पर एप्लिकेशन स्टार्टअप पर उसी एप्लिकेशन में इंडेक्स बनाएगा। ग्लोबल.एक्सएक्स में होने वाले वेब ऐप्स के लिए, और कंसोल/डेस्कटॉप ऐप्स के लिए यह स्टार्टअप कोड का पहला हिस्सा होगा।

लेकिन कभी-कभी यह संभव नहीं है, जैसे कि आपके पास कई अलग-अलग डेटाबेस हैं, क्योंकि बहु-किरायेदार अनुप्रयोग अक्सर करते हैं। उन मामलों में, जब आप प्रत्येक किरायेदार डेटाबेस बनाते हैं तो आप इंडेक्स बनाते हैं, और जब आप संस्करण अपग्रेड करते हैं तो आपको अपडेट या अधिक अनुक्रमणिका बनाना पड़ सकता है।

इसके अलावा, मुझे यह उल्लेख करना चाहिए कि आप इंडेक्स को कुछ अलग तरीकों से बना सकते हैं।

// scans the assembly for all indexes and creates them 
IndexCreation.CreateIndexes(assembly, documentStore); 

// scans a MEF catalog for all indexes and creates them 
IndexCreation.CreateIndexes(catalog, documentStore); 

// puts a single index the HARD way 
documentStore.DatabaseCommands.PutIndex(...); 

// puts a single index the easy way 
documentStore.ExecuteIndex(new YourIndexCreationTask()); 

कुछ अन्य हैं, लेकिन आपको विचार मिलता है।

और बस पूरी तरह से हो सकता है, तुम सच में सूचकांक अस्तित्व के लिए जाँच करने के लिए करना चाहता था, तो आप इस्तेमाल कर सकते हैं:

documentStore.DatabaseCommands.GetIndex("YourIndex") != null 

लेकिन वह केवल, नाम से जाँच करेगा परिभाषा के द्वारा नहीं। और आपको इसकी आवश्यकता नहीं है।

+0

धन्यवाद। इसे पढ़ने के बाद मेरे पास "आह-पल" था! – trailmax

+0

यह सलाह सही नहीं लगती है। अगर मैं PutIndex को एक इंडेक्स पर कॉल करता हूं जो पहले से मौजूद है तो मुझे एक अवैधऑपरेशन अपवाद मिल रहा है - इंडेक्स पहले से मौजूद है। मैं v2.5 का उपयोग कर रहा हूँ। क्या मुझसे कुछ गलत हो रही है ? – Chris

+2

आपके पास सेटिंग्स को तीसरे तर्क के द्वारा ओवरराइड करने का विकल्प है –

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