Задать вопрос
  • Как увеличить скорость скрипта tornado python?

    @lega
    По сути там 4 вещи которые могут "тормозить": cpu, диск, сеть, сервера (откуда скачивается).

    1) Посмотрите не загружено ли одно ядро на 100% (речь не про весь процессор), если есть 100% то нужно "форкать".
    2) Отключите сохранение:
    def data_process(data, url, headers):
        pass
    Если при этом cpu < 100% а сеть не загружена по максимуму - значит (промежуточные) сервера отдают медленно.
    Ответ написан
  • Оптимальный способ хранения небольших растровых изображений. Объем > 400 Gb. БД или FS?

    @lega
    Можно взять MongoDB, плюсы такие:
    * При большой нагрузке или объеме можно будет данные разлить по шардингу. Это так же может помочь сэкономить, например можно вместо одного сервера DO за $480 можно взять 24 минимальных виртуалки за $120, + будет больше ядер и трафика.
    * Можно хранить доп. параметры, теги, (атрибутивную информацию) и прочее вместе с файлом, таким образом тайл и все с ним связанное будет в одном блоке данных, в отличие от применения *sql. Это хорошо для производительности, т.к. меньше индексов и меньше обращений к ФС.
    * Можно сделать доп. индексы
    * Можно использовать гео-индексы, выборка тайлов по радиусу и т.п.
    * Так же для данной задачи (вполне возможно) достаточно атомарных комитов, они лучше по производительности чем полноценные транзакции.
    Ответ написан
    3 комментария
  • Как можно оптимизировать сортировку в запросе к MongoDB?

    @lega
    По хорошему фильтр и сортировка должны соответствовать индексу.

    Если нужна максимальная скорость то нужно упростить запрос, избавится от $or и доп. условий, например сделать так:
    1) в документ сохранять готовое значение sender+recipient которое проходит условие, например: { _search1: {user_id1: user_id1, user_id2: user_id2} } (записать ид пользователей в порядке нарастания), заполнять этот массив если выполняются условия с mType, deleted, read, action.
    2) Сделать индекс: db.mail.ensureIndex({_search1: 1, "date" : -1 })
    В итоге запрос выдаст результат быстро и с учетом всех условий:
    collection.find({ _search:{user_id1: user_id1, user_id2: user_id2} }).sort({date: -1})

    Если сортировать идентификаторы не хочется, то можно сделать массивом:
    { _search:[sender, recipient] }, и запрос
    collection.find({ _search:{$all: [sender, recipient]} }).sort({date: -1})
    , для этого случая возможно лучше будет такой индекс: db.mail.ensureIndex({ "date" : -1, _search1: 1 })
    Ответ написан
    1 комментарий
  • Как скрыть один value при выборе другого value?

    @lega
    Вот пример на Angular Light, работает без JS и jQuery.
    Если нужна более сложная логика то добавьте JS :)
    Не стал делать "очистку" параметров, т.к. для этого уже лучше js (контроллер) применить, хотя можно сюда же в шаблон запихать.

    // Поправил пример, добавил очистку значений
    Ответ написан
    2 комментария
  • Есть какая нибудь возможность подружить bottle и tornado?

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

    @lega
    findAndModify() не подходит ибо возможна ситуация когда мы выполняем запрос и не получаем ответ или отваливаемся
    ответ вы обязательно получите если все прошло гладко.
    Нужно ли что-б при обрыве откатывалось значение или достаточно что-бы лок снимался?

    Снятие лока при разрыве и креше можно делать по разному:
    Например можно ставить лок с таймаутом при котором лок будет не активен например через минуту, этот вариант не плох с учетом того что это очень редкая ситуация (простые разрывы связи не должны влиять, они автоматом поднимаются).
    Если идет первый запуск (например после ребута сервера), то можно просто снести все локи.
    Можно выделить отдельный процесс который будет отвечать за key/value (может выдать 10-30Kops/sec).
    Можно ещё придумать варианты с привязкой к процессу и т.п.
    Ответ написан
    Комментировать
  • Есть ли уникальный идентификатор у DOM элемента относительно всего документа?

    @lega
    В правильных браузерах можно WeakMap или Symbol использовать для привязки данных к DOM.
    Ответ написан
    Комментировать
  • Можете посоветовать распределенное сетевое хранилище?

    @lega
    Mongodb шардинг, там атомарная транзакционность (+она производительней обычных транзакций), только "умершие локи" нужно будет вручную снимать (либо по таймауту).
    Ответ написан
    Комментировать
  • Не обновляется отображение из scope в Angular?

    @lega
    В каталоге в итоге массив лежит или нет?
    $scope.catalogItems = [data.Items[0]];
    Ответ написан
  • В чем могут помочь js фреймворки(React, Angular)?

    @lega
    это можно сделать и через jQuery.
    Вот вам вопрос чтобы почувствовать: "Зачем вы используете Rails если тоже самое можно сделать и на asm или C? "

    "Фреймворки" могут упростить, ускорить разработку. Попробуйте на jQuery сделать такой пример, обратите внимание что такие простые "задачи" можно делать вообще без использования JS-кода (т.е. шаблона достаточно).

    Если вопрос "стоит ли изучать" - стоит (если вы делаете что-то серьезное на клиенте).
    Ответ написан
    2 комментария
  • Одновременный доступ к переменной javascript?

    @lega
    Не потеряется, код выполняется в одном потоке по очереди.

    PS: так же можете глянуть на Angular Light если оригинал чем то не понравится.
    Ответ написан
  • Grunt vs Gulp vs Prepros vs Codekit?

    @lega
    Использую Gulp, раньше пробовал Grunt.
    Так вот Grunt плох тем что это тупой конфиг, зачем это когда можно использовать JS, чуть в сторону и этих конфигов уже не достаточно. Вообщем это как сравнивать JS с Json по возможностям :)
    Ответ написан
    Комментировать
  • Как подружить AngularJS и кастомные инпуты?

    @lega
    Можете попробовать Angular Light, вот пример только отображает элементы. А так если нужно получать значения.

    Отнаследовал стандартный al-radio jsfiddle с двухсторонним связыванием для Jquery Form Styler.
    Ответ написан
  • Как хранить и быстро обрабатывать большое количество (> 10-100M) статистики рекламной системы?

    @lega
    Я делал примерно так:
    Каждый час я формировал чанки с несколькими разрезами, в вашем случае можно взять например "дата время" и "номер рекламного места" (зависит от запросов), в итоге 1 "колонка" "исчезнет", вместо даты можно хранить diff от начала часа.
    Чанки максимально сжимались и разливались по шардингу.
    В результате хранимый объем был в 5-10 раз меньше исходного.

    Формирование отчета: Сервис на питоне, из БД за период доставались чанки, распаковывались передавались в расширение на C который обсчитывал и возвращал результат.
    По скорости выходило примерно 250 млн "событий" доставались и обсчитывались за 2-4 сек на одном ядре виртуалки от DO.

    Каждый час (период времени) для каждого отчета формировались результаты/кешы во всех разрезах - это позволило выдавать результаты клиентам моментально. Весили они мало если сравнивать с весом исходных данных.

    Т.е. каждый час формировались свежие данные, но кроме этого ещё были реал-тайм отчеты - копия входного потока уходила на этот сервер который "считал цифры" и обнулял их каждый час.
    Ответ написан
    Комментировать
  • Как можно ещё сократить количество строк в коде?

    @lega
    fu1 и fu2 можно объединить в
    def fu2():
        while True:
            try:
                a = int(raw_input("Введите число: "))
                assert a > 0
                return a
            except (ValueError, AssertionError):
                pass
    Ответ написан
    1 комментарий
  • Как сделать потоковое изменение введенного текста на Angularjs?

    @lega
    Вариант на Angular Light
    Ответ написан
    Комментировать
  • Как создать смену фонового изображения при click?

    @lega
    Вот без JS (на Angular Light)
    al-click="page='p1'" - при клике устанавливаем переменную.
    al-css="active: page=='p1'" - Если page=='p1' добавляем класс active (для кнопок)
    class="{{page}}" - подключаем класс из переменной
    Ответ написан
    Комментировать
  • Где и как держать большую базу данных?

    @lega
    Все равно не достаточно информации, что у вас там в json и как вы используете данные.

    Вот некоторые советы:
    1) Прочитайте про партицирование, возможно вашу колонку ownerID можно вообще выкинуть, и разбить все данные на таблицы owner1, owner2..., таким образом можно сэкономить на индексах и данных, + можно будет проще размазать базу по серверам (шардинг), да и работать так будет быстрее.
    2) Делайте архивирование json, это может уменьшить объем данных в 2..10 раз.
    3) Складывайте старые данные в архив, например месяц прошел, делайте результирующие отчеты, кеши и т.п. что может запросить клиент, а сами данные отправляйте в архив.
    4) Попробуйте другую бд: с postrgresql - можно использовать сжатый json по которому можно сделать индексы, таким образом ваши varchar'ы оптимизируются. с nosql/mongodb тоже есть плюсы, например 1 "запись" будет занимать 1 блок памяти, а не несколько как в sql базах, + тут выше скорость записи.

    Так же по принципу партицирования можно делать чанки данных, например если вам данные нужно выбирать по дням и владельцу, то по окончанию дня можете паковать данные в чанки: data, ownerID, archived_json. таким образом размер индексов может уменьшится в 100 раз, данные в 10..20 раз, + скорость получения данных может вырасти до 50х раз (был у меня подобный проект).

    Этими советами можно 1Тб "превратить" (например) в 10Гб - зависит от данных и использования.
    Ответ написан
    Комментировать
  • Как изменить содержание div элемента по нажатию?

    @lega
    Если я правильно понял, то вот пример.
    На Angular Light это делается просто - 2 "команды" и без JS:
    При клике устанавливаем переменную: al-click="active='A'"
    Блок отображается если у active соответствующее значение: al-if="active=='A'"
    Ответ написан
    1 комментарий