Ответы пользователя по тегу MySQL
  • Множестов объектов одним запросом (insert/update)?

    un1t
    @un1t
    Вставить много новых товаров не проблема, хоть милион.
    Предварительно выбираем id уже существующих в базе товаров в set.
    Затем используй bulk_create, кнечно не миллион сразу вставляй, а пачками по 1000-10000 за раз.
    А вот обновить 40 тыс товаров в mysql/postgres удобных механизмов нет.
    Если нам надо обновлять не всю информацию, а скажем только наличиие то можно сделать так.
    Создаешь отдельную таблицу про наличие товара, туда вставляешь через bulk_create. После того как все вставил, старую таблицу грохаешь, а новую переимновываешь в старую.
    Ответ написан
  • Для каких задач больше подойдет MySQL а для каких PostgreSQL?

    un1t
    @un1t
    Задачи примерно одинаковые. Для интернет магазина подойдет любая. Обе СУБД проверенны временем и используются в том числе на крупных и highload проектах.
    Для дешевых сайтов лучше MySQL, т.к. есть на любом хостинге. Т.е. если вы пишите коробочную CMS на PHP, то лучше MySQL. Если облачный конструктор сайтов, то без разницы.

    MySQL поддерживает и транзакции и полнотекстовый поиск и гео данные, но что-то релизовано в движке MyISAM, а что-то в InnoDB. Т.е. если нам надо и то и то, то придется юзать разные движки на таблицы, а это ломает например ссылочную целостность. В простгресе один движек и все это есть.

    У MySQL еще некоторое время назад был самый топорный, читай медленный алгоритм join'ов. В этом плане Postgres был впереди. Ну как впереди, он давал преимущество на коряво написанных приложениях с большим количеством join'ов. Можно ли считать это преимуществом вопрос. Но в последний версиях MySQL 5.6 появились более быстрые виды join'ов. Лично мне это все до лампочи, потому что join'ы во первых были медлеными, а во вторых не масштабируются, поэтому я их не использовал. Да и Django умеет делать быстрый джойн на уровне приложения простым методом ORM - prefetch_related.

    JSONB - технология Postgres, которая позволяет сохранять JSON в таблицу. Я бы не назвал это особым преимущестовм, в MySQL хоранить JSON не проблема, в обычно текстовом поле, только обработку делай на уровне приложения и все. В Джанге, опять же это делается установкой какой-нибудь батарейки django-jsonfield или написанием 15 строчек кода единоразово. Т.е. явно сильного преимущества тут нет, тем более, что такие штуки в любом случае удобнее в Монге хранить.

    Массивы в Postgres. Было бы прикольно, если бы могли не только хранить, но и строить по ним индекс, как в Монге. Но нет, Постгрес предлагает строить по ним полнотекстовые индексы. Ну а если речь идет про полнотекстовый поиск, то на любом большом сайте уже есть поисковый движек, например Sphinx или ElasticSearch, соотвестваенно, я могу масивы и в MySQL серелизовать в строку и индексировать их этим движком.
    Тут преимущество явно на стороне Монги (хотя ее мы тут не рассматриваем), Постргесу еще расти.

    Постгрес умеет строить индексы по XML и видимо JSON. Подумаешь, если какая уже говорил, у нас на проекте есть полнотекстовый движек, то мы можем построить индекс по чему угодно и без Постгреса.

    Полнотекстовый поиск. Вот тут у Postgres действительно есть преимущество как перед MySQL, так и перед MongoDB. Постгрес подерживает русский язык на уровне стемминга, что во многих случаях волне достаточно. Если надо морфологию, то уже поисковые движки надо использовать, а не БД. MySQL не поддерживает языки, а MongoDB поддерживает русский, но не поддерживает оператор AND (блин как это вообще может быть?!).

    Вобщем пока таким явным преимущестовм Постгреса я вижу полнотекстовый поиск, для проектов в которых почему-то нет полноценных полнотекстовых движков. Но с установкой любого движка, это преимущество исчезает.
    Ответ написан
    6 комментариев
  • Как организовать ступенчатую модель комментирования а-ля "Хабр" в связке PHP + MySql?

    un1t
    @un1t
    Погуглите на тему nested sets. На всяких фреймворках и ORMах есть готовые реализации. Наример в cakephp, doctrine есть, а в других типа yii есть сторонние расширения (или может быть уже встроили тоже).

    Вот полезные ссылки по деревьям:
    Ответ написан
    Комментировать