Лучший способ обновлять БД (Монго) каждый час? - PullRequest
1 голос
/ 05 мая 2011

Я готовлю небольшое приложение, которое будет собирать данные о пользователях на моем сайте (через socket.io).Я хочу вставлять все данные в мою monogDB каждый час.

Каков наилучший способ сделать это?setInterval (60000) кажется немного слабым:)

Ответы [ 5 ]

4 голосов
/ 06 мая 2011

Например, вы можете использовать cron и запускать ваше приложение node.js как запланированное задание.

РЕДАКТИРОВАТЬ:

В случае, еслиПрограмма должна работать непрерывно, тогда, вероятно, setTimeout - один из немногих возможных вариантов (который довольно просто реализовать).В противном случае вы можете разгрузить ваши данные в какую-то временную систему хранения, например, redis, а затем регулярно запускать другую программу node.js для перемещения ваших данных, однако это может привести к новой зависимости от другой системы БД и усложнить сложность в зависимости от вашего сценария.Redis также может быть в этом случае своего рода отказоустойчивым решением в случае, когда ваше основное приложение node.js будет неожиданно прервано и потеряет часть или весь пакет данных.

1 голос
/ 06 мая 2011

Вы должны агрегировать в режиме реального времени, а не один раз в час.

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

http://www.slideshare.net/pstokes2/social-analytics-with-mongodb

0 голосов
/ 09 марта 2013

Если вы используете Node, хороший CRON-подобный инструмент - Forever . Он использует те же шаблоны CRON для обработки повторения заданий.

0 голосов
/ 06 мая 2011

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

Или вы можете попробовать setInterval(checkRestore, 60000) за раз в минуту проверяет.checkRestore () запросит сервер, чтобы узнать, больше ли время последнего обновления, чем час.Есть несколько способов сделать это.

Простой способ сохранить дату - просто сохранить ее как значение Date.now () (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)), а затем проверить что-то вроде db.logs.find ({lastUpdate: {$ lt: Date.now () - 6000000}}).

Я думаю, что перепутал несколько разных решений, но, надеюсь, что-то подобное сработает!

0 голосов
/ 06 мая 2011

Почему бы просто не поразить сервер запросом curl, который запускает запись в базу данных? Вы можете поставить команду на почасовую работу cron и прослушивать локальный порт.

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