2012-06-05 15 views
5

Mam pytanie "najlepszej praktyki" na CouchDB (faktycznie używam TouchDB port CouchDB do iOS), podczas korzystania z CouchCocoa.Usuwanie wielu dokumentów w CouchDB

Potrzebuję usunąć kilka dokumentów, które dostaję za pośrednictwem zapytania. znam 3 sposoby, aby to zrobić:

1) umieścić wszystkie dokumenty do w NSArray, a następnie użyj [deleteDocuments CouchDatabase:]

2) wiersze zapytań foreach wywołać metodę usuwania, jak: dla (CouchQueryRow * wiersz w query.rows) [row.document DELETE];

3) utworzyć zapytanie, które emitują _id, właściwości _rev i dodać właściwość _deleted, a następnie użyj zbiorczego aktualizacji, jak: [couchDatabase putChanges:]

jaka jest lepsza wydajność mądry? Jest lepszy sposób na zrobienie tego?

Odpowiedz

1

Na poziomie interfejsu API HTTP najszybszym sposobem uzyskania tego jest uruchomienie pojedynczego żądania wsadowego, które zapewnia _id i bieżące _rev wszystkich dokumentów do usunięcia.

Twoim zadaniem jest upewnić się, że CouchCocoa faktycznie robi to — wiem, że CouchCocoa będą próbować buforować _rev dokumentów to czyta, więc jeśli usuwanie dokumentów, które właśnie zostały odczytane, [CouchDatabase deleteDocuments:] powinno wystarczyć, w przeciwnym razie będzie musiał najpierw uzyskać [CouchDatabase getDocumentsWithIDs:].

Jeśli twoje dokumenty są bardzo duże, lepszym rozwiązaniem może być uzyskanie _rev przy użyciu widoku zamiast pobierania zbiorczego. Wymaga to użycia [CouchDatabase putChanges:] do wykonania usuwania zbiorczego. Nie wiem, gdzie znajduje się próg wielkości dokumentu, więc musisz go porównać.

Oczywiście musisz także zdecydować, co się stanie, gdy dojdzie do konfliktu.