Синхронизация данных из реляционной базы данных в Couch DB - PullRequest
6 голосов
/ 29 июня 2011

Мне нужно синхронизировать мою реляционную базу данных (Oracle или Mysql) с CouchDb. У кого-нибудь есть идеи, как это возможно. если это возможно, чем то, как мы можем уведомить CouchDb о любых изменениях в реляционной БД.

Заранее спасибо.

1 Ответ

6 голосов
/ 29 июня 2011

Прежде всего, вам нужно изменить то, как вы думаете о моделировании базы данных. Синхронизация с CouchDB - это не просто создание документов всех ваших таблиц и их передача на Couch.

Я использую CouchDB для сайта в производстве, я опишу, что я сделал, может быть, это поможет вам:

С самого начала мы использовали MySQL в качестве основной базы данных. У меня были намеченные лица, включая их отношения. В попытке ускорить работу интерфейса я решил использовать CouchDB в качестве хранилища контента . Преимущество заключалось в том, чтобы иметь полностью подготовленные документы, которые содержали все реляционные данные, чтобы данные можно было получать с гораздо меньшими накладными расходами. Поскольку документы могут содержать связанные сущности - скажем, документ с вопросом, содержащий все ответы, - я сначала решил, какие сущности верхнего уровня я хочу отправить на Couch. В моем примере на Couch будут отправляться только вопросы, и эти документы будут содержать ответы и возможные метаданные, такие как теги, информация о пользователе и т. Д. При запросе вопроса на веб-интерфейсе мне нужно будет получить только один документ. чтобы получить всю необходимую мне информацию на данный момент.

Теперь к вашему второму вопросу: как уведомить CouchDB об изменениях. В нашем случае все изменения в наших данных делаются с использованием CMS. У меня есть одна точка в моем коде, которую вызывают все действия редактирования. Это место, где я подключил функцию, которая сохранила объект, сохраняемый в CouchDB. Функция определяет, нуждается ли этот объект в сохранении (т. Е. Является ли он объектом верхнего уровня), затем создает документ этого объекта (подумайте о некоторой функции toArray) и рекурсивно выбирает все его отношения. Полный документ затем отправляется в CouchDB.

Теперь, в вашем случае, переменные здесь могут быть совершенно разными, но основная идея та же: выяснить, какие документы вы хотите сохранить и как они выглядят. Затем напишите функцию, которая составляет эти документы, и убедитесь, что она вызывается при внесении изменений в вашу реляционную базу данных.

Уведомление CouchDB об изменении

CouchDB очень прост. Вероятно, самая простая вещь - это непосредственное обновление существующего документа. На ум приходят два способа:

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