У нас есть продукт, который использует центральные базы данных CouchDB для каждого клиента, реплицирующегося в приложения, запущенные на iPad пользователя. Большая часть базы данных могут реплицировать нормально, но у нас есть две категорий документа, которые мы хотим фильтровать:Удаление документов из реплик CouchDB
- Документов с владельцем - мы хотим, чтобы отфильтровать репликацию только текущие документы пользователей (и документы без указания владельца).
- Последние X документов определенного типа. Для некоторых видов документов мы хотим оставить только последние 10 (скажем) копий на iPad.
Мы можем установить оба правила достаточно легко, используя фильтрованную репликацию - чтобы сервер представлял только подмножество документов, которые мы хотим для iPad для репликации. Кроме ... это не работает.
- Если у документа нет владельца (реплицировано), а позже указан владелец, он исчезает из потока репликации, но не из iPad. На самом деле версия документа, которая остается на iPad, по-прежнему не имеет владельца и поэтому мы не можем даже спрятать его в коде.
- Когда документ становится 11-м самым старым и исчезает из потока репликации, он не исчезает с iPad. Действительно, если база данных iPad не будет восстановлена, все версии этих документов попадут туда и больше не будут реплицироваться, что хуже, чем просто повторить их все в первую очередь.
Мы обнаружили хакерское обходное решение - в случае, когда документ получает нового владельца ИЛИ становится старше X, мы дублируем его и удаляем оригинал. Удаление ссылок на iPad и новый документ отфильтровывается из репликации. Это работало достаточно хорошо (хотя это немного неэффективно). Однако затем мы поняли, что недавно скопированный документ потерял всю информацию о его пересмотре, и мы полагались на изменения для отслеживания изменений!
Итак, есть ли у кого-нибудь другое предложение? То, что мы ищем, - это механизм вытягивания документа из реплик iPad по требованию. Я знаю, что мы можем поручить iPad удалять документы локально - но рано или поздно эти удаления будут утечки на сервер и уничтожить оригинал?