• Насколько безопасно сохранять модель в отдельном потоке?

    @lebron32rus
    Senior Software Engineer
    Я бы начал с БД. Проанализировал план запроса, оптимизировал запрос. Выявить причину по которой БД долго выполняет запрос - первостепенно.
    Ответ написан
    1 комментарий
  • Для чего идеальна MongoDb? Примеры приложений, где монга будет лучше mysql?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Я расскажу Вам про личный опыт, без претензий на истину в последней инстанции...

    Для чего идеальна MongoDb? Примеры приложений, где монга будет лучше mysql?
    Для человека который привык работать с реляционными БД, смириться с логикой и вообще с подобными БД - довольно сложно. Для тех, кто работает с реляционными БД профессионально - сделать это ещё сложнее...

    Если сравнивать с реляционными БД и с оглядкой на конкретно MySQL - монга идеально вписывается там, где структура данных заранее неизвестна. Тут я хотел привести пример, но не смог придумать ни одного дельного примера, после того как начал плотно работать с PostgreSQL... Давайте попробую из практики. Мы один раз применяли монгу в проекте где есть десятки и сотни тысяч товарных позиций и у каждой из них свой уникальный набор различных свойств. На основе уже имеющихся свойств, "соседних" товаров, контентщику предлагался наиболее вероятный набор параметров, которые нужно заполнить, но в любой момент он мог удалить или добавить любое поле и/или множество значений одного из них, например, "Цвет: черный, серый, фиолетовый". Всё это дело попадало под разные динамические фильтры и далее по цепочке... В то время, насколько я помню ещё не было поддержки JSONB-формата у PostgreSQL, по этому мы остановились на MongoDB. Ну и конечно же, желание "воткнуть ультра новую и модную БД в проект" сыграло свою роль...

    Что в монге определённо не нравится (и это не моя "идея", об этом пишут даже в учебниках под монге) - это тотальная денормализация данных. Которая в некоторых случаях может сыграть злую шутку. Например, все комментарии "поста" обычно хранятся прямо в самой сущности поста. Это очень удобно и довольно быстро работает, но... иногда это приводит к полному коллапсу. Особенно, когда у Вас перекрестная ссылочность.

    Безусловно, не редко можно встретить проекты в которых даже в реляционных БД не прописаны, например, внешние ключи и контроля целостности данных как такового нет, но обычно это происходит по следующим причинам:
    1. Очень низкая квалификация администратора БД проекта
    2. В попытке выжать из базы больше производительности, не найдя других методов оптимизации
    3. Данных настолько много, что БД/ключи - начинают "сыпаться", не редко это связано с п.1

    Так же, последние тесты показывают, что PostgreSQL почти не уступает MongoDB даже в её родной среде (на уровне данных в формате JSON). А в некоторых аспектах даже превосходит её... Подробности Вы можете увидеть на некоторых конференциях по Postgres (да, на конференциях по MongoDB, Вы вряд ли увидите, как кто-то будет рассказывать, что [их любимая] монга "хуже" некоторых других движков...). Кстати, поддержку формата JSON стандартизировали (наконец-то) на уровне SQL-стандарта (если я не ошибаюсь) и в самом ближайшем будущем, думаю стоит ожидать полноценную поддержку оного в SQL-базах, в т.ч. поддержку в бинарном виде с возможностью индексации данных (кстати, некоторые SQL-базы уже такое умеют).

    Моё понимание, ответа на вопрос, "когда действительно стоит использовать MogoDB?" звучит примерно так: Исключительно в тех случаях, когда Вы понимаете, что она станет действительно хорошим решением для поставленной задачи и сейчас и в будущем. В моей практике, таких проектов можно было бы насчитать ничтожно мало, а точнее около нуля, особенно с учётом развития некоторых современных SQL-БД и вообще направления "JSON в SQL" в целом. Но, безусловно такие проекты могут быть и есть (в данном случае, не у меня). Но, тут стоит обратить внимание на крайне важный факт - когда всплывает такой проект, что бы адекватно оценить наиболее оптимальную БД под него - нужно знать как минимум пару-тройку SQL-БД, со всеми их особенностями, достоинствами и недостатками... причем не просто "знать", а хорошо знать, "изнутри". А так же знать все характерные черты монги, а так же её особенности, достоинства и т.д. То есть, если Вы задаётесь вопросом, "а хорошо ли впишется монга в проект N?" и не можете найти на него однозначного ответа, вероятнее всего, что в долгосрочной перспективе, в "проект N" она впишется плохо.

    P.S. В заключение, хочу ещё раз напомнить, что "JSON в SQL" - активно развивается... Со всеми вытекающими.
    Ответ написан
    7 комментариев
  • Можно ли сохранить граф или дерево в файле?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Можно
    Ответ написан
    Комментировать
  • NGINX: как узнать какие файлы (из каких папок) скачивают пользователи?

    Прежде чем удалять /data/2017, мне нужно точно убедиться, что данные берутся именно из /mnt/2017.


    1. Отключите в конфиге nginx использование /data/2017 и станет сразу все понятно, откуда будут браться ваши данные.
    2. Не удаляйте /data/2017, а просто переименуйте например в /data/2017.old, поживите так N дней, проверьте что все работает корректно.
    3. Анализируйте access.log на предмет 404 для файлов которые лежали в /data/2017, а сейчас уже берутся из /mnt/2017
    4. Только убедившись, что все хорошо, удаляйте /data/2017
    Ответ написан
    Комментировать
  • Поможет ли замена Apache на Nginx?

    Insaned
    @Insaned
    Доктор, у меня что-то болит, я думаю это из-за неудобной обуви...
    Если вы будете менять софт потому что вы так чувствуете - вы ничего не добьетесь. В каком режиме вы используете php ? Какая версия всего? Как настроено? Покажите что-ли вывод top и phpinfo.
    Ответ написан
    Комментировать
  • Высокоуровневый язык программирования?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Потому, что "высоко-/низко-уровневый" это просто условная и достаточно относительная классификация языков по одному конкретному качеству - по уровню абстракции, предоставляемой языком его пользователю. А когда всплывает слово "абстракция", обязательно нужно задуматься над тем, что от чего абстрагируется. В данном случае речь идет об абстрагировании конструкций языка от среды выполнения программы, написаной на этом языке. Например, во всех этих ЯВУ есть такие абстракци, как именованная переменная, тип данных, конструкции управления потоком выполнения или вызов функций системы/стандартных библиотек и т.д. Мы просто пишем int а = 3; или while(flag == true)..., а обо всем остальном заботится язык. Для сравнения, в ассемблере (низкий уровень) нам приходится иметь дело с конкретными регистрами, битами, адресами и jump-ами, и никакой среды, которая пришла бы нам на помощь, там тоже нет. В этом смысле уровень абстракции того же С намного выше.

    Классификация эта (как и любая другая) - условная, т.к. если по этому признаку сравнить, например, те же Яву или Шарп с теми же C++ или Паскаль, то можно бы было сказать, что уровень абстракции первых "несколько выше" - между программой на первых языках и "средой" есть еще промежуточный уровень (байткод/IL), а программы на вторых компилируются прямо в инструкции конкретного процессора. Только смысла в таком утверждении уже не так много, и для указания на эти качества языков проще и полезнее классифицировать их как "компилируемые в инструкции виртуальной машины" и "компилируемые в инстрикции процессора".

    И, наконец, сортировка массива - это уже совсем из другой оперы. К языку тут (если вообще!) относится только абстракция "массив". В большинстве языков есть такое понятие, как стандартная библиотека (JDK, stl, те же модули в пыхе и т.д.). Функции вроде сортировки массива, предоставляются не языком, а именно этой библиотекой (как правило, написанной на этом же языке и/или на более низкоуровневых). А, собственно, языком называется очень-очень маленький набор универсальных семантически однозначных конструкций, типа операторов сравнения, циклов или вызовов функций. Фактически, любой современный язык можно "выучить" за день... остаток жизни уйдет на то, чтоб научиться правильно пользоваться им и его библиотеками для написания нужных программ ))
    Ответ написан
    Комментировать
  • Зачем в Linux ограничение на количество открытых файлов?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Лимит на количество открытых файлов есть во всех операционных системах, в Windows в том числе. А нужен он потому, что на каждый открытый файл в специальной области памяти ядра операционной системы создаётся дескриптор. Область эта не безгранична и если её исчерпать, система может высыпаться в корку. Никому не понравится операционка, которую можно завалить просто открывая файлы и не закрывая их.
    Ответ написан
    Комментировать
  • Как извлечь статистику количества неактивных пользователей по интервалам времени?

    Immortal_pony
    @Immortal_pony Куратор тега MySQL
    SELECT 
         SUM(CASE WHEN `last_sign_in_at` <= DATE_SUB(NOW(), INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS '> 3 days',
         SUM(CASE WHEN `last_sign_in_at` <= DATE_SUB(NOW(), INTERVAL 90 MINUTE) AND `last_sign_in_at` >= DATE_SUB(NOW(), INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS '> 90 min',
         SUM(CASE WHEN `last_sign_in_at` <= DATE_SUB(NOW(), INTERVAL 30 MINUTE) AND `last_sign_in_at` >= DATE_SUB(NOW(), INTERVAL 90 MINUTE) THEN 1 ELSE 0 END) AS '> 30 min'
    FROM `table`
    Ответ написан
    1 комментарий
  • Как преобразовать массив в Relation?

    Dem1
    @Dem1 Куратор тега Ruby on Rails
    Ruby on Rails developer
    Нельзя преобразовать array в ActiveRecord::Relation. Т.к Relation это build для SQL запроса.
    Ответ написан
    1 комментарий
  • Заражение вирусами в ОЧЕНЬ большой сети?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    1. Админов расстрелять, по теме
    после модернизации количество работ было таким большим, что одноранговую сеть так и оставили.

    Какой то мудак (его уже выгнали) поднял игровой сервер в сети, расшарил инет через мобильный LTE интернет и запустил вирус криптолокер в сеть.


    2.
    Операционную систему менять нельзя ни в коем случае, так как большинство лабораторных/диагностических программ очень старые, драйвера старые, под новыми системами не хотят дружить.

    Если простоя стоит миллионы долларов, то что мешает заплатить пару миллионов на решение это проблемы?
    Тут расстреливаем менеджеров, ну тех которых не расстреляли в п.1.

    3.
    На большинстве компьютеров антивирусная защита отсутствует как таковая, так как на большинстве рабочих станций стоит Windows 98 & XP

    Древняя ось, без обновлений (на большинстве уверен вообще обновы не ставились со времени установки), без банального антивируса.
    Чего вы ещё хотели то?

    Вирусные эпидемии как в вашей ситуации не лечатся путём "а прогоним отот комп антивирусом", их лечат путём "отрубить нахрень всё и переустанавливаем системы ибо хрен пойми какая сигнатура у этой дряни".

    Вы влетели по полной программе и решение тут только одно - модернизация железа/ПО, грамотный подход к сети.
    Ответ написан
    Комментировать
  • Заражение вирусами в ОЧЕНЬ большой сети?

    saboteur_kiev
    @saboteur_kiev Куратор тега Информационная безопасность
    software engineer
    Какая бы не была организация, не верю что ВСЕМ компам нужно связываться со ВСЕМИ компами.
    Ставите адекватные маршрутизаторы, разбиваете сеть на VLAN-ы, лечите их отдельно.

    Старые ОС можно запускать в виртуалках, с отключенной сетью. А на самом железе - нормальная, современная ОС.
    Во многих случаях комп с диагностическим оборудованием может быть совсем отключен от сети.
    Ответ написан
    Комментировать
  • Какое средство выбрать для хранения файлов и директорий?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Архив без сжатия.
    Ответ написан
    Комментировать
  • Как выполнить полный мониторинг страницы?

    NeiroNx
    @NeiroNx
    Программист
    Для этого используется такой же скрипт как у "Яндекс.Метрика". Скрипт проверяет на уровне браузера ошибки загрузки и отображения и сообщает о них на сервер мониторинга.
    Ответ написан
    Комментировать
  • Зачем нужно установить Sphinx на компьютер, если ты его пишешь в Gemfile (Ruby on Rails)?

    DevMan
    @DevMan
    в геме только адаптер для работы с сфинксом, и, ясен пень, что нужен и сам сфинкс.
    Ответ написан
  • Почему не работает деплой capistrano?

    @mirbook Автор вопроса
    Блин ответ нашел в одном из похожих вопросов:
    копируешь ~/.ssh/id_rsa.pub у себя на локалке и отдаешь его в ~/.ssh/authorized_key о уже на своем vps
    Ответ написан
    Комментировать
  • Экскурс на русском языке: суть, настройка, и использование Docker?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer
    Докер - виртуализация приложения. Приведу пример.

    Вы разрабатываете некое веб-приложение на java, и вам его нужно тестировать под java7, java8 и под tomcat 7, tomcat 8.

    Вы можете купить 4 компьютера, поставить на них 4 варианта, протестировать. Затем все поставить заново для следующего теста. Неудобно, долго, дорого.

    На помощь приходит виртуальная машина - вы можете купить 1 компьютер, на нем завести 4 виртуалки, каждую из них настроить, сохранить образы. После тестирования просто восстанавливаете исходное состояние из образов.
    Гораздо дешевле, чем раньше. Но каждая виртуальная машина требует процессоры, память, кучу места на диске под операционку. А ведь отличается по сути всего 2 компонента.

    На помощь приходит докер. Один комп, одна операционная система. 4 докер контейнера с нужной версией java и томкат. После тестирования контейнер можно удалить и развернуть заранее подготовленный.
    Дешевле и быстрее, чем все вышеперечисленное. Потому что операционка одна, нет лишних расходов на CPU и память. Ужиматься дальше практически некуда.

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

    Виртуализация приложений через докер позволяет избежать dll-hell, изоляция дисковой системы и окружения.

    P.S. Пример очень простой и надуманный, так как конкретно java и tomcat можно и без докера просто запустить несколько разных версий на разных портах, но суть вы должны уловить. Докер - виртуализация на уровне файловой системы, самая дешевая виртуализация.
    Ответ написан
  • На чем лучше разработать веб приложение C# программисту?

    @JihadTV
    Странный вопрос. Ответы:
    1) ASP.NET Core
    2) Любой
    3) Любой из мейнстримных
    Ответ написан
    Комментировать
  • Локальная разработка и Docker?

    @micronull
    Я использую для локальной разработки docker. Это значительно удобнее, чем держать полноценное окружение из зоопарка разных версий php и прочих штук.
    Если сайт старый, под какие-нибудь древние версии apache, php и mysql. Не проблема, - смотрю на hub, если нет, то собираю свой.
    При этом спокойно можно переключить на другой проект, более современный. Например с nginx, php7 и postgresql. Предварительно выключив предыдущий контейнер.

    Далее в перспективе можно спокойно кинуть контейнер на сервер и за пару минут развернуть сервис.

    В общем настоятельно рекомендую попробовать docker при локальной разработке.
    Ответ написан
    9 комментариев
  • Обработка текста на Java?

    al_gon
    @al_gon
    Всё завистит от количества работников.
    Если помещаются в память, то попробуйте java-string-similarity иначе поисковый сервер.

    И вообще, все метрики основанны на сравенении 1:1. Тоесть если у вас есть 1К работников, это 1К проверок.
    Для скорости нужен поисковый индекс, он не обязательно должен быть полноценным поисковым движком, но принцыпы Inverted_index должен реализовывать (Example: Inverted_index#Java).
    Так как вы ищете не по словам, а в словах, то нужна более точная единица, чем слово, а именно N-gram.
    Ответ написан
    Комментировать