Задать вопрос
  • Как оптимизировать mongo под нагрузки?

    @lega
    Индекс по полю title есть? db.articles.ensureIndex({title: 1})

    title:'крым'
    Это точное значение поля, или вы хотите сделать поиск по части названия (полнотекстовый поиск)?
    Ответ написан
    Комментировать
  • Почему срабатывает ошибка [$rootScope:infdig] при использовании $q в AngularJS?

    @lega
    У меня ваш код запустился, только тут проблема:
    У вас сделан биндинг "{{tryDef()}}", поэтому ф-ия tryDef вызывается на каждой итерации в $digest, а ф-ия tryDef вызывает testDef где создается и исполняется $q.resolve, который провоцирует вызов $digest. Получается "бесконечный цикл".
    Вам нужно вызов testDef убрать в другую ф-ию которая не вызывается на каждой итерации в $digest, например сделать её вызов по клику.
    Ответ написан
  • Почему MongoDB может не видеть записи после определенной даты?

    @lega
    Только что заметил, у вас индекс по "create_date", а сортировку вы делаете по "create_time".
    При определенном (большом) количестве документов без сортировки монга не должна выдавать результат вообще в целях оптимизации, должна выдавать ошибку (зависит от версии).

    Предыдущий ответ: Попробуйте сделать dump/restore в другую базу, или db.repairDatabase, возможно база повреждена.
    Ответ написан
  • Python 2 или 3 версия?

    @lega
    Конечно 3.x,
    если будет чего-то не хватать, то можно будет вызвать из 2.x тем или иным способом.
    Ответ написан
    Комментировать
  • Почему умирает процесс Python с Killed: 9?

    @lega
    Вам нужно оптимизировать алгоритм, использовать меньше памяти, перевести все что возможно на итераторы.
    Например этот код в теории создает 3 гигантских массива:
    corpus_neg=[i.decode('utf-8') for i in data_text_score['text'][data_text_score['score']==0]]
        corpus_pos=[i.decode('utf-8') for i in data_text_score['text'][data_text_score['score']==1]]
        corpus_all=corpus_neg+corpus_pos

    Можно изменить например так, corpus_all вернет те же данные без использования списков.
    def corpus_all():
        for i in data_text_score['text'][data_text_score['score']==0]:
            yield i.decode('utf-8')
        for i in data_text_score['text'][data_text_score['score']==1]:
            yield i.decode('utf-8')
    Ответ написан
  • Как получить часть документа в монго?

    @lega
    Как вытащить только нулевой элемент массива books?

    Часть массива (или один элемент) можно достать с помощью $slice

    как вытащить значение поля year?

    db.col.find({}, {'books.year': 1}) - таким образом он должен выдать поле year (но по всем элементам массива).

    В случае если вам массив не особо нужен, то можно использовать словарь вместо него с ключами 0, 1, 2, 3...
    Тогда запрос будет типа такого: db.col.find({}, {'books.0.year': 1})
    Ответ написан
  • Как лучше хранить комментарии к посту в mongodb ?

    @lega
    Это зависит от того как бы будете их использовать (выводить).
    Если вы будете их все отображать только вместе с документом, тогда ваш вариант подходит т.к. одним запросом вы получаете и пости и комменты.
    Если Вам нужно использовать комментарии где-то ещё: последние 5 комментов, топ комментов, агрегация по комментам, или если Вам нужно где-то ссылаться на конкретные комменты - то есть смысл хранить их в отдельной коллекции (и кешировать пост чуть что).
    Ответ написан
    Комментировать
  • Как объединить коллекции(1Гб в день) с серверов сбора данных на главный сервер(бэкап)?

    @lega
    Перекачать данные можно через mongodump -> mongorestore, при этом на конечном сервере данные добавятся (при условии что не будет коллизий по _id). Так же можно попробовать команду db.copyDatabase.
    Через ssh можно сделать тунель, и делать дамп сразу на локальную машину.

    Хотя для автоматического сбора я бы сделал авторизацию по ключам и положил скрипт в cron, что-б он сам авторизовался и делал dump/restore. По пути можно сделать быстрое сжатие через gzip, что-б данные быстрее перекачались.

    Например что-то типа этого, делает удаленно дамп, жмет, перекачивает на локальную машину, распаковывает и делает restore.
    ssh -p 1022 server "cd /tmp/; rm -rf /tmp/dump.tbz2 /tmp/dump/; mongodump -d database; tar -cjf dump.tbz2 dump"
    	rm -rf /tmp/dump/
    	scp -P 1022 server:/tmp/dump.tbz2 /tmp/
    	cd /tmp/; tar -xjf dump.tbz2; mongorestore

    Само сжатие можно делать "на ходу" без создания файла.
    Ответ написан
    Комментировать
  • Mongodb возвращает float вместо int. Как исправить?

    @lega
    MongoDB возвращает то что вы записали, если вы запишите int через pymongo то и вернется int, если писать из js-консоли, то нужно "привести" число к int с помощью NumberInt или NumberLong.
    Ответ написан
    Комментировать
  • Сортировка в MongoDB?

    @lega
    Хранить репосты как отдельные документы (с ссылкой на оригинал если нужно), тогда и индекс и запрос будет простой.
    Ответ написан
    Комментировать
  • Как в питоне получить промежутки времени?

    @lega
    Можно изменить минуты, секунды через replace, либо создание нового datetime с нужными числами, а потом вычесть из now().
    Тут есть полезные примеры.
    Ответ написан
    Комментировать
  • Помогитe с запросом группирования и суммирования в MongoDB?

    @lega
    Можно сделать 2 простых запроса: find({ from:"email" }).count() и find({ to:"email" }).count()
    А лучше, в "профиле email/пользователя" хранить счетчик входящих/исходящих.
    Ответ написан
    Комментировать
  • SQL или NOSQL для хранения и анализа логов действий игроков. На чем лучше организовать бд аналитики?

    @lega
    Многое зависит от отчетов. Например для вашей задачи хранить сырые данные вообще не нужно.

    Если отчеты ещё не определены или все же нужны сырые данные, то можно сделать партиционирование, например складывать все логи по одному игроку за один день в один документ в бинарном виде (time_delta, action) при этом зажать в gzip/zlib/...
    В итоге из 500Гб может получится 5Гб, а скорость вырастет за счет легких индексов и меньшего кол-ва передаваемых данных/документов. - недавно делал подобное.

    Так же можете сбросить userFlag в 0 для коллекции - сэкономите памяти, при этом монга не будет делать доп. резеривирования в каждом документе.
    Ответ написан
    1 комментарий
  • Как упростить код?

    @lega
    Как то так:
    totals = defaultdict(int)
    for order in orders:
        for k in ['qty', 'total_amount', 'cost', 'profit']:
            totals[k] += getattr(order, k)
    Ответ написан
    5 комментариев
  • Знаете ли вы js библиотеку с two way binding, хранящую все данные в html?

    @lega
    Таким образом ей можно было бы подсунуть, допустим хтмл сгенерённый на сервере.
    Идея интересная, можно использовать ng-init или сделать аналог, сделал пример на angular light
    Likes: <span al-take-value="likeCount" al-text="likeCount">15</span>

    До загрузки приложения отображает "Likes: 15", когда приложение загрузится, директива al-take-value возьмет значение элемента, когда с сервера будет прилетать информация, то текст будет обновляться с пом. директивы al-text, хотя для более сложных данных вариант с json + ng-init может быть удобнее.

    Или другие библиотеки могли бы менять html, а эта библиотека работала бы с ним так же как если бы изменения сделаны были через неё.
    Можно сделать спец. директивы для этого, но я думаю что это плохое решение, тем более оно не будет работать например с jquery компонентами такими как select2, там идет подмена элементов, есть реализации datepicker где нужно работать через js, и т.д.
    Ответ написан
    Комментировать
  • Unique или null для поля. Возможно ли такое в mongo?

    @lega
    К ответу выше, ещё вариант - хранить не значение, а список.
    В итоге пустой список будет пропускаться (не будет входить в uniq), а так же появляется доп. возможность - один документ сможет "резервировать" несколько уникальных значений. Например при уникальности email, в уникальность можно будет добавить аналоги uniq_email:['mail@yandex.ru', 'mail@ya.ru']
    Ответ написан
    Комментировать
  • Как осуществить удаленный доступ к MongoDB?

    @lega
    Ещё можно сделать ssh тунель в одну команду, я так иногда автоматические дампы с удаленного сервера делаю.
    Так же можно настроить openvpn или т.п.
    Эти способы лучше по безопасности и удобнее если у клиента динамический ip.

    PS: В mongodb не рекомендуют использовать авторизацию по логину+паролю.
    Ответ написан
    Комментировать
  • Angular. Как передать параметр в функцию из шаблона и вызвать get?

    @lega
    Вы можете изменить метод после первого вызова, что-бы он отдавал результат, например так:
    $scope.myFunc = function(id) {
        var result = 'loading...';
        $scope.myFunc = function() { return result };
        $http.get($scope.url).success(function (data) {
            result = data;
        })
        return result
    };
    Ответ написан
  • Индексация сайта при использовании AngularJS?

    @lega
    Пробовал разные варианты, самым удобным оказалось sitemap + phantomjs
    Ответ написан
    Комментировать
  • Стоит ли сохранять в mongodb значения с null, или игнорировать их при записи?

    @lega
    Если вы будете искать по пустому полю, то null нужен.
    Если эти поля заполнятся в будущем, то можно положить null, чтобы меньше раздуть padding factor.
    Так же с null, объекты выглядят "целее".
    Ответ написан
    Комментировать