2015-01-23 7 views
0

У меня есть интересная дилемма. У меня есть приложение, которое, когда создается новая запись, в этом случае пользователь, публикуется в другом приложении (конкретная информация).Проверить наличие новых записей

Теперь я мог бы использовать User.last и получить последние и самые большие. Публикация происходит, как только запись сохраняется, и занимает всего секунду. Так что предположим, что у меня одновременно зарегистрировано 500 пользователей.

Thats 500 новых записи, опубликованная на второе приложение, для каждого из них я должен сказать:

Если этот пользователь является новым, делать й с ним, иначе игнорировать.

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

Если запись занимает 5 секунд или младше, сделайте x с ней, иначе игнорируйте ее.

Могу ли я сделать следующее:

Users.all.each do |u| 
    *if u is 5 seconds or less old* 
    do something here 
    end 
end 

Я не уверен, что если заявление будет, то это будет u.created_at <= 5.seconds ??

ответ

1

User.where('created_at >= ?', 5.seconds.ago) найдет записи, которые не превышают пяти секунд. Но похоже, что вам может быть лучше с API, который будет создавать события для вашего второго приложения.

+0

Я использую паб sub и кролик mq. У меня есть драгоценный камень, который обрабатывает все это для меня. Я медленно перехожу к API. – TheWebs

1

Вы: :. Это будет выглядеть так:

gauge = Time.now - 5 
Users.all.each do |u| 
    u.created_at >= gauge 
    # do something here 
    end 
end 

Проблема в том, что для запуска цикла требуется время. Даже если вы используете более эффективный запрос, вы все еще полагаетесь на отметки времени для высокой точности.

User.where('created_at >= ?', Time.now - 5) 

Если есть задержка в системе, скажем, компьютер занимает .5 секунд, чтобы добраться до вашего запроса, вам будет не хватать каких-либо созданных пользователей во втором зазоре .5. Лучше добавить столбец published пользователям, пометить запись как опубликованную, а затем проверить неопубликованные записи.

users = User.where(published: nil) 
users.each { |u| u.publish } 

Или, как еще один упомянутый пост, найдите API, который будет вызывать события создания.

+0

Как уже говорилось в другом комментарии У меня есть подсистема pub, в которой используется кролик mq для публикации, по существу, моделей и атрибутов из одного приложения в другое, которое подписывается. Но в конечном итоге больно двигаться к API. – TheWebs

+0

Это очень хороший момент. Если cron задерживается хотя бы на секунду по любой причине (высокая системная нагрузка или что-то еще), то все пользователи, созданные в этой секунде, будут потеряны во втором приложении. – ihaztehcodez

+0

, поэтому в среднем я должен добавить больший промежуток времени? Пока я не перейду в систему на основе API? – TheWebs

Смежные вопросы