2012-06-05 30 views
5

में कई दस्तावेज़ हटाएं, मेरे पास कॉचडोक फ्रेमवर्क का उपयोग करते समय, कॉच डीबी पर वास्तव में "सर्वश्रेष्ठ अभ्यास" प्रश्न है (वास्तव में मैं आईओएस को टच डीबी एक कॉच डीबी पोर्ट का उपयोग कर रहा हूं)।CouchDB

मुझे एक क्वेरी के माध्यम से प्राप्त दस्तावेज़ों का एक समूह हटाना होगा।

1), एक NSArray में सभी दस्तावेजों डाल तो का उपयोग [CouchDatabase deleteDocuments:]

2) foreach क्वेरी पंक्तियां हटाना विधि कॉल, जैसे: के लिए (CouchQueryRow मैं यह करने के 3 तरीके जानते हैं * query.rows में पंक्ति) [row.document DELETE];

3) एक प्रश्न है कि _ id, _rev गुण फेंकना और _deleted संपत्ति जोड़ने बनाते हैं, तो बहु-अपडेट, जैसे का उपयोग करें: [couchDatabase putChanges:]

क्या बेहतर प्रदर्शन के लिहाज से है? ऐसा करने का एक बेहतर तरीका है?

उत्तर

1

HTTP एपीआई स्तर पर, इसे प्राप्त करने का सबसे तेज़ तरीका एक बैच अनुरोध चलाने के लिए है जो हटाए जाने वाले सभी दस्तावेजों के _id और वर्तमान _rev प्रदान करता है।

अपनी नौकरी, आपको यह सुनिश्चित CouchCocoa वास्तव में इस — मुझे पता है कि CouchCocoa दस्तावेजों इसे पढ़ता की _rev कैश करने की कोशिश करेंगे, इसलिए यदि आप दस्तावेज है कि बस पढ़ लिए गए हैं हटा रहे हैं, [CouchDatabase deleteDocuments:] पर्याप्त होना चाहिए है कि बनाने के लिए है अन्यथा पहले [CouchDatabase getDocumentsWithIDs:] होगा।

यदि आपके दस्तावेज़ बहुत बड़े हैं, तो यह _rev को थोक लाने के बजाय दृश्य का उपयोग करके बेहतर हो सकता है। यह आपको थोक हटाने के लिए [CouchDatabase putChanges:] का उपयोग करने के लिए मजबूर करता है। मुझे नहीं पता कि दस्तावेज़ आकार सीमा कहाँ है, इसलिए आपको इसे बेंचमार्क करना होगा।

बेशक, आपको यह तय करने की भी आवश्यकता है कि संघर्ष होने पर क्या होता है।

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