Восстановление CouchDB просмотров - PullRequest
3 голосов
/ 18 мая 2011

Придуманный пример:

{
  productName: 'Lost Series 67 DVD',
  availableFrom: '19/May/2011',
  availableTo: '19/Sep/2011'
}

Просмотр storeFront / currentAvailableProducts в основном проверяет, находится ли текущая дата-время в пределах availableFrom-availableTo, и выдает документ.

Я хотел бы принудительно восстановить представление на1:00 каждую ночь, т.е. обрабатывать / отображать все документы.

Сначала у меня был простой сценарий на python, запланированный через crontab, который затрагивал каждый документ, что вызывало новую ревизию и представление для обновления, однако, поскольку couchdb добавляется, только это не очень эффективно - то есть загружает ненужный ввод-вывод и дискИспользование пространства с последующим уплотнением, очень неэффективное использование ресурсов на всех фронтах.

Второе решение состояло в том, чтобы снова выдвинуть определение представления с помощью push couchapp, однако это означало, что представление было недоступно (или частично недоступно) в течение нескольких минут, что также было неприемлемо.

Есть ли другие решения?

Ответы [ 2 ]

6 голосов
/ 18 мая 2011

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

Сохраняйте одно представление и запрашивайте его по-разному каждый день

Определите свой размер временного интервала, например, один день.Далее для каждого документа вы генерируете один раз для каждого отрезка времени (дня), когда он доступен.Таким образом, если документ доступен с 19 мая по 21 мая (включительно), ваши ключи emit будут:

"2011-05-19"
"2011-05-20"
"2011-05-21"

После того, как это будет вычислено для каждого документа, чтобы найти документы, доступные в определенный день, просто запроситепредставление с (например, сегодня) ?key="2011-05-18".

Вам никогда не придется обновлять или повторно запускать свои представления.

Если по какой-либо причине вам никогда не придется изменять URL-адрес запроса, вы можетевозможность использовать функцию _show для 302 (временного) перенаправления на сегодняшний правильный запрос.

2 голосов
/ 18 мая 2011

То есть ваш взгляд не обновляется автоматически? Я так понимаю?

Новые и измененные документы не добавляются на лету?

О, я вижу, вы обманываете. Вы используете информацию "вне документа" (т.е. текущую дату) во время создания представления.

Нет переименования представления, но если бы вы были в отчаянии, вы могли бы использовать переписывание URL.

Просто создайте проектный документ «каждый день»: / db / _design / today05172011

Затем измените URL-адрес для изменения: GET / db / _design / today / _view / yourview

to: GET / db / _design / today051711 / _view / yourview

Создайте представление в 23:00 по времени сервера (настройте его так, чтобы «сейчас» было «завтра», или что-то еще).

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

Так ваш взгляд строится каждую ночь, как вам нравится.

Очевидно, что вам придется использовать Couch с другим веб-сервером или прокси-сервером для этого.

Это элегантно и не элегантно одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...