LINUX.ORG.RU

По моему современные кодеры настолько увязли в своих ORM, что даже ленятся связи делать на уровне БД.

Откуда такая информация?

znenyegvkby
()

fk нормально не работают при горизонтальном масштабировании, при работе с k-v. А так как в моде именно хайлоад, считается что ФК фообще не нужны, и целостность то что называется eventual.

shimshimshim
()

Foreign Key умирает как часть технологии реляционных СУБД. Это факт. Ибо избыточна и хулиганит бритву оккама. MySQL тут со своими InnoDB потугами выглядит забавно.

Вангую так же смерть триггеров и хранимок.

r_asian ★☆☆
()

А в некоторых проектах опенстека отсутствие Fk — осознанный выбор.

Breton
()
Ответ на: комментарий от Jopich

Напрямую тоже можно. Ну а совместимость ОРм между собой - тут ничего не сделаешь.

pi11 ★★★★★
()
Ответ на: комментарий от pi11

Поддерживают скорее всего на уровне запросов генерят. Штук 5 запросов на один fk. Разве это быстрее будет работать чем fk в бд?

Jopich
() автор топика
Ответ на: комментарий от Jopich

Это тебе какие-то говно ОРм попадались. Кстати где так сделано?

pi11 ★★★★★
()

кодеру вообще дела не должно быть до каких-то там кеев - его дело crud и желательно БД-независимо. А бидеинженерам на ваши orm пофигу в любом случае

vostrik ★★★☆
()
Ответ на: комментарий от r_asian

FK вообще плохо себя чувствуют в MVC-парадигме.

Ахаха.

tailgunner ★★★★★
()
Ответ на: комментарий от Jopich

Ну так это все очень сильно связано между собой. Можно и из mysql сделать nosql, если не использовать фк и джойны, и делать выборки только по пк. Во многих случаях будет ничем не хуже. Подозреваю, что отсутствие ФК в схеме это задел на горизонтальное масштабирование.

shimshimshim
()
Ответ на: комментарий от Jopich

Штук 5 запросов на один fk.

Что за ужас, не драматизируйте. Назовите конкретную ORM, где вы это видели?
К слову говоря, определенные накладные расходы есть и при использовании FK (правда такие копеечные, что скорее всего вы даже их не заметите и на длинных бенчах), но адекватные оптимизаторы получают нехилое преимущество при составлении плана для «кривых» запросов. Посмотрите вот эти тесты:
http://www.scarydba.com/2010/11/22/do-foreign-key-constraints-help-performance/
Кайт Томас отвечая на вопрос в Effective Oracle by Design

Are the consultants who are advising getting rid of the keys paid by line of code?

сказал следующее, цитирую:

This could be true - the more they write, the more they make, the more they have to maintain, and the jmore they have to debug. As the earlier example of auditing showed, sometimes you can do in one line of code that uses a database feature what might take dozens or hundreds of lines of code otherwise. If the database does something, odds are that it does it better, faster, and cheaper than you could do it yourself.

Лично я с ним полностью согласен. Лучше довериться нативному решению, которое, кстати, в ряде случаев может дать заметный выигрыш. Что же касается ORM — это в основном надуманные проблемы, особенно связанные со сменой db. Скажите, в реальной жизни много ли вы видели готовых проектов меняющих db после нескольких лет успешного использования? Не спорю, такое возможно, но эти исключения — ужасные ошибки молодости, вот это все...

znenyegvkby
()

По моему современные кодеры настолько увязли в своих ORM, что даже ленятся связи делать на уровне БД.

По-моему как раз для избавления от ненужной работы и придумали ORM.

Ghostwolf ★★★★★
()

peewee с postgresql реализует внешний ключ средствами postgresql. Что не так?

Shadow ★★★★★
()

1. Потому что это нифига не прозрачно.
2. Вот недавно была проблема: берется бд, дампится структура, заливается в тестовую бд, которая для каждого разраба своя, типа dbname_developerlogin. Фк при этом смотрит на таблицу в оригинальной бд. Как результат ловим кучу непонятных паданий тестов.

drull ★☆☆☆
()
Ответ на: комментарий от znenyegvkby

Скажите, в реальной жизни много ли вы видели готовых проектов меняющих db после нескольких лет успешного использования?

видел не сменяющие, а поддерживающие паралельно
на ум пришел gitlab: там mysql or postgres

kiotoze ★★★★
()

Это то, что ты сам придумал, и еще пытаешься других в этом убедить.

spider_russia
()
Ответ на: комментарий от drull

Вот недавно была проблема: берется бд, дампится структура, заливается в тестовую бд, которая для каждого разраба своя, типа dbname_developerlogin. Фк при этом смотрит на таблицу в оригинальной бд

Думаю, кака цитата больше подходит случаю - эта или эта

tailgunner ★★★★★
()
Ответ на: комментарий от znenyegvkby

Что за ужас, не драматизируйте. Назовите конкретную ORM, где вы это видели?

Django удаление по ключу зависимых таблиц

Jopich
() автор топика
Ответ на: комментарий от kiotoze

при больших нагрузках половина запросов заменяется в любом ORM на «оптимизированные под коркретную БД» и смена БД там уже не получится.

Jopich
() автор топика
Ответ на: комментарий от drull

Хм... а ты не из этих неотроглодитов, которые считают, что все проверки целостности должны выполняться приложением?

tailgunner ★★★★★
()
Ответ на: комментарий от drull

формошлепов пустили к биде

у формошлепов ниработаит

форенкеи гамно!!!1111

vostrik ★★★☆
()
Ответ на: комментарий от tailgunner

Приложению должно быть наплевать с высокой колокольни на то что находится по ту сторону драйвера бд.

drull ★☆☆☆
()
Ответ на: комментарий от Jopich

Нагуглил, будто джанга ставит no-action на удаление, и сама рулит зависимостями. Ну жесть, что тут сказать :) Ну а если ты поставишь cascade в базе ручками, это завалит джангу? Вообщем это очередная конкретная проблема конкретного фрейма. Я уверен — спецы по ней тебе сейчас подскажут как эту проблему разрулить. Я сам пойду погуглю насчет этого вопроса.

znenyegvkby
()
Ответ на: комментарий от drull

а какое к этому имеет отношение ваше неумение базу сдампить нормально?

vostrik ★★★☆
()
Ответ на: комментарий от znenyegvkby

Скажите, в реальной жизни много ли вы видели готовых проектов меняющих db после нескольких лет успешного использования?

мы тут на одном из самых нагруженных проектов с частичным даунтаймом (R/O на пару минут) переходили mysql->postgres. Три месяца ресерча, безумные скрипты для починки легаси-неконсистентностей и патчи на tungsten. В общем, задачка реализуемая, но еще раз это проделать - ну нахер.

leave ★★★★★
()
Ответ на: комментарий от znenyegvkby

Ну а если ты поставишь cascade в базе ручками, это завалит джангу?

south даже сам умеет предлагать cascade и потом корректно хэндлит результат. Но упасть может :)

leave ★★★★★
()
Ответ на: комментарий от znenyegvkby

Ну а если ты поставишь cascade в базе ручками, это завалит джангу?

Там проблема в том что это хрен отключишь - т е чтобы отключить «удаление с помощью ORM и включить удаление средствами БД» нужно ставить костыль. ВОт такое отношение создателей этого ORM к БД.

Jopich
() автор топика
Ответ на: комментарий от drull

особенно если драйвер БД не умеет транзакции, и тут тебе написать бы CAS loop, но тебе наплевать с высокой колокольни xD

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

особенно если драйвер БД не умеет транзакции

То это совсем печально.

drull ★☆☆☆
()
Ответ на: комментарий от stevejobs

Хибернейт сам расставляет FK,

хибер говно, потому что путает нужные типы данных и т.п. + не умеет апдейт схемы, в итоге приходится делать схему руками + flydb или liquibase. Ну а руками каждый делает как может, даже dba буржуйские, сам неоднократно убеждался.

Deleted
()
Ответ на: комментарий от Jopich

ВОт такое отношение создателей этого ORM к БД.

Погуглил. Сначала нашел более менее адекватное объяснение целенаправленного использования именно эмуляции.

Django emulates ON DELETE CASCADE in Python — that's why is doesnt need it set on the database tables. In fact, setting RESTRICT might even make sense, since it means that you can't accidentally delete any related objects without being warned about it in the admin.

Подумал что не могли пользователи отказаться от нативных решений, начал гуглить тикеты, и наткнулся на этот
https://code.djangoproject.com/ticket/21961
После кривых патчей можно будет юзать?

...
    related = models.ForeignKey(Related, on_delete=DB_CASCADE)
...
Так что и на вашей улице тоже будет праздник. Хотя да

нужно ставить костыль

Это, конечно же, печально.

znenyegvkby
()
Ответ на: комментарий от leave

В общем, задачка реализуемая, но еще раз это проделать - ну нахер.

Вот вот. Это ж

Три месяца ресерча, безумные скрипты для починки легаси-неконсистентностей и патчи на tungsten.

убиться просто можно. Хотя сам факт mysql -> postgres не может не радовать :)

znenyegvkby
()

За другие ORM не скажу, но ActiveRecord делает fk средствами базы (проверено на мускуле и постгре).

DoctorSinus ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.