2017-01-09 8 views
1

КонтекстPouchDB: Ясно LocalDB, когда это безопасно на remoteDB

Я использую PouchDB и имеют LocalDB с помощью индексированной. Я постоянно тиражирование этой локальной БД с удаленной БД (CouchDB) с этой функцией:

function replLocalToRemote() { 
    this.meta.localDB.replicate.to(this.meta.remoteDB, { 
     // Live: replication occurs as the changes are detected 
    live: true, 
    retry: true, 
    }).on('paused', function (info) { 
     console.log('paused', info); 
     // replication was paused, usually because of a lost connection 
    }).on('change', function (change) { 
     console.log('change', change); 
     // yo, something changed! 
    }).on('active', function (info) { 
     console.log('active', info); 
     // replication was resumed 
    }).on('error', function (err) { 
     alert('replication failed. Retry... ', err); 
     // totally unhandled error (shouldn't happen) 
    }); 
    } 

Это работает хорошо, но проблемы возникают, когда есть слишком много данных на устройстве. Особенно в IOS, где Safari постоянно открывает всплывающие окна, чтобы попросить больше хранить данные (начиная с 5Mo).

Вопрос

Так что я хотел бы, чтобы очистить LocalDB как я скопировать его на remoteDB. Например, удалите документ на локальном компьютере, как только он будет удален, и продолжите репликацию, даже если на удаленном компьютере больше данных, чем на локальном.

Возможно ли это?

+0

Не совсем ответ на ваш вопрос, но вы можете избежать всплывающих окон и проблемы нехватки хранилища, используя базу данных SQLite вместо IndexedDB и WebSQL. См. Плагин _SQLite для раздела Cordova/PhoneGap_ [здесь] (https://pouchdb.com/adapters.html). – Phonolog

+0

@Phonolog Интересно, но мое приложение не приложение Cordova/PhoneGap. – hhh

+0

Хм еще идея: удалите свою базу данных, если в ней слишком много данных (или, допустим, каждый день/неделя/месяц) и создайте новую. Скопируйте новый на свой удаленный db ... – Phonolog

ответ

0

Удаление локального документа вызовет проблемы, так как удаление будет реплицировано в удаленную базу данных, чтобы вы полностью потеряли документ.

Вы видели функцию «автоматического уплотнения» в PouchDb? Это минимизирует размер локальной базы данных, удаляя любые «не листовые» документы ревизии (предыдущие версии).

Вы можете включить эту функцию, как это:

var db = new PouchDB('mydb', {auto_compaction: true}); 

Более подробную информацию об этом на the PouchDb page.

+0

Благодарим вас за ответ, но размер базы данных не вызван изменениями, а разными документами. Таким образом, уплотнение не уменьшило бы размер. – hhh

0

Вы можете попробовать создать новый локальный db каждый день и время (например, каждый день) и начать новую репликацию оттуда. Храните старые dbs, пока они все еще реплицируются, и удаляйте их, как только они будут полностью воспроизведены.

Чтобы не потерять данные, вы должны проявлять особую осторожность, чтобы все данные были реплицированы на сервер перед удалением db.

+0

Проблема в том, что мне нужно будет реплицироваться на новый удаленный db каждый раз, когда я создаю новый локальный. После этого удаленная структура db будет жесткой. – hhh

+0

Не совсем. Вы можете легко копировать в ту же удаленную базу данных. Если вы можете подробно остановиться на своем специальном случае, я могу вам помочь. –

 Смежные вопросы

  • Нет связанных вопросов^_^