• Для чего идеальна 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 комментариев
  • Деление в столбик java?

    Djaler
    @Djaler
    Сеньор-помидор
    1. Возьмите 2 числа.
    2. Поделите одно на другое в столбик на листике.
    3. Запишите действия
    4. Подумайте над ними
    Ответ написан
    3 комментария
  • Почему сейчас открывается так много школ по программированию?

    delphinpro
    @delphinpro
    frontend developer
    Тут все просто - это относительно простой способ срубить бабла с населения.
    Люди начитаются историй успеха в интернетах про всяких там цукербергов и дуровых и толпами валят в эти школы.
    Ответ написан
    Комментировать
  • Какой выбрать язык программирования новичку?

    DevMan
    @DevMan
    дурнопахнущий код делает человек, а не язык.
    если вы думаете, что на шарпе у вас со старта будет конфетка, у меня для вас плохие новости.
    Ответ написан
    8 комментариев
  • Всегда ли следует применять инкапсуляцию?

    @frozen_coder
    Java-developer
    Есть стандарт Java Bean. Так что в бинах только через геттеры и сеттеры, никаких public полей. Поле public вообще редкость. Если вас утомляет писать или генерить сеттеры и геттеры, то пользуйтесь Lombok.
    Ответ написан
    1 комментарий
  • Стоит ли делать составные внешние ключи в БД?

    Melkij
    @Melkij
    PostgreSQL DBA
    1. внешние ключи должны быть там и те, чтобы гарантировать ссылочную целостность. Должна быть ссылка сочетанием именно двух параметров - значит должна быть ссылка сочетанием пары параметров. Лучше или хуже сюда не применимо. Два разных fk и один составной имеют различное поведение.
    2. для какой именно СУБД? Postgresql следуя стандарту SQL обязывает ссылаться только на уникальное поле. Mysql отступает и в этом вопросе от стандарта и позволяет проверять неуникальное индексированное поле.
    3. см. coding standart конкретного проекта. Обычно никто не обижается против именования: имя таблицы _ имена полей _fk
    4. можно упереться в предел размера индексируемого поля. У postgresql это 1/3 размера странички памяти = 2730 байт по дефолту, у mysql - зависит от кучи факторов.
    Ответ написан
    Комментировать
  • Как реализовать работу баз данных с разными дисками?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ответ написан
    Комментировать
  • Нужна ли математика в enterprise?

    @frozen_coder
    Java-developer
    Стоит соваться. Я не думаю, что много народа в enterprise помнят хоть что-то из матана.
    , хорошо понимал дискретную и теорию чисел, булевую алгебру ,
    - то что надо. Ни разу не приходилось писать что-то математическое. А вот знания из этих дисциплин пригодились. Люблю конечные автоматы). Булева алгебра - это фундамент. Не зная её, вообще нечего делать в программировании. Так что у вас всё гуд.
    Где может понадобится всякая математика, так это во всяких 3D графиках, в задачах где надо строить какие-то сложные мат. модели. Для всяких корпоративных порталов и прочего этого не нужно.
    Enterprise - это совсем не то. Что вам действительно надо, так это знать базы данных. Алгоритмы и паттерны. Ну и язык с его экосистемой, xml и проч. Ну вы поняли.
    P.S. Сижу на java. Помню только фамилию преподавателя матана)
    Ответ написан
    1 комментарий
  • Как вывести домашний сервер в глобальную сеть?

    petermzg
    @petermzg
    Самый лучший программист
    "Белый" IP + Проброс нужных портов через NAT
    Ответ написан
    Комментировать
  • Как можно обратиться к методу бина из другого бина?

    @aol-nnov
    а где же сам DI?

    наличие сеттера еще ничего не гарантирует в этом плане
    Ответ написан
    2 комментария
  • На каком языке пишут код для авто?

    @Fixid
    На всем подряд, хотя обычно C
    Сейчас часто панель управления имеют свои личные мозги со своей закрытой ОС которую еще надо взломать. Просто так взять и поменять не получится. В лучшем случае вы получите дамп прошивки в виде hex.
    Приведите конкретный пример железяки
    Ответ написан
    4 комментария
  • Как узнать при запуске программы на какой операционной системе она запускается?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    System.getProperty("os.name");
    System.getProperty("os.version");
    Ответ написан
    Комментировать
  • Как выбрать, где найти проект на java?

    Комментировать
  • В какой ВУЗ поступить на программиста?

    @asd111
    В любой из топов России: МГУ, МГТУ им. Баумана, СПБГУ, ИТМО, ВШЭ, МИЭТ, МИФИ, и т.д.
    Ответ написан
    2 комментария
  • Каким Code convention лучше следовать в JAVA?

    @di23
    Нет команды?
    Какому конкретно соглашению придерживаться нет разницы (выберите удобный для себя), главное придерживаться этого соглашения всегда. В этом суть.

    АПД: И не заморачивайтесь вы на этом долго.
    Ответ написан
    Комментировать
  • Как записать правильно формулу на Java?

    NeiroNx
    @NeiroNx
    Программист
    f = a*Math.tan(x)+b*Math.abs(x);
    Ответ написан
    Комментировать
  • Нужен ли VACUUM/FULL, ANALYZE, REINDEX после восстановления из дампа (pg_dump)?

    Melkij
    @Melkij
    PostgreSQL DBA
    vacuum - нет. Зачем, все данные были записаны только что, старым версиям строк взяться неоткуда.
    analyze - лучше сделать, об этом есть упоминание в документации https://www.postgresql.org/docs/current/static/app... : "Once restored, it is wise to run ANALYZE on each restored table so the optimizer has useful statistics"
    reindex - нет, не нужен. Индексы создаются при restore в нормальном виде.
    Ответ написан
    Комментировать
  • Программирование под windows на java?

    @zelan
    Кратко обо мне не получится.
    Eclipse наверно будет самым нетребовательным. Либо в Sublime все ручками, но это ужасно на мой взгляд.
    Ответ написан
    Комментировать