Время последнего доступа пользователей с CouchDB - PullRequest
3 голосов
/ 30 января 2011

Я новичок в CouchDB, но это не связано с проблемой. Вопрос прост, но мне не понятен.

Например: Борис был на сайте 5 секунд назад и просматривал его профиль. Иван видит его.

Как правильно реализовать эту функцию (время последнего доступа пользователей)?

Проблема в том, что, если мы обновим документ профиля пользователя в CouchDB, например. свойство last_access_time, каждый раз, когда страница обновляется, чем у нас будет самая важная информация (с MySQL мы делали это таким образом), но с другой стороны, у нас будет _rev документа где-то около 100000 ++ к концу день.

Итак, как ты это делаешь или у тебя есть идеи?

Ответы [ 3 ]

2 голосов
/ 31 января 2011

Это не полный ответ, а возможная оптимизация.Он будет работать в дополнение к любым другим ответам здесь.

Вместо сохранения самой последней отметки времени обновляйте отметку времени, только если она изменилась, например, на 5 или 60 секунд. Предположим, что пользователь обновляется каждую секунду в течение дня.Это 86 400 обновлений.Но если вы обновляете временную метку только с 5-секундными интервалами, то это 17 280;в течение 60 секунд это 1440.

Вы можете сделать это на стороне клиента.Если вы хотите обновить отметку времени, извлеките текущий документ и проверьте старую отметку времени.Если возраст меньше 5 секунд, ничего не делайте.В противном случае обновите его как обычно.

Вы также можете сделать это на стороне сервера.Напишите функцию _update в CouchDB, которую вы можете запросить, например, POST /db/_design/my_app/_update/last-access/the_doc_id?time=2011-01-31T05:05:31.872Z.Функция обновления будет делать то же самое: проверять старую временную метку и либо ничего не делать, либо обновлять ее в зависимости от истекшего времени.

1 голос
/ 31 января 2011

Если бы была (большая) часть документа, которая была бы относительно статичной, и (маленькая) часть, которая была бы очень динамичной, я бы поделил ее на два разных документа.

Другим вариантом может быть использование чего-то более подходящего для высокой производительности записи небольших фрагментов данных такого рода, таких как Redis или, возможно, MongoDB, и (при необходимости) фоновая задача для периодической записи информации в CouchDB. 1003 *

0 голосов
/ 31 января 2011

CouchDB не имеет проблем с быстрым обновлением документов. Просто сделай это, как MySQL. Высокий _rev не проблема.

Единственное, вы должны нести ответственность за свою кушетку с первого дня. Все пользователи CouchDB должны делать это в любом случае , однако, возможно, вам придется сделать это раньше. (Приложения с небольшим количеством обновлений имеют меньший риск заполнения диска, поэтому разработчики могут отложить эту работу.)

  • Опрос вашей базы данных и запуск сжатия, если это необходимо (на основе размера, количества документов, seq_id число)
  • Опрашивайте ваши взгляды и запускайте также сжатие
  • Всегда достаточно емкости диска и пропускной способности ввода / вывода для поддержки сжатия. Наихудший математический случай: вам нужно в 2 раза увеличить размер базы данных и в 2 раза увеличить скорость записи; однако большинство приложений требуют меньше. Поскольку вы обновляете документы, а не добавляете их, вам потребуется way less.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...