Географическая нагрузка MongoDB больше между запросами HTTP - PullRequest
2 голосов
/ 22 апреля 2011

AcaniUsers загружает первых 20 пользователей в MongoDB (на Heroku через Sinatra), ближайшего ко мне с моего iPhone.Я хочу добавить кнопку «Загрузить еще», которая будет загружать следующих 20 ближайших ко мне пользователей.Имейте в виду, мое местоположение и местоположение пользователей на моем телефоне могли измениться.Я думал о переключении с Sinatra на Node.js и открытии WebSocket, чтобы иметь возможность в реальном времени получать обновления присутствия и местоположения пользователей на моем телефоне, но думаю, что я должен сохранить этот вызов для следующей итерации.В основном, как мне реализовать нагрузку больше функциональности?

Ответы [ 2 ]

0 голосов
/ 10 августа 2011

воспринимайте это больше как вопрос на стороне клиента: используйте подписки, основанные на текущей группе - если возможно, закодируйте группу в гео-квадрат (более эффективный, чем круг, я думаю?) - периодически (t) выполняет операцию, котораяпроверяет местоположение каждого пользователя и просто отправляет его с идентификатором группы, чтобы соответствовать подпискам

на самом деле ... для создания групп подписок, просто используйте команду geonear для всех ваших подписчиков - создайте хэшваши подписчики и их группы - каждый подписчик подписан на одну группу, а сами (для целевого общения => указывают, что конкретный подписчик должен изменить свою подписку) - итерируют результаты i число раз, где i - количество людей в обновленииgroup - выполнить действие, которое проверяет текущее значение j, номер группы для конкретного подписчика, по отношению к новому значению j - если есть изменение, уведомить абонента о частном канале подписчика - синхронно отправлять уведомлениянастройки Llow подписчика

что-то вроде:

    var pageSize;
    // assign pageSize in method call
    var documents = collection.Find(query);
    var max = documents.Size();
    for (int i = 0; i == max ; i++)
    {
        var level = i*pageSize;
        if (max / level > 1)
        {
            documents.Skip(pageSize);
        }
        else
        {
            documents.Skip(pageSize).Limit(level);
            break;
        }
    }

:)

0 голосов
/ 24 апреля 2011

Для разбиения на страницы запросов в MongoDB вы можете использовать комбинацию limit () и skip ().

Итак, первый запрос будет:

your_query.limit (20)

Тогда, если вы хотите загрузитьвторые 20 (вам нужно будет где-то вспомнить первый запрос):

your_query.skip (20) .limit (20)

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

...