Ответы пользователя по тегу MongoDB
  • Как из mongoDB получить все значения в некотором временном интервале?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вобщем есть 2 в целом равнозначных способа получения результатов.
    Первый - сохранять Unixtime как NumberLong() и работать с операторами сравнения. NumberLong хранится как 64-битное целое число.
    Второй - использовать тип Date() и переводить Unixtime в него. Операторы сравнения также будут работать с ним.
    Оба варианта в принципе одинаковы, т.к. объект будет сконвертирован в то же 64-битное целое.

    Разница будет на уровне общения с базой, в первом случае вам прийдется превращать все даты в число и передавать это число базе, во втором вы будете передавать объект Date().

    Я бы рекомендовал применить Date(), и, если у вас не планируется значений в одно и тоже время, сохранять его внутри поля _id. Таким образом вы можете сэкономить индекс.
    Ответ написан
    Комментировать
  • Как из cordova работать с rabbitmq?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Не совсем так. RabbitMQ - система очередей сообщений, которая работает на сервере.

    Почитайте, как работают уведомления
    https://firebase.google.com/docs/cloud-messaging/

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

    Логика на сервере должна быть такая - отправил уведомление устройству, ждем подтверждение 15 минут, если нет, то отправляем повторно. Если все равно нет подтверждения - маркируем устройство недоступным и больше не шлем уведомлений. После запуска приложения пользователем, отправляем запрос на сервер и активируем устройство.
    Ответ написан
    2 комментария
  • Как в MongoDB правильно использовать $push в PHP?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    BlueGroup должен быть массивом:

    {
    "Key" : $key,
    "BlueGroup" : [
         {
            "1469132000" : {
                "X" : 1.2,
                "Y" : 3.3,
                "Z" : 2.1
            }
         }
    ],
    "ManyGroups" : { * }
    }
    Ответ написан
    Комментировать
  • Индексы в MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    If you call multiple createIndex() methods with the same index specification at the same time, only the first operation will succeed, all other operations will have no effect.

    https://docs.mongodb.com/manual/reference/method/d...

    Вообще ни на что не влияет.
    Ответ написан
    Комментировать
  • Php как работать с mongodb?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Если нет композера, устанавливаем getjump.me/ru-php-the-right-way/#composer_%D0%B8_p...
    После этого читаем обучалку php.net/manual/ru/mongodb.tutorial.library.php
    Там все просто, поставить обвертку и подключить ее. https://robomongo.org/ вам поможет с отладкой.
    Ответ написан
  • Redis + MySQl или mongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    MySQL + Sphinx + Memcached

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

    MongoDB имеет смысл, если у вас будет ну хотя бы 20 млн композиций, плюс там будет еще куча активности типа прослушиваний, коментов, лайков и прочей ерунды.

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

    MongoDB нужно использовать там, где критична гибкость схемы и важна значительная масштабируемость. Это хорошее решение например для хранения данных о пациентах и истории болезни. У каждого пациента своя очень сложная и уникальная история. На монге можно построить систему медицинских записей масштаба государства. На MySQL тоже можно, но это окажется гораздо более сложным решением.
    Ответ написан
    1 комментарий
  • Как получить «термины» для каждого документа, после полнотекстового поиска в MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    db.getCollection('example').find({
        $text: {
            $search: "розовые булочки",
            $language: 'russian'
        }
    }).explain()
    Ответ написан
    3 комментария
  • Почему все скептически относятся к MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Скептически мылят ретрограды, люди боящиеся всего нового и незнакомого.
    У NoSQL есть свои проблемы и преимущества, нужно понимать, когда и как это использовать. Многие пытаются их использовать по-старинке, городят свои костыли для организации реляционной модели и потом удивляются, что их решение не работает. Монги придуманы для другого. Они хороши там, где нужно сохранять много относительно небольших структур данных и быстро их доставать. Причем это все должно хорошо масштабироваться. Например телефонный справочник на триллион номеров, который ну никак не помещается на одну машину, при этом в него постоянно кто-то записывает новые номера и к нему должны быть реплики в нескольких датацентрах. Плюс у вас должен быть полнотекстовый поиск по нескольким полям на нескольких языках.
    Это реально сделать и на MySQL, но решение выглядит сложнее, но и у него есть свои плюсы. Например переименовать всех Василиев можно одним простым движением в виде редактирования одной записи. В Монге потребуется изменить все записи с Василиями.
    У обоих решений есть и репликация, и шардинг и т.д. Монгу чуть проще настроить, только и всего.
    Монга не подойдет тем, кому нужна четкая фиксация транзакций, потому что там целостность данных основана на потоке событий.
    Вам нужно просто внимательно почитать по то, какие базы для чего использовать.
    Ответ написан
    3 комментария
  • Почему перестала запускаться mongodb?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Было такое. Вам нужно почистить диск С от барахла. У вас всего 4 гига свободно, этого мало для журналов.
    Зайдите в конфиг монги и установите storage.mmapv1.smallFiles = true, это уменьшит размер журналов до 512MB.
    docs.mongodb.org/manual/reference/configuration-op...

    mongo это не совсем хорошо

    Тоже самое можно сказать про что угодно, если не уметь этим пользоваться. Имеется удачный опыт работы с MongoDB в течении последних двух лет и с каждым годом она становится лучше.
    Важно помнить, что это документ-ориентированное хранилище, а не замена обычной SQL-базы.
    Для начала посмотрите хотя бы это https://www.youtube.com/embed/tgckAOyjXPI
    Ответ написан
    Комментировать
  • В AWS нет MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    MongoDB устанавливается отдельным пакетом в AWS.
    Подробные инструкции и рекомендации здесь docs.mongodb.org/ecosystem/platforms/amazon-ec2

    У них была раньше готовая сборка, но сейчас она недоступна.

    Вам нужно выбирать EBS-Optimized Instances.

    t2.micro будет OK, если база маленькая (меньше 1GB реальных данных).

    Хорошие рекомендации здесь dba.stackexchange.com/questions/19491/mongodb-ram-...

    Из опыта работы рекомендую выбирать объем памяти не меньший, чем двухкратный размер индекса. Идеальный вариант - размер данных + индексы.
    Ответ написан
    Комментировать
  • Какая из баз данных будет работать с таблицей в 1 петабайт и 3000 миллиардов записей?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Можете почитать сами kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
    Я рекомендовал бы смотреть в сторону Hadoop детишек вроде HBase или Cassandra.
    Но и MongoDB вполне справится.
    Ответ написан
    Комментировать
  • С чего начать изучение баз данных(sets, normalization, crud..)?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Читайте про теорию БД и множеств, типы данных, хранилищ и нормальные формы баз данных.

    Начинайте отсюда https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B7%D... и вглубь.
    И потом руководство к каждой конкретной базе.

    Кстати, CRUD = create, read, update, delete - т.е. все стандартные операции.
    Ответ написан
    Комментировать
  • Как в MongoDB найти почти равные углы?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Обычно в NoSQL применяют предварительную квантификацию данных.
    Т.е. у вас есть погрешность π/8, а круг 2π, то ваш квантификатор будет массивом от 0 до 16. У каждого объекта будет свойство quantified_direction, хранящее нужное значени и выборка будет примитивной.
    Более простое объяснение - разбейте круг на 16 секторов и записывайте номер для каждого сектора прямо в объект. При поиске просто используйте этот номер. Также вы можете увеличить значение до 32 и делать поиск по двум секторам одновремено. После построения индекса для quantified_direction вы будет получать результаты за доли секунды на огромных базах.
    А в целом у вас ошибка в подготовке условия. Нарисуйте круг, вырежьте сектор из бумаги и поработайте с граничными условиями. Задача на самом деле простая.
    Ответ написан
  • Почему mongo не правильно добавляет в коллекцию записи?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Ответ написан
    Комментировать
  • Пуленепробиваемый Node.JS и MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Я только начинающий, но вот что я знаю:

    1. Raven и хранение всего в Sentry. Для себя я проще делаю и перенаправляю вывод внутри скрипта в лог-файл.
    2. Используется одно из главных преимуществ MongoDB - delayed slave.
    3. Еще не сталкивался, но могу могу предположить, что поедание памяти можно решить только двумя путями - написанием качественного кода и перезапуском приложений, когда на сервере недостаточно памяти. Естественно предуматривать соответствующую архитектуру, например два одновременно работающих Node.js инстанса и балансировщик между ними. Перезапускать их поочередно. С монгой тут примерно тоже самое, можно сделать кластер на mongos. Хорошие курсы тут. Из практики достаточно одного хорошего инстанса на 32-64GB RAM если ваша база занимает 20 GB. Монга действительно жрет память ведрами. Но и использует ее эффективно. Многие проблемы решаются благоразумным индексированием и пониманием того, что для быстрой работы все данные с индексами должны помещаться в память.
    4. Перезапуск делается примерно так. Плюс еще есть демон monit, который мониторит запущеные процессы. Еще, если погуглите, то найдете 1001 способ Continuous Integration. Это когда деплой и рестарт серверов происходит автоматически.

    Полагаю, что профи меня поправят.
    Ответ написан
    Комментировать
  • Как хранить CELERYBEAT_SCHEDULE в MongoDB?

    zoonman
    @zoonman Автор вопроса
    ⋆⋆⋆⋆⋆
    Нашел пару классов для работы в качестве Scheduler. https://bitbucket.org/btubbs/celery-schedulers/src
    Ответ написан
    Комментировать
  • Почему MongoDB не сохраняет документы на Windows?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Попробуйте сохранять с опцией j=1 с подтверждением записи в журнал.
    docs.mongodb.org/manual/core/write-concern/#journaled

    Я бы рекомендовал использовать Robomongo и протестировать в нем insert().
    Ответ написан
    Комментировать