Прежде всего, вам нужно изменить то, как вы думаете о моделировании базы данных. Синхронизация с CouchDB - это не просто создание документов всех ваших таблиц и их передача на Couch.
Я использую CouchDB для сайта в производстве, я опишу, что я сделал, может быть, это поможет вам:
С самого начала мы использовали MySQL в качестве основной базы данных. У меня были намеченные лица, включая их отношения. В попытке ускорить работу интерфейса я решил использовать CouchDB в качестве хранилища контента . Преимущество заключалось в том, чтобы иметь полностью подготовленные документы, которые содержали все реляционные данные, чтобы данные можно было получать с гораздо меньшими накладными расходами.
Поскольку документы могут содержать связанные сущности - скажем, документ с вопросом, содержащий все ответы, - я сначала решил, какие сущности верхнего уровня я хочу отправить на Couch. В моем примере на Couch будут отправляться только вопросы, и эти документы будут содержать ответы и возможные метаданные, такие как теги, информация о пользователе и т. Д. При запросе вопроса на веб-интерфейсе мне нужно будет получить только один документ. чтобы получить всю необходимую мне информацию на данный момент.
Теперь к вашему второму вопросу: как уведомить CouchDB об изменениях. В нашем случае все изменения в наших данных делаются с использованием CMS. У меня есть одна точка в моем коде, которую вызывают все действия редактирования. Это место, где я подключил функцию, которая сохранила объект, сохраняемый в CouchDB. Функция определяет, нуждается ли этот объект в сохранении (т. Е. Является ли он объектом верхнего уровня), затем создает документ этого объекта (подумайте о некоторой функции toArray) и рекурсивно выбирает все его отношения. Полный документ затем отправляется в CouchDB.
Теперь, в вашем случае, переменные здесь могут быть совершенно разными, но основная идея та же: выяснить, какие документы вы хотите сохранить и как они выглядят. Затем напишите функцию, которая составляет эти документы, и убедитесь, что она вызывается при внесении изменений в вашу реляционную базу данных.
Уведомление CouchDB об изменении
CouchDB очень прост. Вероятно, самая простая вещь - это непосредственное обновление существующего документа. На ум приходят два способа:
- Самый простой способ - это обычное обновление CouchDB: получить текущий документ по id; изменить его; затем отправьте его обратно на Couch с HTTP PUT или POST.
- Если у вас есть явные изменения, специфичные для приложения (например, «значение
views
было увеличено»), тогда написание функции _update
представляется разумным. Функция обновления очень проста: они получают HTTP-запрос и документ; они изменяют документ; а затем CouchDB сохраняет новую версию. Вы пишете функции обновления в Javascript, и они запускаются на сервере. Это отличный способ «сжать» общие действия в более простые (и меньшее) HTTP-запросы.