Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Привет всем. Подскажите начинающему программисту, а зачем нужны ORM'ы в виде Doctrine и ему подобные? Ведь куча всякого кода, зачем... Если можно в одной странице прописать <?php $r=mysql_query("SELECT * FROM dummy WHERE bar = 'baz'"); $a = mysql_fetch_assoc($r) require "header.php"; в header.php файле принять переменную <p> Здесь: <?php echo $a['foo']; > </p> Зачем городить огороды с ORM'ами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 23:12 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZ$r=mysql_query("SELECT * FROM dummy WHERE bar = 'baz'"); параметры и PDO - не осилил? тогда только ORM спасёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 23:15 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
ИзопропилNekZ$r=mysql_query("SELECT * FROM dummy WHERE bar = 'baz'"); параметры и PDO - не осилил? тогда только ORM спасёт А что это? Мой вариант работает безо всяких сложностей! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2015, 23:45 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZПривет всем. Подскажите начинающему программисту, а зачем нужны ORM'ы в виде Doctrine и ему подобные? Ведь куча всякого кода, зачем... Если можно в одной странице прописать <?php $r=mysql_query("SELECT * FROM dummy WHERE bar = 'baz'"); $a = mysql_fetch_assoc($r) require "header.php"; в header.php файле принять переменную <p> Здесь: <?php echo $a['foo']; > </p> Зачем городить огороды с ORM'ами?ИМХО тут сначала надо на вопрос "Зачем мне ООП?" ответить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 04:43 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
А что это? Мой вариант работает безо всяких сложностей! ну да, работает, пока он у тебя один, и тебе надо выбрать данные из пары-тройки таблиц по простому условию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 08:21 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
-k2-, Пффф... JOIN в помощь мне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 09:38 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANA, Логично. Зачем мне в шаблонизаторе PHP ООП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 09:39 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZ, ну то есть вы каждый запрос ручками писать будете на каждый чих? как у вас симпатично динамические фильтры будут смотреться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 12:50 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
динамические фильтры это еще ничего. вопрос что делать, когда один и тот же запрос надо использовать в разных местах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 12:56 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZПривет всем. Подскажите начинающему программисту, а зачем нужны ORM'ы в виде Doctrine и ему подобные? Ведь куча всякого кода, зачем... Если можно в одной странице прописать <?php $r=mysql_query("SELECT * FROM dummy WHERE bar = 'baz'"); $a = mysql_fetch_assoc($r) require "header.php"; в header.php файле принять переменную <p> Здесь: <?php echo $a['foo']; > </p> Зачем городить огороды с ORM'ами? на ошибки выполнения проверять будем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 13:56 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Ой... И правда. А я ещё nginx конфиг не скинул, чтобы скрипт вообще работал. И DDL для таблицы. Shame on me. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 13:59 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
ScareCrowдинамические фильтры это еще ничего. вопрос что делать, когда один и тот же запрос надо использовать в разных местах. тогда лучше заняться сельским хозяйством ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 14:48 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Многобукаф, ниасилил. Единственное, что бросилось в глаза: alex564657498765453Я: - фуфло ваши ORM alex564657498765453я не говорю что ОРМ плохо. Помню на предыдущей работе, когда я работал в вебдев-компании, у операторов PHP программистов PHP был вступительный экзамен "Напиши ORM за 6 часов". Потом подняли планочку "напиши ORM за 4 часа". Видимо, это уже менталитет велосипедостроительный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 16:38 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
модель, однозначно нужна. ну по простому - модель file Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. общая логика работы как с обычным файлом, но! где он храниться? на винчестере, в базе? на стороннем сервере? а имя єто его имя, или один из тегов ассоциированый с ним? кто знает, мы в модель не заглядываем. поэтому не в курсе. вот в этом плане модель нужна! но зачем если в файловом хранилище есть команда move, реализоваывать ей в модели через copy+delete если база само может тригером изменение поля залогировать, то зачем это в модель тащить если база сама может в полночь прошерстить юзеров и построить статитстику, то зачем писать пхп демон, который заставит базу делать тоже самое?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 16:40 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Прочитал твой поток сознания пост. Что бы хотелось заметить -- ты мыслишь больно узко, смотря только на связку PHP/MySQL и всего, что отсюда вытекает, поэтому и выводы делаешь соответствующие. Вопрос стоял шире -- зачем-нужен-ORM? Если мы обратимся к DDD подходу, тут рассматривается построение модели предметной области и вся бизнес-логика будет заложена именно в клиентском коде (толстом клиенте), т.е. не в базе данных, на триггерах, хранимых процедурах, представлениях и прочем. Подход с перекладыванием бизнес-логики в БД, привязывает вашу программу к именно этой базе. А что если сойдутся звёзды, и, тебе придётся переходить на PostgreSQL, то все ваши хранимочки придётся переписывать на другой встроенный язык БД? No way! Перекладывание вычислительной мощности на клиентский код решает множество проблем, в т.ч. и распределение нагрузки. Отслеживание онлайна юзеров -- почему бы не использовать memcache/redis для этого и хранить все ID пользователей в быстрой памяти. На базе сферического в вакууме ORM'а можно построить неплохую модель предметной области, полностью абстрагируясь от используемой системы хранения данных, будь она в памяти, на диске, а может быть сразу на разных серверах и в памяти клиентского кода одновременно, со всеми кэшами, триггерами/коллбэками и прочим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:49 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Если говорить именно про орм! object-relational mapping то необходимость очевидна! Какой то участок кода в твоем приложении так или иначе должен маппить реляционную форму полученных данных на желаемый объект! Будем использовать при этом свой код или возьмем сторонний значения не имеет... + нужны ли нам в приложении именно объекты из полученных данных - решает сам программист или руководитель проекта;) https://ru.m.wikipedia.org/wiki/ORM - почитать;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 17:52 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZskyANA, Логично. Зачем мне в шаблонизаторе PHP ООП?Вам видимо не нужен, другим он зачем-то понадобился. Топег можно закрывать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2015, 23:23 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZalex564657498765453, Прочитал твой поток сознания пост. Что бы хотелось заметить -- ты мыслишь больно узко, смотря только на связку PHP/MySQL и всего, что отсюда вытекает, поэтому и выводы делаешь соответствующие. Вопрос стоял шире -- зачем-нужен-ORM? Если мы обратимся к DDD подходу, тут рассматривается построение модели предметной области и вся бизнес-логика будет заложена именно в клиентском коде (толстом клиенте), т.е. не в базе данных, на триггерах, хранимых процедурах, представлениях и прочем. Подход с перекладыванием бизнес-логики в БД, привязывает вашу программу к именно этой базе. А что если сойдутся звёзды, и, тебе придётся переходить на PostgreSQL, то все ваши хранимочки придётся переписывать на другой встроенный язык БД? No way! Перекладывание вычислительной мощности на клиентский код решает множество проблем, в т.ч. и распределение нагрузки. Отслеживание онлайна юзеров -- почему бы не использовать memcache/redis для этого и хранить все ID пользователей в быстрой памяти. На базе сферического в вакууме ORM'а можно построить неплохую модель предметной области, полностью абстрагируясь от используемой системы хранения данных, будь она в памяти, на диске, а может быть сразу на разных серверах и в памяти клиентского кода одновременно, со всеми кэшами, триггерами/коллбэками и прочим опять же, ктото может адекватный пример привести замены субд? а то все говорят что фашисты высадились, а никто их не видел. и как верно подметил, если взглянуть в расшифровку ОРМ, так вот от этой функции я бы не отказывался... работать не с масивом или обьектом который стд-класс, а по конкретней. я противник именно того что всё тащат в этот орм. вот это зачем??? простой пример. есть у нас люди, и есть у них поле возраст. и каждый год от даты регистрации юзера надо в это поле единичку добавлять(ну не лезем мы в душу к человеку и не спрашиваем дату рождения) вот зачем вместо задания по расписанию в базе, куролестить извне ??? другой пример, логирование изменений каких либо...например история пополнений щёта. третий, зачем орм проверяет уникальность емейла нового юзера, вместо вставки записи и в случае ошибки анализировать её(что ты там говорил про разгрузить базу???) четвертый - обновление преагрегированных данных. пятый - скажем у меня есть юзер, и ему мой вебсервис выделяет ресурс - айди юзера ставиться значением внешнего ключа в таблицу ресурсы одной из записей. и логика такова, что если юзеру даёться новый ресурс, то старый автоматически освобождаеться(внешний ключ - нулл) - ресурсы, номера дозвона через интернет(факсы например без факсового аппарата и телефоной линии). вот почему бы базе не делать это автоматически, зачем чтобы ОРМ сделал тоже самое. а вообще вдумайтесь в свои слова - абстрагируемся от хранилища данных. тоесть мы ложим на его особености и прочее...ну и зачем нам тогда может понадобиться переходить на другое??? если мы всеравно особеностей не используем. мы же абстрагировались, мускл не умеет работать с масивами, или джейсонб типом, и мы его не используем, ну и на кой тогда на постгри надо переходить? а если ваш орм может работь с джейсонб данными, то закаким можно будет перейти на мускл который в помине незнает что это такое??? может тогда орм должен досоздать табилцы у мускла, дабы имитировать поддержку джейсонб с индексацией??? ну тоесть как можно переходить на другую субд ,если мы вообще кроме анси скл не используем больше ничего. ради чего?? ради производительности? так я вам сразу скажу, безполезно, любая более быстрая субд стоит дороже чем увеличить нагрузку добавочным сервером. оракал умеет с деревьями работать, ну напишите ОРМ абстрагировавшись от этого факта. некоторые субд умеют пронумеровать записи, мы тоже абстрагируемся в наших ОРМ от этого. ЗЫ а для чего вообще придумали процедурное расширение языка скл все субд??? а для чего вообще существуют тригеры? просто - а когда надо это использовать?, может я действительно смотрю узко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 23:37 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Ты не так понял мои и последующие слова). Не переход на другую субд, а поддержка разных. Представь, что у тебя есть своя CMS, которя работает только с MySql, и появляется заказчик с принципиальным желанием работы на MsSql. Как вопрос решать? Отказываться от проекта? А теперь представь что это CMS, которая идёт в продажу/распространение, как думаешь, сколько людей предпочтут другую CMS твоей, из-за неуниверсальности? А теперь вопрос: как должен быть реализован фреймворк, что бы можно было создавать такие универсальные CMS на его основе? Ответив на все вопросы, думаю ты поймёшь пользу от переноса всего функционала на сторону клиента (php). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 07:52 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Програмёр, Тоесть ОРМ не нужен! но изза того что это хорошо для бизнеса, надо делать? то есть если я понял, то по хорошему - речь идёт о драйвере субд(например выставить кодировку клиента) + построитель запросов. это надо уневирсализировать?? простая версия, вообще не использовать особеностей субд. сложнее версия, аля доктрина - это умение построить запрос правильней для конкретной субд. ну тогда да, согласен. что подобная универсализация нужна, но опять вопрос - причом тут ОРМ. это речь идёт о построителе запросов, чтобы наш ОРМ, мог сформировать команду вставки под любую субд с опцией он дупликей кей апдейт например. а в ОРМ зачем тащить фукнции по контролю целостности данных? давай детальней. 1)- зачем орм учим при вставке отдельным запросом проверить уникальность емейла, вместо просто вставки, а в случае ошибки, драйвер текущей субд нам сообщит - мол UK_user_email а у нас есть масив сообщений про ошибку, что если с этим индексом трабла возникла - выдать, такой емейл уже есть.? 2)- зачем в ОРМ тулим, что после вставки связанной записи, для преагрегированного счётчика числа дочерних елементов надо +1 сделать и подобные действия...когда всегда изменение данных требует действия в другой таблице(другой записи) (NSTree например) а вообще это мудизмом попахивает, клиент не хочет ЦМС потому что там мускл, а ему надо мс-скл . обясню почему - клиент покупает систему. как я автомобиль вместе с двигателем. для моего удобства машина комплектуется разными двигателями, изза чего разная цена. ещо разные опции есть, изза чего может отличатся прошивка - никто не универсализирует прошивку. так и цмс комплектовать с разными субд. я понимаю универсальное крепление на военном автомобиле, под разные башни оружейные - от пулемёта, до систем залпового огня. но не понимаю цмс + работа с субд, не использующая особенности субд, возможностей субд - вместо этого имитирующая их. если посмотреть глобальней. тригерры - какие есть субд без тригеров, что клиент может захотеть? хранимые функции и процедуры? задания по расписанию? (типо сесии в базе удалять на каждом 100 запросе которые старше часа...верх нежелания работать с базой. понимаешь о чом я? чем тратить время на написания кода делать чтото, что могла бы субд сделать, лучше потратить время и написать код для разных субд которые хотим поддерживать. кстате о деревьях - интересно наверно запустить цмс на оракал, которая умеет работать с деревьями, и делать это на пхп всё вручную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:03 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, 1. Для работы с php на высоком уровне достаточно иметь одного узко квалифицированного работника, а для работы с mysql + php на том же уровне - двух узко квалифицированных, или одного "профи на все руки". (важно для бизнеса. определяет стоимость разработки и сложность найма исполнителя) 2. Удобство "цельной логики". Объект является самодостаточной сущностью, и ему не нужно ничего дополнительного извне (в том числе из возможностей БД). (мне было бы не удобно, меняя логику работы модуля, менять его модели, а потом ещё и в базу бежать и смотреть, не связано ли там это изменение с чем либо. А так открыл модель, и всё видно) 3. При разворачивании CMS на новом хосте, ты представляешь какую адскую работу нужно будет провести по созданию разных триггеров, связей и т.д.? Разумеется это можно сделать автоматом (скриптом), но если CMS работает с 4-мя типами баз, то это же надо предусмотреть для любой из них. Ну вот вроде 3 основных момента на мой взгляд: простота, удобство, универсальность (краткий итог описанных пунктов) А насчёт мудизма клиента, не обязательно так. Может у него уже сервер/сервера работают, и там уже установлена, настроена и обслуживается админом некая база данных. Ставить ещё одну - лишние сложности... легче заюзать то, что есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:57 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453, 1. Для работы с php на высоком уровне достаточно иметь одного узко квалифицированного работника, а для работы с mysql + php на том же уровне - двух узко квалифицированных, или одного "профи на все руки". (важно для бизнеса. определяет стоимость разработки и сложность найма исполнителя) 2. Удобство "цельной логики". Объект является самодостаточной сущностью, и ему не нужно ничего дополнительного извне (в том числе из возможностей БД). (мне было бы не удобно, меняя логику работы модуля, менять его модели, а потом ещё и в базу бежать и смотреть, не связано ли там это изменение с чем либо. А так открыл модель, и всё видно) 3. При разворачивании CMS на новом хосте, ты представляешь какую адскую работу нужно будет провести по созданию разных триггеров, связей и т.д.? Разумеется это можно сделать автоматом (скриптом), но если CMS работает с 4-мя типами баз, то это же надо предусмотреть для любой из них. Ну вот вроде 3 основных момента на мой взгляд: простота, удобство, универсальность (краткий итог описанных пунктов) А насчёт мудизма клиента, не обязательно так. Может у него уже сервер/сервера работают, и там уже установлена, настроена и обслуживается админом некая база данных. Ставить ещё одну - лишние сложности... легче заюзать то, что есть :) 3. слышал серьёзные цмс таки используют тригеры и хранимые процедуры! 2. цельная логика ... это даже не аргумент, а два слова для видимости аргумента. ибо процедурный подход это уже не цельность логики, ради модификации любой части, а уж ормы сегдняшние которые привязаны к валидациям, драйверам баз данных, кверибилдерам, кешированием... это уже и речи не идёт о цельности. или если два пхп файла, это это для тебя цельная логика, а если пхп файл, + кусок кода на другом языке,или в базе, то это уже не цельная? 1. слышал сильные программисты - знают больше одного языка програмирования, и с базами работать таки умеют. так что это не существующее понятие пхп сильный ускоспециализированный програмист. это как штмл узкоспециализированый сильный верстальщик. не возможно научиться делать хорошо верстку не имея понятия(или очень минимальные) про стили. а сильного верстальщика можно себе представить без умения более менее работать с джаваскриптом -пускай через джейквери, но таки работать. что он сильно наверстает? картинку с подписью и всплывающей подсказкой. Я так понял программер, вы просто никогда не делали ничего работая с базой на ты. (ну я понятно дело делал раз сторонник, а ввиду моего скромного меншинства вынужден был делать без базы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 15:51 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453опять же, ктото может адекватный пример привести замены субд? а то все говорят что фашисты высадились, а никто их не видел. Ну вдруг твой начальник-гомофоб прочитал, что выбор MySQL больше используется в конторах с разработчиками-содомитами. Он сразу же скажет тебе "Удаляй мускул, ставь PostgreSQL/MSSQL/SQLite/etc.". А ты такой "не могу...". alex564657498765453и как верно подметил, если взглянуть в расшифровку ОРМ, так вот от этой функции я бы не отказывался... работать не с масивом или обьектом который стд-класс, а по конкретней. Что по-конкретней? alex564657498765453я противник именно того что всё тащат в этот орм. вот это зачем??? Что тащат? Кучу зависимостей от сторонних либ, или что? Или оверхеда много и перфоманс проседает? alex564657498765453простой пример. есть у нас люди, и есть у них поле возраст. и каждый год от даты регистрации юзера надо в это поле единичку добавлять(ну не лезем мы в душу к человеку и не спрашиваем дату рождения) вот зачем вместо задания по расписанию в базе, куролестить извне ??? Зачем вообще хранить в базе такое легко вычислимое поле? Что куролесить ты собрался? alex564657498765453другой пример, логирование изменений каких либо...например история пополнений щёта. Это пример чего? Там где нельзя использовать ОРМ, или что? alex564657498765453третий, зачем орм проверяет уникальность емейла нового юзера, вместо вставки записи и в случае ошибки анализировать её(что ты там говорил про разгрузить базу???) Ха, а тут уже всё зависит от твоего ОРМа. Если ты правильно в нём опишешь существующую модель, то он сам будет перехватывать ошибку нарушения уникальности поля, учитывая, что современные ОРМы расширяемые, как на уровне бэкэндов к конкретным базам, так и на общем уровне логики. alex564657498765453пятый - скажем у меня есть юзер, и ему мой вебсервис выделяет ресурс - айди юзера ставиться значением внешнего ключа в таблицу ресурсы одной из записей. и логика такова, что если юзеру даёться новый ресурс, то старый автоматически освобождаеться (внешний ключ - нулл) - ресурсы, номера дозвона через интернет(факсы например без факсового аппарата и телефоной линии). вот почему бы базе не делать это автоматически, зачем чтобы ОРМ сделал тоже самое. Костылями пахнет. alex564657498765453а вообще вдумайтесь в свои слова - абстрагируемся от хранилища данных . тоесть мы ложим на его особености и прочее...ну и зачем нам тогда может понадобиться переходить на другое??? если мы всеравно особеностей не используем. мы же абстрагировались, мускл не умеет работать с масивами, или джейсонб типом, и мы его не используем, ну и на кой тогда на постгри надо переходить? Именно! Абстрагируемся. Мы, программисты, стараемся всё абстрагировать по слоям, стараясь сузить обязанности каждого программного слоя. Насчёт особенностей, читай выше, как ты расширишь свой бэкэнд работы с БД, так и будет. alex564657498765453а если ваш орм может работь с джейсонб данными, то закаким можно будет перейти на мускл который в помине незнает что это такое??? может тогда орм должен досоздать табилцы у мускла, дабы имитировать поддержку джейсонб с индексацией??? Насчёт мускуля не могу ничего, но Postgres уже научился это делать (повод перейти на него?). alex564657498765453ну тоесть как можно переходить на другую субд ,если мы вообще кроме анси скл не используем больше ничего. ради чего?? ради производительности? так я вам сразу скажу, безполезно, любая более быстрая субд стоит дороже чем увеличить нагрузку добавочным сервером. оракал умеет с деревьями работать, ну напишите ОРМ абстрагировавшись от этого факта. некоторые субд умеют пронумеровать записи, мы тоже абстрагируемся в наших ОРМ от этого. ЗЫ а для чего вообще придумали процедурное расширение языка скл все субд??? а для чего вообще существуют тригеры? просто - а когда надо это использовать?, может я действительно смотрю узко. Опять смотрим наверх. Все СУБД-специфичные вещи можно вынести в бэкэнд ОРМа, работающий именно с этой СУБД. А уж как он внутри это всё реализует (сам клиентскими мощностями делает это, либо же перекладывает ответственность на СУБД, либо говорит "Sorry, I can't do that, my lord"), нас сверху не должно волновать. Триггеры можно заменить на эвенты, например . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 19:03 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZ, да, видимость ответа есть, да ладно...подобное уже с програмером выше обсуждалось. вопрос ребром ещо стоял. а когда надо использовать тригеры, хранимки и прочее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 19:32 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZ, всмысле согласись, ответ никогда очевидно абсурден, но пока ты не видишь этой границы, или хотябы единичных примеров, когда нужно в базу логику затолкать, у тебя нет точки зрения зачем нужен орм, и что в него надо затолкать, а что нет - ибо ты просто всё туда суёшь, мол так мне показали. я всегда так делал, сайт не падал изза этого. ЗЫ и я уже писал - абстрагироваться, это громкая фраза без смысла. вот знаю проект, где абстргировались от фреймворка. а вот так вот, между сайтом и фреймворком реальным фреймворк виртуальный, на нём написан сайт, а виртуальный с реальным через драйвер соединяется. а что - тоже пацаны абстрагировались - но зачем? ясен пень что в этом гавнокоде(не по качеству кода а поего востребованости) вылазят баги. и душу греет, что можно будет легко перейти на другой времворк...всегото драйвер для него надо будет написать, тем самым создать кучу новых багов, но зато скажем от симфони уйти и перейти на зенд. вообще, есть термин абстракция, а абстрагироваться - это бытовой спор на кухне о политике. программисты не абстрагируются, а строят абстракцию(ый) елемент, а потом конкретизируют его работу - но это для повторного использования кода, а не для замены субд, или абстрагироваться ради абстрагироваться. ==== на зы не надо отвечать...ответь на главный вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 19:40 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453вопрос ребром ещо стоял. а когда надо использовать тригеры, хранимки и прочее? Ответ мой таков -- когда другого выхода нет. Злоупотреблять ими ни в коем случае нельзя. Только легковесные триггеры/хранимки, одну-две штуки на весь проект, лишь в качестве неизбежных костылей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 19:58 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453если посмотреть глобальней. тригерры - какие есть субд без тригеров, что клиент может захотеть? хранимые функции и процедуры? задания по расписанию? (типо сесии в базе удалять на каждом 100 запросе которые старше часа...верх нежелания работать с базой. понимаешь о чом я? чем тратить время на написания кода делать чтото, что могла бы субд сделать, лучше потратить время и написать код для разных субд которые хотим поддерживать. кстате о деревьях - интересно наверно запустить цмс на оракал, которая умеет работать с деревьями, и делать это на пхп всё вручную?Давайте ещё глобальнее: данные распределены по MySQL, Redis, Sphinx и т.д. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2015, 13:20 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453Програмёрalex564657498765453, 1. Для работы с php на высоком уровне достаточно иметь одного узко квалифицированного работника, а для работы с mysql + php на том же уровне - двух узко квалифицированных, или одного "профи на все руки". (важно для бизнеса. определяет стоимость разработки и сложность найма исполнителя) 2. Удобство "цельной логики". Объект является самодостаточной сущностью, и ему не нужно ничего дополнительного извне (в том числе из возможностей БД). (мне было бы не удобно, меняя логику работы модуля, менять его модели, а потом ещё и в базу бежать и смотреть, не связано ли там это изменение с чем либо. А так открыл модель, и всё видно) 3. При разворачивании CMS на новом хосте, ты представляешь какую адскую работу нужно будет провести по созданию разных триггеров, связей и т.д.? Разумеется это можно сделать автоматом (скриптом), но если CMS работает с 4-мя типами баз, то это же надо предусмотреть для любой из них. Ну вот вроде 3 основных момента на мой взгляд: простота, удобство, универсальность (краткий итог описанных пунктов) А насчёт мудизма клиента, не обязательно так. Может у него уже сервер/сервера работают, и там уже установлена, настроена и обслуживается админом некая база данных. Ставить ещё одну - лишние сложности... легче заюзать то, что есть :) 3. слышал серьёзные цмс таки используют тригеры и хранимые процедуры!Мы используем MongoDB, Couchbase и Elasticsearch :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2015, 13:22 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANA, продаолжаем. Давайте глобальней. данные кочуют порой из реляционной субд в другие субд возможно реляционные а может и нет. если ОРМ выполняет прямое своё значение, это замечательно. возращается обьект юзер из любой базы или сохраняется в любую, ибо ОРМ знает как одно отображается в другое. а вот если, юзер в базе мускла, где привязки - у юзера всегда в поле храниться текущее число постов, которое должно обновляться при каждом новом посте, и этот же юзер и посты есть в архиве где не должно обнавляться - это база другая. работал бы орм по назначению, просто легко, эффективно. а добавляя муть с автообновлением, это бери постоянно счётчик обновляй. Но вашу мысль я тоже понял, что если вставка этого самого поста должна обновить счётчик в другой базе. к счастью, базы могут между собой общаться, и далеко не факт, что нагрузка на сами базы, что клинт подключится и попросит счётчик обновить(за один пост естественно, пхп обрабатывает один пост вставленый), а что базы сами между собой будет, и тогда можно делать это скопом. но да ладно. перейдём от теории к практике. Yii - что фреймворк галимый я знал ещо со времён слышал самый популярный. на работе столкнулся... документации вразумительной на сайте, что бы пройти так званый порог вхождения море. от того наверно люди, которых называют Yii-шники пишут код под иии, что в результате функционалом иии пользуются меньше. чем у меня был на предыдущем проекте самопальный наспех фреймворк написан. и не все из них глупые, добрая часть могла бы научиться если бы было по чём. Пример, в руководсве юникса не просто написано unlink file - удаление файла, а с понятием относятся, что большинство из виндоус приходят, и дописывают, что процес удаления отличается от привычного в виндоус... аналогично при разбиении винчестера , отражены отличия от других популярных систем - как разбивается винчестер. тоесть читая руководство - понимаешь не только синтаксис команды, но и идеологию её работы, и работы системы в целом. НО ОРМ, иишный. позавчера узнал что этот шлак не умеет даже работать с базой толком - он не знает что ответ может быть множественным, и надо выбрать все результаты перед следующим запросом - результат, мультизапросы не работают. но вчера узнал что и апдейт множественный не сделать с джоином. тоесть база знает про связанные сущности, то толку от этого нифига нету, кроме как выборка множественная, можно считать что работает впринципе. вот написано кода по дебагу фигова туча, и идеи не плохие, но всё сыровато... возможно в 2.0 уже получше ситуация. так вот на тему ОРМ я забыл один из аргументов - а зачем нужно недоделанное, когда есть доделанные инструменты, работающие быстрее и точнее(никогда из пхп вы не добьётесь более надёжного обновления счётчика чем тригером - база гарантирует что два дейтсвия пройдут одновременно, а вот на пхп... это надо чтобы все разработчики и админы хором дружно гарантировали, что никогда не включатся постоянные соединения, никто не поставит автозавершение транкзанкций, и подобное. тоесть единные настройки всей этой байды, и единый стиль. (а то не прикольно будет если используемы внешний код в проекте, который написан под этот же фреймворк и его ОРМ или другой стороний, но использующий другую логику по "авто" с транкзанкциями.) я не говорю что на пхп нельзя сделать это надёжно, я лишь говорю что это всегда будет не надёжней чем инструментами базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 09:12 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453skyANA, продаолжаем.Да Вы не продолжаете, Вы с другой стороны зашли :) Если ошибаюсь, то объясните где связь с предыдущими Вашими постоми, что я процитировал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 09:21 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453НО ОРМ, иишный. позавчера узнал что этот шлак не умеет даже работать с базой толком - он не знает что ответ может быть множественным, и надо выбрать все результаты перед следующим запросом - результат, мультизапросы не работаютиспользуйте ORM, что поддерживает multiple result sets :) alex564657498765453так вот на тему ОРМ я забыл один из аргументов - а зачем нужно недоделанноеиспользуйте доделанный ORM :) alex564657498765453никогда из пхп вы не добьётесь более надёжного обновления счётчика чем тригером - база гарантирует что два дейтсвия пройдут одновременно, а вот на пхп...покажите код триггера, что обновит счётчик и в базе, и в кэше Redis, и в индексе Sphinx ORM - это тупо инструмент, который надо применять где следует, при этом для различных операций следует применять различные ORM-стратегии Тоже самое с триггерами и хранимками Возводить одно в абсолют, а другое называть шлаком - это глупо, не профессионально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 09:38 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANA, Как ты вообще распарсил его поток сознания??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 10:15 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAalex564657498765453НО ОРМ, иишный. позавчера узнал что этот шлак не умеет даже работать с базой толком - он не знает что ответ может быть множественным, и надо выбрать все результаты перед следующим запросом - результат, мультизапросы не работаютиспользуйте ORM, что поддерживает multiple result sets :) alex564657498765453так вот на тему ОРМ я забыл один из аргументов - а зачем нужно недоделанноеиспользуйте доделанный ORM :) alex564657498765453никогда из пхп вы не добьётесь более надёжного обновления счётчика чем тригером - база гарантирует что два дейтсвия пройдут одновременно, а вот на пхп...покажите код триггера, что обновит счётчик и в базе, и в кэше Redis, и в индексе Sphinx ORM - это тупо инструмент, который надо применять где следует, при этом для различных операций следует применять различные ORM-стратегии Тоже самое с триггерами и хранимками Возводить одно в абсолют, а другое называть шлаком - это глупо, не профессионально ооо, вот наконецто пришли к противоречию. я во всех своих постах писал, что ОРМ как конвертер програмного обьекта из/в стуктуру реляционной базы хорошо, а вот тащить туда то, что можно делать другими иструментами, притом массово плохо. А это вы батенька, изволите считать, что ОРМ это хорошо, а остальное - один две максимум тригреа на проект как неизбежный костыль!!! и пример вами приведёный, касается случая, сохранения обьекта в разные хранилища - простая аналогия, файл юзера для отправки почты, сохраняем и в облако и влокальный кеш, ведь при отправке письма нам этот файл нужен будет, а это скорей всего произойдет через минуту, то что б не тащить из облака, и да - глупо говорить что давайте в операционке чтото допилим, чтобы при сохранении файла на винчестер в папку кеш, копия кидалась в облако. это логически две разные модели, закешированный файл, и файл в облаке, которые поидее должны уметь преобразовываться одна в другую. я же говорил о случаях когда изменения касаются жосткой логики целостности данных принадлежащих разным моделям. визуально, если у нас есть несколько хранилищ и наш код , то код будет в центре , а хранилища по кругу лучиками из центра подсоеденены. и стаёт очидно что в коде должна быть логика взаимосвязи между данными. НО ОРМ то тут причом? ваш пример кеш и реляционная база. где в кеше реляционность, а в ОРМ буква Р это и означает. это уже не ОРМ в чистом виде. ладно.. заказаную норму холивара на ОРМ тему думаю выполнили... Nekz, давай новую тему. например зачем надо ноускл базы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 12:27 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453А это вы батенька, изволите считать, что ... остальное - один две максимум тригреа на проект как неизбежный костыль!!!Ошибаешься. Я же писал выше инструмент , где ты увидел слово костыль? Будь проще, не ищи тайный смысл там, где его нет :) alex564657498765453визуально, если у нас есть несколько хранилищ и наш код , то код будет в центре , а хранилища по кругу лучиками из центра подсоеденены. и стаёт очидно что в коде должна быть логика взаимосвязи между данными. НО ОРМ то тут причом?Дак не при чём. Речь была вообще-то про триггер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 16:26 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453Nekz, давай новую тему. например зачем надо ноускл базы. :)А также зачем нужен распределённый кэш второго уровня и поисковые сервера :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 16:27 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
А, или зачем нужен репозиторий в случае когда данные распределены :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 16:28 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAА, или зачем нужен репозиторий в случае когда данные распределены :) похоже вы занимаетесь поисковым сервисом на подобе гугла/яндекса, и считаете похоже - что это самая сложная задача!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 17:54 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
кстате говоря. у нас ситуация, таблица юзеры, связанная таблица ресурсы(айди ресурса, айди юзера) - связь один к многим. Эти ресурсы, покупаются у сторонего сервиса для юзеров(мы типо перепродаём, риселлеры) и вот трабла...орм это всё конечно весело, но за пол года работы, багов, прерываний процеса дебага и прочей мути, имеем, 700 евро в месяц платим за ресурсы, которых мы не используем, но мы этого даже не знаем. ибо записи в нашей базе нету о них, плюс наличие двух связаных ресурсов с юзером...(это для избраных возможно), для основной масы по ресурсу на нос, просто не освобождались при переназначении. а проблема решается - тригер на удаление и изменение юзера, который проследит чтобы связаный ресурс правильно был отсоединён от юзера, и мог использоваться повторно для другого. плюс тригер на само удаление и создание ресурсов. не важно по какой причине дело было, в лог падает запись о том что было куплено и когда, и когда удалено из базы. и тут как не крути. Крутые доктрины, skyANA и его клоны 10 человек(очень умных програмистов), но они за пол года дадут тот же результат - мусор, вто время как простые тригеры, которые как любит говорить мой начальник - дебил любой сделает - таки гарантируют что мы не будем иметь мусор - ресурс за который платим но он не используется. я к чему виду, уважаемый skyANA. есть задача, хранить два числа, а, и рядом с. А - может меняться как угодно, а С должно хранить величину - сумму положительных изменений а. тоесть при каждом увеличении а, с=с+1, при каждом уменьшении а- с=с-1 можно конечно на ваять кучу кода, и кричать о гибкости, и даже это частично верно - но гарантировать это можно только тригером, всё остальное - действительно костыли, которые иногда будут давать осечку. и к слову.... можно ведь не только тригеры вешать на таблицу. можно вместо обновления записи в таблице - скажем юзера, делать хранимку, которая сделает нужное изменение, и вернёт новую запись обновленную, и другие выборки которые нужны в коде, ибо они изменились и надо изменения на редисе твоём делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2015, 12:12 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Так что подводя черту, наверно надо резюмировать. есть задача - контроль целостности данных, её решать лучше инструментарием самой субд если позволяет, и тем жоще, чем нужнее эта целостность есть задача удобсва хранения обьектов програмных в базе. это и разница в типах, ну например у меня в программе, есть набор значений да/нет, 8 штук, в базе это один байт, или хеши текст, но в базе яж не лох варчар40, у меня бинари20. и вот хочеться не задумываться о этом постоянно. ОРМ - самое что ни наесть решение этой задачи. есть задача синхронизации данных между хранилищами(полная частичная функциональная...не важно как, суть что при изменении в одном хранилище, чтото должно поменяться в другом) тут не то не то не решает эту задачу, это нужно создавать сервисы(с нуля или на базе существующих) которые могут приклеиваться к ОРМ и/или к логике зашитой в субд. тут уже выбор зависит от практичности - от конкретики задачи с практической точки зрения. если при создании юзера он автологинится, а логированые юзеры у нас в кеше, то врядли из базы его туда надо толкать, ибо это не связанно с контролем целостности. с другой стороны, если идёт добавка товара на склад, и есть другая база, которая хранит табличку типо склад - сумма материальных ценностей на нём, то тут наверно не надо к орм крутить, ибо суть не в том, что если юзер чтото сделал, бизнес прцоес прошол, то надо чтоб обновился итог по складу. тут задача именно как по любой причине - вплоть до того, что в 4 часа ночи принесли ящик товара, надо добавить, система дала сбой, и админ вручную вписал в базу этот товар и его стоимость, итог должен обновиться. тут наверно всётаки лучше пускай база сама шлёт сигнал о изменении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2015, 12:43 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453skyANAА, или зачем нужен репозиторий в случае когда данные распределены :) похоже вы занимаетесь поисковым сервисом на подобе гугла/яндекса, и считаете похоже - что это самая сложная задача!?сложно посмотреть мой профиль, прежде чем делать какие-то выводы? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 08:21 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, если вы реализуете бизнес логику на уровне СУБД, то пишите лучше хранимки. Триггеры - зло :) Это я как разработчик системы для нефтянки, работавшей на сотне серверов по всей России на Oracle говорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 08:29 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAесли вы реализуете бизнес логику на уровне СУБД, то пишите лучше хранимки. Триггеры - зло :)Неоднократно приходилось слышать, что триггеры - зло. И такое слышал же в отношении хранимок. Поясните, чем одно злее другого? Ведь принципы работы и назначение этих инструментов довольно-таки разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 09:24 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAalex564657498765453, если вы реализуете бизнес логику на уровне СУБД, то пишите лучше хранимки. Триггеры - зло :) Это я как разработчик системы для нефтянки, работавшей на сотне серверов по всей России на Oracle говорю. поддерживаю. общие фразы можно услышать везде, а вот конкретно никто не хочет ответить. зло чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 09:56 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Помню несколько лет назад читал обзоры крупнейших web-проектов (ебей, амазон и т.д.), все в один голос твердили, что любая логика в бд - злейшее зло, бд должна быть не загружена никакой лишней шнягой и отвечать быстро на любые запросы. БД у них - "тупое хранилище" с простейшими sql-запросами к ней, вся обработка только на application-серверах, которые просто добавляешь по мере необходимости или обновляешь из образа одним нажатием кнопки. Насчёт ORM и смены субд - у меня на одном проекте MS SQL на винде, потребовалось часть базы перенести на сервер в другую страну к определённому хостеру, у которого нет винды, есть только линукс. Пришлось ставить mysql, mono и т.д. Но так как у меня в бд нет триггеров, хранимок и прочего, то перенос прошёл быстро и безболезненно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 11:00 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453Так что подводя черту, наверно надо резюмировать. есть задача - контроль целостности данных, её решать лучше инструментарием самой субд если позволяет, и тем жоще, чем нужнее эта целостность есть задача удобсва хранения обьектов програмных в базе. это и разница в типах, ну например у меня в программе, есть набор значений да/нет, 8 штук, в базе это один байт, или хеши текст, но в базе яж не лох варчар40, у меня бинари20. и вот хочеться не задумываться о этом постоянно. ОРМ - самое что ни наесть решение этой задачи. есть задача синхронизации данных между хранилищами(полная частичная функциональная...не важно как, суть что при изменении в одном хранилище, чтото должно поменяться в другом) тут не то не то не решает эту задачу, это нужно создавать сервисы(с нуля или на базе существующих) которые могут приклеиваться к ОРМ и/или к логике зашитой в субд. тут уже выбор зависит от практичности - от конкретики задачи с практической точки зрения. если при создании юзера он автологинится, а логированые юзеры у нас в кеше, то врядли из базы его туда надо толкать, ибо это не связанно с контролем целостности. с другой стороны, если идёт добавка товара на склад, и есть другая база, которая хранит табличку типо склад - сумма материальных ценностей на нём, то тут наверно не надо к орм крутить, ибо суть не в том, что если юзер чтото сделал, бизнес прцоес прошол, то надо чтоб обновился итог по складу. тут задача именно как по любой причине - вплоть до того, что в 4 часа ночи принесли ящик товара, надо добавить, система дала сбой, и админ вручную вписал в базу этот товар и его стоимость, итог должен обновиться. тут наверно всётаки лучше пускай база сама шлёт сигнал о изменении. "есть задача - контроль целостности данных, её решать лучше инструментарием самой субд" - да, именно так. Но, это не значит проверку входных данных, или перезаписывание связей. Это например использование внешних ключей, и запрет удаление записей, у которых есть связь по такому ключу. Всё остальное делает ORM (а также и саму проверку целостности свою проводит) :) "есть задача удобсва хранения обьектов програмных в базе..." - ну да. То есть преобразование неудобных для объектного восприятия данных в удобные. Но для указанного примера я бы выбрал тип данных SET (mysql), а не двоичный или строковый (ничего лишнего не запишешь, и человекопонятно). Тогда на ORM возлагается лишь задача оглавления нужных констант, и чтение данного столбца как числовой. Далее задача сводится к определению установлен ли какой-либо флаг (это легче чем сравнивать 8 значений по очереди, проверяя интересующий результат). Так что тут в процесс хранения данных без необходимости лучше не лезть. Но если всё же лезть надо - тогда ORM "если при создании юзера он автологинится, а логированые юзеры у нас в кеше, то врядли из базы его туда надо толкать" - небольшое отступление (не в обиду... для общего образования): "логированые" от слова "логировать", "лог"... "логинить" - "залогиненные" )) . А если по теме, то как тебе кэш поможет при логине пользователя? Может ты имел ввиду сохранение сессии? Так это возможно только на клиенте :) Не забывай, что для базы ты всегда один и тот же пользователь при обращении из скрипта (если там конечно явно не указаны разные кейсы). Потому по сути в данном случае не вижу выбора как такового :) ORM "с другой стороны, если идёт добавка товара на склад, и есть другая база, которая хранит табличку типо склад - сумма материальных ценностей на нём..." - дальше не смог осознать поток мыслей :) По тому, что тут написано (без учёта того, что дальше по тексту), как-то неверно подход выбран. Зачем вообще нужна вторая таблица? Если человеку надо удобочитаемый вид в базе, для этого есть представления (на них таблицы отчётности строятся в 2 счёта... ничего извне не надо). Если же надо получить данные по складу (количество товаров, сумму и т.д.), для этого делается специальный запрос со стороны ORM к базе. То есть, для тебя это атрибут или некий метод склада, а ORM уже сама в базу запрос кинет нужный по выборке (COUNT, SUMM и т.д.). Зачем для этого отдельную таблицу (объект) создавать?! Потому и тут ORM :) Итак... итог по примерам: 1. Целостность данных (запрет на изменение и удаление данных с активными внешними связями, добавление данных без требуемых связей) - База. Всё остальное (типа автоизменение связанных данных) ORM 2. ORM 3. ORM и никак иначе 4. ORM 4 из 4 (то есть все) случаев связанных с логикой решаются средствами ORM. Средствами базы производится только контроль целостности данных, на случай если у сервака электричество отберут, или ещё что завалится в момент записи. Все остальные вопросы целостности (проверка на правильность данных на входе, обработчики ошибок целостности и т.д.) регулируются посредством ORM. Итог итога :) средствами ORM должны решаться все вопросы связанные с данными, в то время как в базе механизмы активируются только в целях обеспечения дополнительного контроля целостности данных при сохранении (то, за что ORM по сути уже ручаться не может). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 19:23 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
st_stПомню несколько лет назад читал обзоры крупнейших web-проектов (ебей, амазон и т.д.), все в один голос твердили, что любая логика в бд - злейшее зло, бд должна быть не загружена никакой лишней шнягой и отвечать быстро на любые запросы. БД у них - "тупое хранилище" с простейшими sql-запросами к ней, вся обработка только на application-серверах, которые просто добавляешь по мере необходимости или обновляешь из образа одним нажатием кнопки. Насчёт ORM и смены субд - у меня на одном проекте MS SQL на винде, потребовалось часть базы перенести на сервер в другую страну к определённому хостеру, у которого нет винды, есть только линукс. Пришлось ставить mysql, mono и т.д. Но так как у меня в бд нет триггеров, хранимок и прочего, то перенос прошёл быстро и безболезненно. ну наверно надо начать, что интернет магазин он лишь интернет магазин, и не важно - посещаемость у него 10 человек в день или 10 млн. ну тоесть, если зонт не промокает, то и при ливне и при слепом дожде он не промокнет. если прикинуть, что за база на амазоне - наверно аналог что на розетке.юа, только с посещаемостью больше. вообще я согласен с такой формулировкой - на веб проектах(сайт длю клацанья мышкой ) врядли нужны тригерры. нужда всплывает - если мы например платёжную систему хотим делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2015, 23:47 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453Так что подводя черту, наверно надо резюмировать. есть задача - контроль целостности данных, её решать лучше инструментарием самой субд если позволяет, и тем жоще, чем нужнее эта целостность есть задача удобсва хранения обьектов програмных в базе. это и разница в типах, ну например у меня в программе, есть набор значений да/нет, 8 штук, в базе это один байт, или хеши текст, но в базе яж не лох варчар40, у меня бинари20. и вот хочеться не задумываться о этом постоянно. ОРМ - самое что ни наесть решение этой задачи. есть задача синхронизации данных между хранилищами(полная частичная функциональная...не важно как, суть что при изменении в одном хранилище, чтото должно поменяться в другом) тут не то не то не решает эту задачу, это нужно создавать сервисы(с нуля или на базе существующих) которые могут приклеиваться к ОРМ и/или к логике зашитой в субд. тут уже выбор зависит от практичности - от конкретики задачи с практической точки зрения. если при создании юзера он автологинится, а логированые юзеры у нас в кеше, то врядли из базы его туда надо толкать, ибо это не связанно с контролем целостности. с другой стороны, если идёт добавка товара на склад, и есть другая база, которая хранит табличку типо склад - сумма материальных ценностей на нём, то тут наверно не надо к орм крутить, ибо суть не в том, что если юзер чтото сделал, бизнес прцоес прошол, то надо чтоб обновился итог по складу. тут задача именно как по любой причине - вплоть до того, что в 4 часа ночи принесли ящик товара, надо добавить, система дала сбой, и админ вручную вписал в базу этот товар и его стоимость, итог должен обновиться. тут наверно всётаки лучше пускай база сама шлёт сигнал о изменении. "есть задача - контроль целостности данных, её решать лучше инструментарием самой субд" - да, именно так. Но, это не значит проверку входных данных, или перезаписывание связей. Это например использование внешних ключей, и запрет удаление записей, у которых есть связь по такому ключу. Всё остальное делает ORM (а также и саму проверку целостности свою проводит) :) "есть задача удобсва хранения обьектов програмных в базе..." - ну да. То есть преобразование неудобных для объектного восприятия данных в удобные. Но для указанного примера я бы выбрал тип данных SET (mysql), а не двоичный или строковый (ничего лишнего не запишешь, и человекопонятно). Тогда на ORM возлагается лишь задача оглавления нужных констант, и чтение данного столбца как числовой. Далее задача сводится к определению установлен ли какой-либо флаг (это легче чем сравнивать 8 значений по очереди, проверяя интересующий результат). Так что тут в процесс хранения данных без необходимости лучше не лезть. Но если всё же лезть надо - тогда ORM "если при создании юзера он автологинится, а логированые юзеры у нас в кеше, то врядли из базы его туда надо толкать" - небольшое отступление (не в обиду... для общего образования): "логированые" от слова "логировать", "лог"... "логинить" - "залогиненные" )) . А если по теме, то как тебе кэш поможет при логине пользователя? Может ты имел ввиду сохранение сессии? Так это возможно только на клиенте :) Не забывай, что для базы ты всегда один и тот же пользователь при обращении из скрипта (если там конечно явно не указаны разные кейсы). Потому по сути в данном случае не вижу выбора как такового :) ORM "с другой стороны, если идёт добавка товара на склад, и есть другая база, которая хранит табличку типо склад - сумма материальных ценностей на нём..." - дальше не смог осознать поток мыслей :) По тому, что тут написано (без учёта того, что дальше по тексту), как-то неверно подход выбран. Зачем вообще нужна вторая таблица? Если человеку надо удобочитаемый вид в базе, для этого есть представления (на них таблицы отчётности строятся в 2 счёта... ничего извне не надо). Если же надо получить данные по складу (количество товаров, сумму и т.д.), для этого делается специальный запрос со стороны ORM к базе. То есть, для тебя это атрибут или некий метод склада, а ORM уже сама в базу запрос кинет нужный по выборке (COUNT, SUMM и т.д.). Зачем для этого отдельную таблицу (объект) создавать?! Потому и тут ORM :) Итак... итог по примерам: 1. Целостность данных (запрет на изменение и удаление данных с активными внешними связями, добавление данных без требуемых связей) - База. Всё остальное (типа автоизменение связанных данных) ORM 2. ORM 3. ORM и никак иначе 4. ORM 4 из 4 (то есть все) случаев связанных с логикой решаются средствами ORM. Средствами базы производится только контроль целостности данных, на случай если у сервака электричество отберут, или ещё что завалится в момент записи. Все остальные вопросы целостности (проверка на правильность данных на входе, обработчики ошибок целостности и т.д.) регулируются посредством ORM. Итог итога :) средствами ORM должны решаться все вопросы связанные с данными, в то время как в базе механизмы активируются только в целях обеспечения дополнительного контроля целостности данных при сохранении (то, за что ORM по сути уже ручаться не может). эээ, ты начудил стрикоробо. 1)ОРМ проверка целосности - бред. простой пример. вставка юзера, емейл уникальный индекс, база вставляет делая проверку на уникальность, и ок, или при проверке ошибка и возвращает. вариант через орм, делать в базу запрос, влюбом случае база возвращает ответ, есть совпадение или нету, и потом идёт вставка, которая - вот не задача...может оказаться неудачной, ибо уже такой емейл есть!!! аналогично контроль связи один к одному.при проверке все было нормально, а при вставке уже нет. так что я бы сказал даже так, можно решать через орм пытаться, но максимальный результат - это очень близко подойти к контролю целостности. итого 1 - НЕ ОРМ 2)ну насчёт сет, тут ты прогнал. мы говорим на тему не грузить базу излишне., а ты предлагаешь нагрузить :) (базе даже текст будет удобней в бинари хранить, ненадо будет делать обработку кодовых страниц) - не если надо искать по флагам исключительно, то тут как не крути надо базу грузить...но я имел ввиду флаги, как атрибуты записи, которую ищут совсем по другим критериям. а про кеш...это речь шла про мемкеш например, туда надо чтото сохранять связанное с залогиненым пользователем... я без конкретики, вцелом. если есть действие, которое рождает действия с базой, и паралельно действия с другим хранилищем, то глубо базу заставлять мыкаться заботясь о другом хранилище тоже. тут я изначально имел ввиду ОРМ 3)вопрос стоял не зачем другая база, а другая база должна гарантированно хранить актуальные итоги. напиример филиал со своей базой, и итоги в центральном отделении. ну или сеть магазинов, и можно бронировать товар, и это центральная база для интернет сайтов - у каждого магазина свой сайт, а у складов магазинов свои базы ещо. и вот фишка у нас такая, что как только товар заехал на склад, он мгновенно доступен для бронирования везеде, и надо таки отметить, что если в бронь поставили, то все сразу оповещенны о этом. тут даже не обсуждаеться ОРМ. что-то я не заметил чтобы отказывались от кластера базы, исопльзуя вместо этого ОРМ... кластер базы, пусть это какая нибудь галера для мускла - но принцип её тотже - на уровне базы действие одно. либо запись вставилась бронь, и все базы про это знают одновременно, или ничего не произошло. вы всё мыслите вокруг сайта, который возможно стал популярным, и админы както замутили облако, но для вас это всёравно остался сайт, только теперь хайлоудом понтануться можно. а прикинь...не файловая система будет следить за тем чтобы два файла с одним именем не создались, а клиенты!!! и куда записывать на какие кластера тоже клиенты...спрашивают - а не свободно ли там, и льют туда свои файлы. и оперативку также выделять...виндоус лишь выделяет, но не контролирует что кто взял и зачем. долго проработает система? система - требует системного подхода, который напрямую связан с управлением, необходимым условием для которого - контроль. ОРМмами систему не построить ,только компонент системы. - хотя формально, сайт это тоже система, даже ввиде одного штмл документа...но я под словом система имел ввиду - наличие отдельных, нами програмируемых все темже кодом, частей, независимых, и в некоторых могут протекать свои собственные процессы. собственный процесс, означает что другая часть системы даже понятия не имеет что там протекает - просто никчему. с этой точки зрения, орм в одной части даже не будет иметь возможность чтото контролировать - ибо неизвестно что. (файловый сервис. - есть фоновые демоны которые работают по принципу - файл на винчестере есть .в базе нету = мусор удалить, есть в базе нет на винчестере - востановить, иначе просто пропустить. есть собственно код принимающий от пользователей файлы. есть код реализующий оптимальное размещение файлов по серверам (для него важны именно точные мгновенные данные, чколько на каком сервере, его текущая загрузка влпане скачки закачки)). это умом тронуться можно, если скрипт принимающий от пользователя файл(кусками) будет думать и заботиться, чтобы правильно были выставлены все величины по базе.и что самое интерестное сдесь , так это. представим себе ситуацию. 10000 юзеров одновременно логиняться, нельзя двойной логин сделать!!! и вот есть два варианта, сразу юзера логинить, вписывая сесию, при условии что текущее значение сессии не нулл, и сначала селект сделать а потом апдейт. тригерры сдесь нипричом - но ты каким способом пойдёшь? первым или вторым!? наверно первым. ну а если 10000 юзеров создаються , то зачем ити вторым вплане нельзя два юзера с одним мылом/логином ?! ну а если 10000 вставок , и на каждую вставку у связаной записи надо поле обновить!!! зачем делать два запроса? а если три, обновить у родителя, и у дедушки... транкзанкция? и зачем родителя лочить, чтобы больше никто не мог ничег осделать, потому что у нас между вторым и третим запросом сеть начала лагать, или сервер в кому впал, и запрос только через минуту отослался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 00:23 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, не буду цитировать эту простыню :) итак, по пунктам 1. Прекрасно, ты из базы отдаёшь текстовую ошибку с кодом, означающую, что в каком-то из уникальных ключей уже есть указанное значение. А теперь представь, что у тебя таких обязательных и уникальных поля 2 (телефон и email). Расскажи, как же ты будешь выводить пользователю ошибку об неуникальности одного из полей (с указанием на неверно заполненное поле)? Так что сказанное тобой - БРЕД! (Есть предложение не переходить к "бредованию" слов друг-друга :)) ) 2. Не знаю о чём говорите ВЫ, а МЫ говорим об удобстве программирования :) То что тут написали про "не нагружать сервер" - это да :) Но давайте не будем забывать, что в целом и mysql и php являются серверными частями приложения :) Потому какая разница какой из серверов грузить? Но ладно, суть не в том... не нравятся set, используй int, байт или что угодно ещё. Суть в том, что любое преобразование данных, при необходимости, должно проводится посредством ORM (для чего оно и придумано) 2.1 Про кэш... Может я конечно туплю. Но скажи, зачем данные пользователя в кэш пихать? (ведь memcache это тот же кэш :) ) Я бы такие данные в сессию кидал. Кэш - запоминание результата во избежание повторного просчёта сложных операций. Получение данных из базы, это сложная операция? Тебе же надо просто сохранить некое состояние между запросами, а это сессии в чистом виде. В общем, если пример приведёшь, возможно соглашусь, а пока что повода нету :) 3. Если таблицы в одной базе - я описал принцип. Если в нескольких, значит 2 запроса от клиента, и никак иначе. Интересно посмотреть, что ты будешь делать с системой, если твоя "основная" база уедет на отдельный сервер (ну мало ли, для распределения нагрузки или ещё чего... а учитывая что у тебя складов много, теоретически они уже на разных серверах). Я у себя в ORM просто поменяю соединение и всё поедет дальше... А какими ты костылями будешь заставлять один mysql сервер конектиться к другому, я не представляю. 4. Про файловую систему. ты сравнил совсем разные протоколы. Файлы ты пишешь по одному, в файловой системе есть только один индекс, который должен быть уникален (путь к файлу) Запрос же меняет множество полей, а любое изменение может привести к дублированию любого из уникальных индексов. Само создание индекса может привести к данной ошибке. Может быть удалена таблица связанная с другой по ключу и т.д.. В mysql есть такое множество разновидностей одной и той же ошибки, что описать её одним только кодом (как в fs) просто невозможно. Потому и возможные ошибки обработать на клиенте намного легче чем получать с сервера и парсить. Затрат меньше как по ресурсам, так и по сложности. 5. Один абзац пропустил, так как там поток сознания :) Мне понятны только отдельные слова, из которых фразы не складываются :)) По поводу 10000 юзеров - да. Сначала селект, потом апдейт. Внутри транзакции (сюрприз!!! ) с локом прав на чтение :) А ты как это делать будешь? )) Спорим твой вариант ступорнее (сложнее), а я в нём ещё и узкое место найду :) Ответ на следующие 2 абзаца в сообщении - транзакция (или LOCK) :) Если я хочу убедиться, что данные не изменяться между двумя запросами (или даже не будут считаны никем, как в данном примере), тогда их имеет смысл залочить, а не пытаться часть логики в базу пихать, потому что... :) Работал когда-то с деревьями в виде nested sets? Знаешь как там перемещение производится? да, огромным количеством запросов: 1.чтение нужного узла 2.смещение последующих индексов с учётом отсутствия данного узла 3.изменение индексов в новом месте с учётом присутствия нового узла 4.изменение индексов самого узла Но вот работаем и горя не знаем, при чём никаких индексов и хранимок на стороне базы не воротим. Всё на стороне клиента (в модуле-прослойке, выполняющем роль драйвера)... Изменился типа дерева - изменился драйвер. А ты бы при смене дерева начал бы новые хранимки в базе городить :) А если а одной базе 2 таблицы с разными типами деревьев? Система просто завалится :) А моя продолжит работать с каждой таблицей через свой драйвер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 12:35 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453skyANAalex564657498765453, если вы реализуете бизнес логику на уровне СУБД, то пишите лучше хранимки. Триггеры - зло :) Это я как разработчик системы для нефтянки, работавшей на сотне серверов по всей России на Oracle говорю. поддерживаю. общие фразы можно услышать везде, а вот конкретно никто не хочет ответить. зло чем?Зло в том, что логика изменения состояния объекта размазывается и становится запутанной и малопонятной, а зачастую и вовсе неожиданной. Есть у вас некоторое действие, что должно перевести объект в такое-то состояние, ну напишите хранимку для этого действия. Не пишите триггеры из следующих соображений: вот я изменил такие-то поля, напишу в триггере логику, с ними связанную. И откуда бы я не изменил эти поля, всё будет работать. Вы не один! Потом кто-то другой будет долго соображать, почему его код приводит к неожиданным результатам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 17:18 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453st_stПомню несколько лет назад читал обзоры крупнейших web-проектов (ебей, амазон и т.д.), все в один голос твердили, что любая логика в бд - злейшее зло, бд должна быть не загружена никакой лишней шнягой и отвечать быстро на любые запросы. БД у них - "тупое хранилище" с простейшими sql-запросами к ней, вся обработка только на application-серверах, которые просто добавляешь по мере необходимости или обновляешь из образа одним нажатием кнопки. Насчёт ORM и смены субд - у меня на одном проекте MS SQL на винде, потребовалось часть базы перенести на сервер в другую страну к определённому хостеру, у которого нет винды, есть только линукс. Пришлось ставить mysql, mono и т.д. Но так как у меня в бд нет триггеров, хранимок и прочего, то перенос прошёл быстро и безболезненно. ну наверно надо начать, что интернет магазин он лишь интернет магазин, и не важно - посещаемость у него 10 человек в день или 10 млн. ну тоесть, если зонт не промокает, то и при ливне и при слепом дожде он не промокнет. если прикинуть, что за база на амазоне - наверно аналог что на розетке.юа, только с посещаемостью больше. вообще я согласен с такой формулировкой - на веб проектах(сайт длю клацанья мышкой ) врядли нужны тригерры. нужда всплывает - если мы например платёжную систему хотим делать.И какие задачи триггеры решают в платёжных системах? Мы на данный момент поддерживаем 12 платёжных систем без единого триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 17:24 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex5646574987654531)ОРМ проверка целосности - бред. простой пример. вставка юзера, емейл уникальный индекс, база вставляет делая проверку на уникальность, и ок, или при проверке ошибка и возвращает. вариант через орм, делать в базу запрос, влюбом случае база возвращает ответ, есть совпадение или нету, и потом идёт вставка, которая - вот не задача...может оказаться неудачной, ибо уже такой емейл есть!!! аналогично контроль связи один к одному.при проверке все было нормально, а при вставке уже нет. так что я бы сказал даже так, можно решать через орм пытаться, но максимальный результат - это очень близко подойти к контролю целостности. итого 1 - НЕ ОРМlol, при чём тут вообще ОРМ? И в большинстве современных систем проверка на существование зарегистрированного e-mail-а делается до вставки в БД. alex5646574987654532)ну насчёт сет, тут ты прогнал. мы говорим на тему не грузить базу излишне., а ты предлагаешь нагрузить :) (базе даже текст будет удобней в бинари хранить, ненадо будет делать обработку кодовых страниц) - не если надо искать по флагам исключительно, то тут как не крути надо базу грузить...но я имел ввиду флаги, как атрибуты записи, которую ищут совсем по другим критериям. а про кеш...это речь шла про мемкеш например, туда надо чтото сохранять связанное с залогиненым пользователем... я без конкретики, вцелом. если есть действие, которое рождает действия с базой, и паралельно действия с другим хранилищем, то глубо базу заставлять мыкаться заботясь о другом хранилище тоже. тут я изначально имел ввиду ОРМОпять не понятно при чём тут ОРМ? Почитав остально, я понял, что пациент не разобрался вообще, что такое ОРМ и зачем нужно. Наложил на незнание вопроса свои комплексы, получил ветряную мельницу и пытается с ней бороться. Успехов, чо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 17:35 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAalex564657498765453пропущено... поддерживаю. общие фразы можно услышать везде, а вот конкретно никто не хочет ответить. зло чем?Зло в том, что логика изменения состояния объекта размазывается и становится запутанной и малопонятной, а зачастую и вовсе неожиданной. Есть у вас некоторое действие, что должно перевести объект в такое-то состояние, ну напишите хранимку для этого действия. Не пишите триггеры из следующих соображений: вот я изменил такие-то поля, напишу в триггере логику, с ними связанную. И откуда бы я не изменил эти поля, всё будет работать. Вы не один! Потом кто-то другой будет долго соображать, почему его код приводит к неожиданным результатам :) мдяяяя. так вы вообще противник ооп похоже. не я понимаю что лучше знать всё что проиходит. но это не аргумент, я чтото меняю, а чтото меняеться. свойства в ооп на это и ращитанны. магические методы в пхп , посути реализация свойств тоже на в этуже стерь, да как и вообще сам ОРМ который вы пропагандируете. взять доктрину, и моя модель наследник тамошнего орм - сколько кода будет стоять за этим? вот так я сохраняю в редис, бац в базе значение появилось...и потом попробуй найти откуда.... это точно не аргумент. для любой код раскиданый в 10 файлов(мест) уже порой будет путаница для другого. для этого документацию пишут. диаграмки рисуют того же состояния обьекта, где будет отражено, что из состояния (а,б,с,в) при присвоении б1, обьект переходит в состояние (а,б1,с1,в1) ...ну тоесть простое изменение одного не возможно. и возвращаемся к критегрию - гарантированная целостность. тоесть при любом падении любой части системы, данные не дожны получиться противоречивые. Я чесно говоря не пойму, почему вы пытаетесь доказать, что ОРМ - это хороший инструмент замены тригеров и хранимок, вместо того чтоб расписать(а я уверен что я много чего не знаю про выгоды ОРМ) - удобство преобразований обьектной(что по сути будет иерархической, а то и сетевой структуры) в реляционную. ну это ж из общих соображений понятно, - вот есть ноутбук=комп, на нём можно смотреть фильмы. можно конечно говорить что смартфон это круто, на нём можно фильмы смотреть и он мобильный, но не с этого ведь надо начинать - ибо ноут тоже мобильный, и для просмотра фильмов, а уж для меня очкарика, размеры смартфона это его минус. понимаете о чём я? для хостингов где тригеры и хранимки запрещены политикой ЦК партии, ОРМ + аля тригер на стороне, будет добавочным плюсом. а насчёт зла тригеров - я ожидал чтото на тему... зачастую тригерр использовать более предпочтительно чем хранимку, он быстрее, правда менее функционален - не всё в тригере можно сделать, что позволенно в хранимке, и даже в серьёзных субд где хранимку можно хранить в скомпилированом(уже разспознаном коде ввиде байткода) - она всёравно медленее и ресурсоёмней чем тригерр. и люди начинают всё что можно сделать в тригере туда тулить, но тут есть подводные камни - 1)...2)........ это как индекс хорошо, и люди начинают тулить на все поля по которым идёт поиск, а ведь перестроение индекса это работа. и если индекс по полю, принимающий малое число значений в сравнении с обьемом таблицы - один чорт фулскан будет, а построение индекса время - итого толко минус от него. плюс надо расматривать составные, как пример на быструю руку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2015, 23:39 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453, не буду цитировать эту простыню :) итак, по пунктам 1. Прекрасно, ты из базы отдаёшь текстовую ошибку с кодом, означающую, что в каком-то из уникальных ключей уже есть указанное значение. А теперь представь, что у тебя таких обязательных и уникальных поля 2 (телефон и email). Расскажи, как же ты будешь выводить пользователю ошибку об неуникальности одного из полей (с указанием на неверно заполненное поле)? Так что сказанное тобой - БРЕД! (Есть предложение не переходить к "бредованию" слов друг-друга :)) ) 2. Не знаю о чём говорите ВЫ, а МЫ говорим об удобстве программирования :) То что тут написали про "не нагружать сервер" - это да :) Но давайте не будем забывать, что в целом и mysql и php являются серверными частями приложения :) Потому какая разница какой из серверов грузить? Но ладно, суть не в том... не нравятся set, используй int, байт или что угодно ещё. Суть в том, что любое преобразование данных, при необходимости, должно проводится посредством ORM (для чего оно и придумано) 2.1 Про кэш... Может я конечно туплю. Но скажи, зачем данные пользователя в кэш пихать? (ведь memcache это тот же кэш :) ) Я бы такие данные в сессию кидал. Кэш - запоминание результата во избежание повторного просчёта сложных операций. Получение данных из базы, это сложная операция? Тебе же надо просто сохранить некое состояние между запросами, а это сессии в чистом виде. В общем, если пример приведёшь, возможно соглашусь, а пока что повода нету :) 3. Если таблицы в одной базе - я описал принцип. Если в нескольких, значит 2 запроса от клиента, и никак иначе. Интересно посмотреть, что ты будешь делать с системой, если твоя "основная" база уедет на отдельный сервер (ну мало ли, для распределения нагрузки или ещё чего... а учитывая что у тебя складов много, теоретически они уже на разных серверах). Я у себя в ORM просто поменяю соединение и всё поедет дальше... А какими ты костылями будешь заставлять один mysql сервер конектиться к другому, я не представляю. 4. Про файловую систему. ты сравнил совсем разные протоколы. Файлы ты пишешь по одному, в файловой системе есть только один индекс, который должен быть уникален (путь к файлу) Запрос же меняет множество полей, а любое изменение может привести к дублированию любого из уникальных индексов. Само создание индекса может привести к данной ошибке. Может быть удалена таблица связанная с другой по ключу и т.д.. В mysql есть такое множество разновидностей одной и той же ошибки, что описать её одним только кодом (как в fs) просто невозможно. Потому и возможные ошибки обработать на клиенте намного легче чем получать с сервера и парсить. Затрат меньше как по ресурсам, так и по сложности. 5. Один абзац пропустил, так как там поток сознания :) Мне понятны только отдельные слова, из которых фразы не складываются :)) По поводу 10000 юзеров - да. Сначала селект, потом апдейт. Внутри транзакции (сюрприз!!! ) с локом прав на чтение :) А ты как это делать будешь? )) Спорим твой вариант ступорнее (сложнее), а я в нём ещё и узкое место найду :) Ответ на следующие 2 абзаца в сообщении - транзакция (или LOCK) :) Если я хочу убедиться, что данные не изменяться между двумя запросами (или даже не будут считаны никем, как в данном примере), тогда их имеет смысл залочить, а не пытаться часть логики в базу пихать, потому что... :) Работал когда-то с деревьями в виде nested sets? Знаешь как там перемещение производится? да, огромным количеством запросов: 1.чтение нужного узла 2.смещение последующих индексов с учётом отсутствия данного узла 3.изменение индексов в новом месте с учётом присутствия нового узла 4.изменение индексов самого узла Но вот работаем и горя не знаем, при чём никаких индексов и хранимок на стороне базы не воротим. Всё на стороне клиента (в модуле-прослойке, выполняющем роль драйвера)... Изменился типа дерева - изменился драйвер. А ты бы при смене дерева начал бы новые хранимки в базе городить :) А если а одной базе 2 таблицы с разными типами деревьев? Система просто завалится :) А моя продолжит работать с каждой таблицей через свой драйвер. 1.ну когда орм проверяет уникальность, и может быть не уникальным одно или другое поле - тебя не смущает??? !!! , так почему смутило что в базе... база вообщето возвращает есчё код ошибки, и да текст. по коду определяем тип ошибки - нарушение уникальности ключа - отдельный код, а текст ошибки для каждого номера шаблоный...точно также как строиться ошибка на фреймворках. более того, если расматривать действия через хранимые процедуры, или в тригере (что не совсем мне нравиться, но можно) вызывать отмену действия, можно рождать свои оповещения. но остановлюсь на первом - код ошибки, и если возникла - ОРМ ведь знает какие у него поля уникальные, и как называются индексы уникальности(не обычно не знают, в них это не зашито, я в свой зашил) - и красивенько выдают ошибку. и теперь внимание - первичный ключ - у меня ГУИД. есть небольшой шанс на дубль,до этого был не гуид, там шансы на дубль больше были...на каждые 2-3 тысчи обязательно дубль. вот давай и разберём. на каждые 3000 вставок делать 3000 селектов, а ввиду автогенерации этого значения, и число нод с вебмордой 10, то часть из таких проверок закончится плачесвно - небыло записи во время проверки, но пхпшный уникальный айди завязаный на таймстемп :) - уже будет не уникально на момент вставки, ну да бог сним. 3000 вставок, и одна с ошибкой и повторная вставка, или 3000 вставок и выборок. я за первый вариант, и да у меня были тригеры и мой орм, который работу делал, а не видимость работу, нагружая базу излишними запросами. теперь когда гуиды, там наверно на 10млн записей дубль будет возможно(это меньше суток работы системы) офигеть выгодно 10млн селектов делать - зачем??? чтоб в одном случае секономить на парсинге текста ошибки - какой именно ключ дублированый. 2ну на этот счёт я сразу согласен. мой орм на самом верхнем родительском уровне, расчитан на то что вход выход(обьект в пхп , и запись в таблице) ваще ничего общего могут не иметь - вплоть до того, что ни одно поле совпадать не будет, а возможно вообще сохранение обьекта в базе это фикция - ибо обьект это результат агрегации данных разных таблиц и сохранение, размазываеться на кучу таблиц. или вообще нету таблицы - обьект результат голосования человека...есть рейтинг, есть хранимка, сохранение обьекта в базу, это не новая запись, а обновление двух полей за что голосовали. вот это я понимаю орм - расчитаный не прежде всего не валидировать и переживать за целостность структуры базы, а расчитаный прежде всего, на то что обьект в пхп и его представление в базе может очень сильно отличаться. на пхп оно так как удобно там, а в базе так как удобно там. но опять же - про задачу преобразование полей, типов и подобное с вами согласен - это ОРМ 2.1 - без коментариев, видимо я тебя не верно понял, все что я писал про кеш, это желание угадать зачем у вас кеш используется... раз не угадал, значит просто проехали этот пункт. 3. :) поверь - легко. легче чем ты. а кстате, это просто интересное совпадение. когда я знал sql как слово,и молился, хоть бы админ который присматривал пока я учусь(я был админом под чесное слово быстро освоиться) сам поискал причину бага в логах в базе, а то мне некогда скл учить счас(постре был), - шелл надо учить (более актуально) ...админ заболел, пришлось лезть, и ошибка была именн ов механизме сброса логов из локальных баз в общую. субд общались на прямую. почему так сделали, это быстрее. там локальная субд ездит по городу, и только в зоне вайфай появляеться возможность обменна данными, и получаеться быстрее - больше число строк прокидываеться, особенно если сеть начнёт лагать - а для вайфая это норма, при движущейся металической коробки с компом, особенно при проезде других больших металических коробок.ну оно вообщемто логично - любой скриптовый внешний код, будет промеждуточным звеном - ускорить ясень пень не ускорит, а только замедляет. --кстате, вот ты и ошибочку сделал, стараясь налепить все в одну кучу. построение должно быть отказоустойчивым и надёжным, а не забодиться чтобы всё в одной куче было. если мы говорим даже о второй базе, то это база на хосте vtoraya-baza.nasha-firma.com и куда бы она не ездила, меняеться только днс запись админам. я понимаю что есть гении, которые любят менять в конфиге орм ,запись хоста xcp32-v55.cloud.superit.com на ava34.amazon.com - но опять - ты мыслишь категорией сайт, а я говорю о системах. ну вот где вайфай ездил для ускорения работы одного из процесов, понадобилось переделать драйвер вайфая и прикрутить к нему ещо исполняемый код, и естественно на пхп этого не сделать...а там тоже есть данные про сервера - адреса, туда же куда и пхп код лезет, куда и база лезет. ну не получиться в системе одно место в коде. ходя соглашусь, не всегда легко можно решить эту задачу доменными именнами, особенно если приходиться покупать чтото без выделонного айпи. 4 - тоесть ты считаешь что именно по этой причине мы работаем по разному с файловой системой и с субд - в количестве возможных ошибок? давай расмотрим файлы на диске как данные(пльзовательские файлы) и в базе одна табилца - дерево файлов. база нужна, ибо файлы юзеров храняться у нас на 100 серверах, а в базе единое дерево всех юзеров(первый уровень дерева) и пошли их папки файлы. и если я верно тебя понял, то работа с базой только через орм, будем на дереве операции - обновление например размера папки делать вполть до корневой для данного юзера, при закачке нового файла, и без аналога орм для файловой системы раскиданой на несколько серверов - и всё это изза количества ошибок? более того, хранить то мы будем не файл целиком, а то закачает юзер файл в 100 гигов, не хочеться его хранить на одном серверер...вдруг во время пика на серверах по 50 гигов свободно осталось...да и на случай падения серверов нужны дубли - ток накладно копии файлов хранить - давай типо райд5 масива делать. итого получаем. для простой записи файла в нашу файловую систему, с минимальным количеством ошибок, надо - определение целевые ноды куда раскидывать файл, и както сохранить данные о этом разбросе, к нашему дерефу файловой системы в базе, надо ещо вспомагательные данные, где какие части файла на какой ноде искать. а вот операция с записями файл папка - возможно и много ошибок база может продуцировать - но нам надо просто дерево сохранять. нам никогда не надо будет найти всех потомков заданого узла - только неспосредственных потомков. нам не когда не надо искать цепочку вверх к корню...мы в сесии сохраняем как юзер углубился в своём дереве до заданного уровня( у нас есть список айдишников всей цепочки от корня до текущей папки в сессии) валидировать там ничего не надо, да и глупо валидировать селектами, ибо между вбыоркой и проверкой может произойти вставка...или ваще не надо, может в одной папке быть два файла с одним именем - нигде не может , у нас может - идентифицируются всеравно гуидами, а то как юзер его обозвал - нам побую. пусть хоть все свои фотки назовёт одинаково - foto.jpg - получаем, обьект файл (как метаинформация) в пхп и в базе - один в один. а вот содержимое файла... ооо, это 90% всего кода файлового хранилища. ведь ещо надо бороться с падением нод ,востанавливать быстро копии на других, а то вдруг ещо что накроеться, чиститься от мусора, билинг, отдельная тема...и это все не звязано ни с каким обьектом пхп. - точно предлагаешь на пхп мутить, тот же билилнг? вот зачем. на пхп написанна вебморда. завтра вебморду сделаем на ноудджиес, или питоне. билинг тоже надо переписывать? какая разница на чем он написан...отдельная часть системы, задача которой всегда точно знать сколько юзер хранил файл. и к слову про орм!!! видишь ли, юзер закинув постом 200метров, не сильно хочет долго ждать ответа, ему надо ответить сразу, но 200 метров сразу не раскидаеться по нодам - имеем проблемку. код на пхп с орм, он как бы завершаеться до того, как реально будет извесно что файл сохранился - ну или не сохранился... чп малёк возникло... ноды попадали, некуда сохранять новые файлы. и вообще под вопросом, сохраняться ли они. а есчё файлы проходят првоерку на не пиратская ли копия или запрещённый контект - по так званным отпечаткам...вообщем файл может не сохраниться...а пхп код давно завершил работу.тут как бы опять встаёт разница - между системой, и сайтом, возможно с большой посещаемостью, но все равно ..."гавносайт", просто с модингом и другими фентифлюшками... 5. на пхп? мжеду селектом и инсертом Лок вешать??? ну ты блин даёшь. а то что пхп может в кому впасть тебя не смущает? а соединения будут постоянные использоваться, и последующее использование этого соединения возможно через длительное время. вот это уже действительно зло. может узкое мест ов моём варианте ты найдёшь - но это будут гигантская дыра по сравнению с вешаньем в базе локов извне, да ещё с какого языка!!! 6 информация для размышлений. я понял библиотеки джейсона для си . делфи не самая ходовая тема, но орм для си и делфи есчё менее ходовая тема. интересно - с 80 годов это дебилы на си програмируют что там это не стало модой или как? (вообще может это хитрость, но в подобных спорах я всегда привожу аргумент) - во времена до ооп в пхп кричали на всех углах про то как круто не замарачиваться с опп, от лозунгов долой знание о памяти и строгой типизации , приходим медленно к устроженнию типизцаии, и специальным класам, которые помагают более оптимально выделять память под масивы например. патерны тудаже, ресты и прочие серьезные и понты основаные на серьйзных вещах... я к чему виду - что сообщество пхпшников, медлнено порой но таки уверенно от personal home page писак - ну типа верстка в дримвивере, движуться в сторону к тому чтобы стать разработчиками. и язык потихоньку стаёт серьйзным, и идеология. ну тоесть в чистом виде - свё новое, это не изученное(забытое) старое. и вот орм, не было столько шума сколько в пхп в сообществе сишников. так может ли это быть продвинутой идеей, если всё продвижение пхп сообщества диктуеться языком джава, по большому счёту, продвижение которогго в свою очередь идёт от сишного сообщества. (я просто взял языки популярные как пример, не имея ввиду что именно так происходит) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 00:47 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453 а насчёт зла тригеров - я ожидал чтото на тему... зачастую тригерр использовать более предпочтительно чем хранимку, он быстрее, правда менее функционален - не всё в тригере можно сделать, что позволенно в хранимке , и даже в серьёзных субд где хранимку можно хранить в скомпилированом(уже разспознаном коде ввиде байткода) - она всёравно медленее и ресурсоёмней чем тригерр. и люди начинают всё что можно сделать в тригере туда тулить, но тут есть подводные камни - 1)...2)........ А из триггера дёрнуть хранимку нельзя? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 09:41 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, 1. "ну когда орм проверяет уникальность, и может быть не уникальным одно или другое поле - тебя не смущает??? !!! , так почему смутило что в базе..." - в базе вылетит ошибка при неуникальности ключа, и что бы узнать какой из них не уникален, надо будет парсить текст ошибки. При том ты не сможешь словить 2 ошибки одновременно (если оба ключа не уникальны). А я смогу, ведь для меня это будет не попытка записи, а именно процесс валидации перед записью. То есть 2 запроса с "LIMIT 1" и "WHERE" по нужному полю :) 2. В принципе я изначально также был согласен по этому поводу :) Просто выразил мысль, что подмены данных лучше избегать, если есть такая возможность (и если это не вызовет большого прироста в потреблении памяти). 2.1. Проехали тогда. К данной ситуации кэш в принципе не применим (по-моему мнению). Потому данное ответвление можно закрывать . 3. Если забыть о том, что я считаю это жесть каким неправильным решением, то остаётся один главный вопрос ("жесть как неправильно" обсудим после него) : А как же это всё-таки было реализовано? Коннект одного mysql сервера к другому. 4. Не понял что ты написал. Этот пункт снова похож на поток сознания :) Перефразируй, пожалуйста. Насчёт "тоесть ты считаешь что именно по этой причине мы работаем по разному с файловой системой и с субд - в количестве возможных ошибок?" - в целом да. Можно конечно выразить это фразой "количество ошибок", но я бы всё-таки использовал "разнообразность однотипных ошибок". Файл не записался на диск почему? - недостаточно места, ошибка записи, ошибка чтения, неправильное имя, файл уже существует, недостаточно прав, директория отсутствует. Ну в целом вроде всё (может что забыл, но я не админ всё-таки :) ) Почему запись не попала в таблицу? - ошибка синтаксиса, неуникальность одного из индексов (какого из?), отсутствие соединения, не выбрана база, не найдена таблица (какая из?), попытка записи несуществующего столбца (какого из?), неверно задан внешний ключ (какой из?). Теперь представим множественный insert в базу: любая из вышеописанных ошибок может произойти в момент вставки любой из записей. И как узнать какая из записей "сломана"? То есть ещё вариации (хотя по-моему это уже в ошибке даже не фиксируется... там фиксируется только сама суть ошибки, например повторение уникального индекса). Как видишь, ошибок намного больше, и почти каждая из них заставит нас парсить текст ошибки. Потому то и обработка ошибок должна быть разная. 5. А чем тебя смущает лок и транзакция? И то и другое будет автоматически отменено при завершении сессии. (то есть скрипт отработал, а лок остался - исключается) "а то что пхп может в кому впасть тебя не смущает?" - он что, коматозник? :) Что за термин такой "в кому впасть" :) Это речь про зацикливание что-ли? В общем поясни термин, тогда и обсудим. 6. На счёт делфи не знаю что сказать :) Давно уже не в теме что пишут и чем пользуются. На счёт же Си, я был бы очень удивлён, если бы кто-то придумал реализацию ORM на не ОО языке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 10:02 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
NekZalex564657498765453а насчёт зла тригеров - я ожидал чтото на тему... зачастую тригерр использовать более предпочтительно чем хранимку, он быстрее, правда менее функционален - не всё в тригере можно сделать, что позволенно в хранимке , и даже в серьёзных субд где хранимку можно хранить в скомпилированом(уже разспознаном коде ввиде байткода) - она всёравно медленее и ресурсоёмней чем тригерр. и люди начинают всё что можно сделать в тригере туда тулить, но тут есть подводные камни - 1)...2)........ А из триггера дёрнуть хранимку нельзя? ) нет нельзя... возможно в некоторых субд и можна, может даже в мускле, но там ограничения связанные с работой кода... это как загрузка до логина и после логина в систему...формально ты можеш из кода до логина, вызвать тот что после логина работает, но ведь он даст сбой изза отсутсвия залогиненного юзера. вот в тригере нельзя транкзанкции делать помню, нельзя модифицировать структуру базы ддл, нельзя выборку делать вплане возвращения результата - в хранимке ты можешь селект втулить, и его результат пойдёт как один из результатов работы хранимки... вообщем если брать субд в целом. есть ограничения(констрейнты, чекс ...мож есчё ккто называются), есть тригеры, есть хранимки - это список от самого быстрого к самому медленному, а также от самого ограниченного по возможностям к самому гибкому. - как всегда, либо быстрее, либо функциональней. кстате СкайАна - можно эмпирически сделать вывод, о быстроте работы ОРМ, так как да ты доказал - програмисту удобней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 11:27 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453, 1. "ну когда орм проверяет уникальность, и может быть не уникальным одно или другое поле - тебя не смущает??? !!! , так почему смутило что в базе..." - в базе вылетит ошибка при неуникальности ключа, и что бы узнать какой из них не уникален, надо будет парсить текст ошибки. При том ты не сможешь словить 2 ошибки одновременно (если оба ключа не уникальны). А я смогу, ведь для меня это будет не попытка записи, а именно процесс валидации перед записью. То есть 2 запроса с "LIMIT 1" и "WHERE" по нужному полю :) 2. В принципе я изначально также был согласен по этому поводу :) Просто выразил мысль, что подмены данных лучше избегать, если есть такая возможность (и если это не вызовет большого прироста в потреблении памяти). 2.1. Проехали тогда. К данной ситуации кэш в принципе не применим (по-моему мнению). Потому данное ответвление можно закрывать . 3. Если забыть о том, что я считаю это жесть каким неправильным решением, то остаётся один главный вопрос ("жесть как неправильно" обсудим после него) : А как же это всё-таки было реализовано? Коннект одного mysql сервера к другому. 4. Не понял что ты написал. Этот пункт снова похож на поток сознания :) Перефразируй, пожалуйста. Насчёт "тоесть ты считаешь что именно по этой причине мы работаем по разному с файловой системой и с субд - в количестве возможных ошибок?" - в целом да. Можно конечно выразить это фразой "количество ошибок", но я бы всё-таки использовал "разнообразность однотипных ошибок". Файл не записался на диск почему? - недостаточно места, ошибка записи, ошибка чтения, неправильное имя, файл уже существует, недостаточно прав, директория отсутствует. Ну в целом вроде всё (может что забыл, но я не админ всё-таки :) ) Почему запись не попала в таблицу? - ошибка синтаксиса, неуникальность одного из индексов (какого из?), отсутствие соединения, не выбрана база, не найдена таблица (какая из?), попытка записи несуществующего столбца (какого из?), неверно задан внешний ключ (какой из?). Теперь представим множественный insert в базу: любая из вышеописанных ошибок может произойти в момент вставки любой из записей. И как узнать какая из записей "сломана"? То есть ещё вариации (хотя по-моему это уже в ошибке даже не фиксируется... там фиксируется только сама суть ошибки, например повторение уникального индекса). Как видишь, ошибок намного больше, и почти каждая из них заставит нас парсить текст ошибки. Потому то и обработка ошибок должна быть разная. 5. А чем тебя смущает лок и транзакция? И то и другое будет автоматически отменено при завершении сессии. (то есть скрипт отработал, а лок остался - исключается) "а то что пхп может в кому впасть тебя не смущает?" - он что, коматозник? :) Что за термин такой "в кому впасть" :) Это речь про зацикливание что-ли? В общем поясни термин, тогда и обсудим. 6. На счёт делфи не знаю что сказать :) Давно уже не в теме что пишут и чем пользуются. На счёт же Си, я был бы очень удивлён, если бы кто-то придумал реализацию ORM на не ОО языке 1. давай ты просто согласишься с тем, что если есть стек вызовов, будь то функции в рамках одного кода, будь то работа участков кода на разных языках и в разных приложениях, если ошибка как пузырь всплывает в самый верх, её всегда можно отловить. можно делать проверку на самом верхнем уровне, можно на самом нижнем. в целом да, надо стараться делать проверку как можно выше. (это то счем предлагаю согласиться без обсужденей +- ) в данном случая я акцентирую внимание, на том что 1)ты ОРМ чтото там проверил, но субд про это ничего не знает...она всеравно будет делать свою проверку!!! 2)если ставить вопрос ребром, то (предлагаю согласиться без +-) - либо индекс и притом уникальный и ловить ошибку субд, - либо простой индекс и уникальность обеспечивает орм. ты же в своём подходе используешь типо компромис, уникальный индекс, + проверка ОРМ. но реально это не компромис, это просто шествие сразу двумя путями. вместо того чтобы парсить ошибку - делаешь проверку ОРМ, при том что всеравно сохраняеться шанс ошибки, ну либо вешать лок, что уже я описывал - лок извне изначально зло, особенно из пхп, особенно при постоянных подключениях... вот и вопрос - зачем? вот если говорить о том что уникальных ключей много...тут согласен. более того, чтобы юзер не угадывал, комбинации, лучше как принято...токо ввёл, аджаксом сразу проверили, и потом когда всё ок, есть шанс что юзер отправляет форму, и тут на тебе - уже два поля стали не уникальными. но...вообщем соглашусь с тобой. при проверке селектом гораздо проще разрешать мульти ошибки с уникальными значениями. однако... а какова реальная частота уникальности данных... я не критикую, но раз мы говорим в целом, а не о амбициях отдельных , а возможно даже большинства(большинство например считает иногда надо погавнокодить, я кстате среди них, но врядля стоит развивать теорию необходимого гавнокода). вот взять базу юзеров - уикальное поле одно, емейл. да принято логин требовать уникальный, изза этого у нас логины как у меня например... но... это не верный подход. вот вконтакте я заценил, что у них нету, что если есть петя пупкин, то я обязан быть петей1977 пупкиным, или петей пупкин1977, но не самим собой. ну этот вопрос оставим - пускай юзер у нас будет иметь несколько значений уникальных, логин, емейл, адрес персональной страницы вместо /user?id=4384783, есчё чегото. а вот остальное... уникально поле одно? да даже тот же юзер, если говорить о нормированых данных, это уже не нормированные данные получаться. униклальные ключи, называються альтернативными, альтернатива примари... как тут подмечали, из названия следует сокральный смысл... альтернатива обычно одна, иначе это уже широкий выбор. == но да, верно подметил - база в ошибке выдаст одну неуникальность, даже если два нарушения... хотя кто знает, может это обходиться , просто я не знаю. 2. подмена данных нужна. вцелом, хранение данных и использование - это разные вещи. и чем архивней природа данных, тем логичней что структура хранения и использования разные. ну да ладно - моя позиция. подменны данных не надо бояться - прямейшая задача орм. а именно буквы М в абревиатуре. (а в класлоудере подмена именования класов не смущает?) 3.я писал, это был постгри. было дело до 2008 года. с тех пор постри не видел. для мускла по форуму слышал что федерейт вместо иннодб позволяет чтото там. но в посгре насколько я помню, там был спецальный синтаксис, отправки скл команды именно в другую базу. 4.:) загляни в любую библиотеку файловой системы на си..увидишь что количество ошибко там как и в мускле... сотни-тысячи. потому ты и незнаешь большого числа ошибок, ибо не лезешь туда. согласен с твоим интуитивным ощущением, что с субд работаем всётаки по другому, более разнообразно. дык субд и файловая система это разные системы. субд, это как писал выше, развитие файловых хранилищ данных, когда решили, давайте в сервер добавим ХХХХ (оцени иронию) - ХХХХ - это сервер моделей. переход от файлсерверных субд к клиент серверным, это добавка сервера моделей, и модель в том же значении, что и мы понимаем её в мвс. идея была в чом не просто не передавать файлы данных по сети на машины чтобы они там обрабатывались, а более продвинутые субд, передавали не весь файл базы, а только части...нужной части (прослеживаешь свою аналогию ...база дай мне часть файла данных, залочь нафиг всю таблицу, чтоб никто не вставил юзера с таким же мылом как и я хочу, я тебе скоро пришлю часть файла данных, потом снимешь лок) а ввиду однотипности логики (модели) работы с данными, перед файловой субд посути, поставить сервер моделей, придумать язык для него, и пускай не будет этой проблемы с длительными блокировками данных что мешает работать большому числу клиентов(причины последнего - развитие сетей). вот отсюда прошу сделать вывод. обратя внимание - ты когда говоришь о своей позиции, расматриваешь база + один сайт, где да, одновременно может быть 10 юзеров обратились...но каковы шансы что все 10 хотят создать логин пупка12!? или другое идентичное действие связанное с модификацией данных. или расматриваешь в том числе ситуацию, когда изменение данных существенно преобладает над чтением. скажем у нас юзеры мосово закидывают данные , а потом иногда ктото смотрит отчёты... тоесть на 1000 вставок, припадает один селект с агрегацией, и 10 селектов выборок. 5. при использовании постоянных соединений, лок повешеный но не снятый пхп скриптом остаёться висеть. как и транкзанкция остаёться не завершённой. а впасть в кому, я имел ввиду любая причина завершения работы до магической строчки - ролбек. сбой в пхп, критическая ошибка, ошибка в логике, исключение, которое ведёт на выход ,а код писал, человек как ты -писал не для постоянных подключений и не знал этого факта, что может получиться если подключения постоянные. 6 ну если я прокоментирую эту строчку, то начнёться холивар на тему что такое ООП. поэтому скажу вкратце. да, без ооп, отсутсвует понятие обькта, без него ОРМ, изза первой буквы О теряем смысл., так что я согласен с тобой, а ты давай согласишься со мной, что СРМ вполне допустим. буква С от слова структ, тип данных, предшественник буквы О это когда задана структура как клас по сути(без модификаторов видимости) некоторые поля, могут быть указателями на функции - аля методы, все по умолчанию паблик, но правда this отсутсвует. то вполне актуальна задача - СРМ, а учитывая что в структурах нельзя защитить данные...оооо, проверки вроде которых ты хочешь делать в ОРМ есчё более актуальны) так вот, во времена когда ты был в теме, СРМ как и ОРМ не было и нету шумной темой в вышеупомянутых языках... (ими код обычно пишут когда хотят проиводительности, о чом я уже намекал, и скайАна прямо сказал - ОРМ, удобно для програмиста, плюс не надо учить много, достаточно одного скриптового языка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 12:11 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, 1. )) +- ... Считаю, что проверку стоит делать на каждом слое абстракции. То есть, если взять в пример Yii (php), то это: а) Модель б) конструктор запросов в) драйвер г) сервер (база) Каждый из них будет проверять то, что доступно на его уровне: модель - входные данные, конструктор запросов - присоединяемые параметры, и что он там ещё может, не знаю драйвер - наличие соединения ну и т.д., что связано с его уровнем сервер - синтаксис, нерушимость индексов, бла-бла-бла ... При чём, все ошибки, возникающие не на самом верхнем уровне, считаются исключительными ситуациями (ошибками). То же, что происходит на самом верхнем уровне, считается нарушением формата (содержания) входных данных, и должно предусматривать перезапрос этих данных у источника. То есть, модель не обработала ситуацию неуникальности поля - значит ошибка (если оно не уникально)... Обработала - значит перезапрос со словами "тут так нельзя..." Во :) Прикольно получилось по полочкам разложить, вроде :) 2. Да. )) По этому пункту в целом всё. 3. Ок. Пускай :)... В mysql я о такой возможности не слышал. Потому, учитывая специфичность данного метода, я думаю не стоит вешать на плечи базы данных обновление инфы в других хранилищах (на других серверах, в других базах). Ведь будь у нас 10 проектов, 3 на одной системе и 7 на другой, потом просто нафиг запутаешься что и где, потому для универсальности стоит придерживаться одного варианта реализации. А в данном случае это ORM (ведь другой вариант не доступен в том же mysql). 4. Суть была не в количестве, а в качестве :). Пускай в файловой системе сотни ошибок (между прочим многие из них даже не связаны с файлами в целом :) скорее с нарушением самой структуры файловой системы), но каждая из них полностью описывается одним параметром - кодом. В СУБД, даже если их не сотни, а десятки (хотя те же сотни всё-таки :) ), они не могут быть однозначно распознаны по коду. По поводу моей точки зрения "база + один сайт", с некоторого момента (в данном разговоре) мы приняли позицию рассмотрения "база + множество сайтов (подсистем)". 5. А что такое постоянное соединение? Постоянное в пределах скрипта, или в пределах некой системы (в которой висит 10 скриптов в виде демонов)? В первом случае, как я написал, подобная ситуация исключается. Если скрипт вылетит ошибкой, он завершиться, сессия оборвётся, лок снимится, а транзакция завершится. Во втором случае, не знаю возможно ли в каком-нить другом языке передавать дескриптор соединения между процессами, но насколько я знаю в php это не получится :) Насколько мне помнится, в компилируемых языках вообще получится access violation при обращении не к своим данным (но могу ошибаться, давно это было) Но вообще всегда можно при неудаче отловить исключение или ошибку (если не исключение, а fatal) и там принудительно разблочить все таблицы и откатить все транзакции. 6. А можем ли мы унаследовать одну структуру от другой? Если нет, тогда каким образом мы можем создать общую заготовку под все модели, а на её основе реализовать уже отдельные модели? Я считаю, что даже с учётом присутствия структур задача не реализуема :) Если сделаешь элементарный набросок (типа структура-основа, структура-модель, несколько строчек как пользовать) - соглашусь. Просто я себе это не представляю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 14:17 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453, 1. )) +- ... Считаю, что проверку стоит делать на каждом слое абстракции. То есть, если взять в пример Yii (php), то это: а) Модель б) конструктор запросов в) драйвер г) сервер (база) Каждый из них будет проверять то, что доступно на его уровне: модель - входные данные, конструктор запросов - присоединяемые параметры, и что он там ещё может, не знаю драйвер - наличие соединения ну и т.д., что связано с его уровнем сервер - синтаксис, нерушимость индексов, бла-бла-бла ... При чём, все ошибки, возникающие не на самом верхнем уровне, считаются исключительными ситуациями (ошибками). То же, что происходит на самом верхнем уровне, считается нарушением формата (содержания) входных данных, и должно предусматривать перезапрос этих данных у источника. То есть, модель не обработала ситуацию неуникальности поля - значит ошибка (если оно не уникально)... Обработала - значит перезапрос со словами "тут так нельзя..." Во :) Прикольно получилось по полочкам разложить, вроде :) 2. Да. )) По этому пункту в целом всё. 3. Ок. Пускай :)... В mysql я о такой возможности не слышал. Потому, учитывая специфичность данного метода, я думаю не стоит вешать на плечи базы данных обновление инфы в других хранилищах (на других серверах, в других базах). Ведь будь у нас 10 проектов, 3 на одной системе и 7 на другой, потом просто нафиг запутаешься что и где, потому для универсальности стоит придерживаться одного варианта реализации. А в данном случае это ORM (ведь другой вариант не доступен в том же mysql). 4. Суть была не в количестве, а в качестве :). Пускай в файловой системе сотни ошибок (между прочим многие из них даже не связаны с файлами в целом :) скорее с нарушением самой структуры файловой системы), но каждая из них полностью описывается одним параметром - кодом. В СУБД, даже если их не сотни, а десятки (хотя те же сотни всё-таки :) ), они не могут быть однозначно распознаны по коду. По поводу моей точки зрения "база + один сайт", с некоторого момента (в данном разговоре) мы приняли позицию рассмотрения "база + множество сайтов (подсистем)". 5. А что такое постоянное соединение? Постоянное в пределах скрипта, или в пределах некой системы (в которой висит 10 скриптов в виде демонов)? В первом случае, как я написал, подобная ситуация исключается. Если скрипт вылетит ошибкой, он завершиться, сессия оборвётся, лок снимится, а транзакция завершится. Во втором случае, не знаю возможно ли в каком-нить другом языке передавать дескриптор соединения между процессами, но насколько я знаю в php это не получится :) Насколько мне помнится, в компилируемых языках вообще получится access violation при обращении не к своим данным (но могу ошибаться, давно это было) Но вообще всегда можно при неудаче отловить исключение или ошибку (если не исключение, а fatal) и там принудительно разблочить все таблицы и откатить все транзакции. 6. А можем ли мы унаследовать одну структуру от другой? Если нет, тогда каким образом мы можем создать общую заготовку под все модели, а на её основе реализовать уже отдельные модели? Я считаю, что даже с учётом присутствия структур задача не реализуема :) Если сделаешь элементарный набросок (типа структура-основа, структура-модель, несколько строчек как пользовать) - соглашусь. Просто я себе это не представляю. 1) можно, делать проверку на каждом урвоне. особенно в твоём примере множествнной уникальности. но это уже не орм:) вспомни..на кохане class myModel extends ORM это уже прикрутка сервисов, валидация регулярками, валидация првоеркой по базе, кешу, может есчё по каким внешним сервисам - скажем проверка по днс.... согласишься с таким!? особенно в случае множественной уникальности полей, полезно в модели пхпшной проверить уникальность отдельным селектом, но это не часть орм. это умение валидации - как во тпроверки в хтаксесе, втом числе хапуск внешней команды в шеле, но мы же не будем говорить что у апаче встроенная поддержка шелла. 2) закрыли 3)вот прицепился же к ОРМ. особенно в контексте пхп языка. вот тот случай с постгри что я описывал, там на пхп написана только вебинтерфейс для получения отчётов и настройки системы...до этого админами делалось напрямую в базе, а когда менеджерам передали, нода было сделать интерфейс. был второй - для создания планов эфира(видео крутилось рекламное...сосбвенно логи бросаемые между базами, это лог показа ) но там я настоял что это дебилизм делать подобное ввиде веба. мне сказали орм и пхп это круто...я подолждал пол годика, когда благополучно загавнокоженый сайт рухнул(без моего участия...я ваще не касался), и расказали про месяц два для возобновления работы, я на экселе сделал быстрое решение для работы с базой хоть както(за день) а начали и за две недели сделали клиентское приложение на делфи. итого, из фиговой тучи кода, на делфи, на си, на шеле, стороннего софта не связанного с пхп, только малая часть на пхп. ну и про какие универсальности мы говорим.??? да даже задачи сканера портов или файловой системы, или чего угодно кроме текста в текстовом файле...да и то вопрос, пхп один из худших вариантов для реализации. и вот то чтото, делает правки в базе. и где ОРМ универсальный. 4)кстате - я может это упустил, но таки под система из числа подсистем подразумевалось именно выше, база + чтото на пхп, и плюс не одно совершенно не связанные спхп вещи, а возможно и человеком вцелом - турникет например, отправляет в базу данные о работе пищалки(кто прошол и по какому айди пропуска грубо говоря) не можно стулить на пхп апи между турникетом и базой...но зачем. вот у нас на паркинге...я просто видя как оно работает, понял что вот так - стоит пищалка , она работает с приложением на компьютере на си написаном, которое работает с базой, есть вебморда для проверки действительности пропусков и отчётов по месту, человеку, автомобилю. есть интерфейс поиска единичной записи(человек, место , авто) и вывод лога за интервал. полагаю вебинтерфейсом добавили функции отсутсвующие в решении из коробки. 5)в пхп persistent connection. fast-cgi режим, там worker висит в памяти обрабатывая запросы один за другим. да и в апаче пхп может быть загружен как модуль...тоесть он не перезапускаеться при каждом запросе. и это свойство самого пхп движка скажем так...что он при команде закрыть подключение, его не закрывает, а оставляет открытым, и при первой надобности подключиться к томуже серверу с темиже параметрами, задействует его. 6)ну раз в джаваскрипте сделали экстендс и прочее...ооо, я думаю везде сделаешь. да наследования структур нету но я имел ввиду. возьми обьект ОРМ. представь себе что там всё паблик...ну были же времена когда все было паблик в пхп. теперь представь что вместо методов, переменные(поля) но туда записываються функции(колбеки) а теперь представь что нету наследования, но есть трейты. на си....да это будет тоже самое что на пхп слепить несколько масивов. есть структура1, аля родитель один, есть структура2, аля родитель два, получить потомка с этим же добром.ну как два пальца обоссать. я ктому, что обьектов может и небыло когда ты писал на делфи си чтото, или ты просто ими не пользовался - но задача была - разница в структуре данных в программе, и в базе. лан...я думаю мы получили что-то новое все кто хотел. ЗЫ не если ктото чтото спросит, отвечу, но если чесно подустал мемуары писать, а коротко не получаеться без конкретного вопроса. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 15:58 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
а согласитесь это веселее чем отвечать на вопрос, почему у меня between 15 and between 17 не работает. или как Помогите найти скрипты для вывода на сайте под свой дизайн своих курсов валют. Самому лень искать :) в поисковиках или написать на РНР. Спасибо! :) удачи всем. Я лишь знаю, что ещё многого не знаю, и хочу научиться, но о большей части даже не догадываюсь и никогда не научусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 16:01 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453skyANAпропущено... Зло в том, что логика изменения состояния объекта размазывается и становится запутанной и малопонятной, а зачастую и вовсе неожиданной. Есть у вас некоторое действие, что должно перевести объект в такое-то состояние, ну напишите хранимку для этого действия. Не пишите триггеры из следующих соображений: вот я изменил такие-то поля, напишу в триггере логику, с ними связанную. И откуда бы я не изменил эти поля, всё будет работать. Вы не один! Потом кто-то другой будет долго соображать, почему его код приводит к неожиданным результатам :) мдяяяя. так вы вообще противник ооп похожеОпять мимо. Дальше не читал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 16:07 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, 1. А к чему тогда отнести валидацию данных модели, как не к модели? :) Дело в том, что функционал модели намеренно сокращают (не все... новички просто не думают ). ORM - это прослойка. В "прослойку" данные поступают с обеих сторон. Просто мы привыкли доверять базе, в которую мы сами же эти данные занесли (ведь мы их проверили, когда заносили), но по сути данные должны проверяться и при поступлении извне, и при поступлении с базы. Если считать валидатор неким внешним модулем, то структура получится не супер: База - валидатор - модель - валидатор - мир По сути модель просто валидирует сама себя, дабы остаться в рабочем состоянии :) Вот я сейчас приду к тебе и скажу что тебе надо отрезать себе руку. Кто по твоему провалидирует пришедшие данные? Я? или тот, кто тебе пилу продаст? НЕТ!!! ты сам подумаешь и скажешь: "Нафиг надо! Я без руки стану неполноценным. Тебе надо - ты и реж себе руки". Вот ты - экземпляр некой модели "Человек". Кто в данном случае провёл валидацию данных? 2. просто что бы счёт не сбивать 3. Тут почему-то про ПХП пошло... и про "не на ПХП значит не универсально" :) Я этого не говорил, а ты по какой-то причине такое придумал. Я лишь сказал, что если ты одну и ту же задачу от случая к случаю решаешь разными методами, то твоя система становится уникальной от проекта к проекту. А это всё-таки очень не круть (уж поверь, я знаю... сейчас от такой стараюсь уйти, с начальником спорю.. к сожалению он её написал 15 лет назад ) Потому я и сказал что решать надо на стороне клиента, так как не каждый сервер на своей стороне позволить применить предложенное решение, а потому от сервера к серверу это решение начнёт меняться (в зависимости от их возможностей) 4. Ты не в ту ветку ушёл с данным вопросом :) Основное было сначала... последняя фраза это приписка (что бы все понимали, что речь об одном и том же, просто виденье разное) 5. даааа.... про постоянные соединения не знал (сейчас почитал). Однако от своих слов всё-ровно не готов отказаться. Ведь при появлении ошибки или исключения мы можем разблокировать все таблицы и завершить транзакции. А если при завершении работы скрипта что-то осталось заблочено, то руки такому программисту отрывать надо :) Кто может гарантировать, что человек, накосячивший с логикой в php, не сделает чего-то подобного на sql? 6. Что-то не нашёл данных по трейтам на Си (только начиная с С++). Они там есть? :) Если есть - значит по сути реализуемо всё-таки. Но вопрос удобства. Смотри... я создаю новую модель: 6.1. На каждое свойство мне надо написать 2 функции (геттер и сеттер), ведь самого свойства как такового нету 6.2. Учитывая, что сеттер - это уже функция, а магических методов как я понимаю там нету... Получаем необходимость вызывать валидатор прямо в сеттере (то есть сначала пишем в конфиге, а потом ещё и в методе вызов валидатора из конфига). Ну или отказываемся от конфига и пихаем прямые вызовы прямо в сеттер. 6.3. Не могу унаследовать одну модель от другой (хотя надо не часто, но всё же иногда востребовано). Точнее могу, но с некоторыми сложностями и не всегда 6..4, 5, 6, бесконечность - я почти не знаю Си, потому мог ещё много что упустить В общем, возможно для сишника такой подход просто не удобен, учитывая инструментарий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 18:56 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
Програмёрalex564657498765453, 1. А к чему тогда отнести валидацию данных модели, как не к модели? :) Дело в том, что функционал модели намеренно сокращают (не все... новички просто не думают ). ORM - это прослойка. В "прослойку" данные поступают с обеих сторон. Просто мы привыкли доверять базе, в которую мы сами же эти данные занесли (ведь мы их проверили, когда заносили), но по сути данные должны проверяться и при поступлении извне, и при поступлении с базы. Если считать валидатор неким внешним модулем, то структура получится не супер: База - валидатор - модель - валидатор - мир По сути модель просто валидирует сама себя, дабы остаться в рабочем состоянии :) Вот я сейчас приду к тебе и скажу что тебе надо отрезать себе руку. Кто по твоему провалидирует пришедшие данные? Я? или тот, кто тебе пилу продаст? НЕТ!!! ты сам подумаешь и скажешь: "Нафиг надо! Я без руки стану неполноценным. Тебе надо - ты и реж себе руки". Вот ты - экземпляр некой модели "Человек". Кто в данном случае провёл валидацию данных? 2. просто что бы счёт не сбивать 3. Тут почему-то про ПХП пошло... и про "не на ПХП значит не универсально" :) Я этого не говорил, а ты по какой-то причине такое придумал. Я лишь сказал, что если ты одну и ту же задачу от случая к случаю решаешь разными методами, то твоя система становится уникальной от проекта к проекту. А это всё-таки очень не круть (уж поверь, я знаю... сейчас от такой стараюсь уйти, с начальником спорю.. к сожалению он её написал 15 лет назад ) Потому я и сказал что решать надо на стороне клиента, так как не каждый сервер на своей стороне позволить применить предложенное решение, а потому от сервера к серверу это решение начнёт меняться (в зависимости от их возможностей) 4. Ты не в ту ветку ушёл с данным вопросом :) Основное было сначала... последняя фраза это приписка (что бы все понимали, что речь об одном и том же, просто виденье разное) 5. даааа.... про постоянные соединения не знал (сейчас почитал). Однако от своих слов всё-ровно не готов отказаться. Ведь при появлении ошибки или исключения мы можем разблокировать все таблицы и завершить транзакции. А если при завершении работы скрипта что-то осталось заблочено, то руки такому программисту отрывать надо :) Кто может гарантировать, что человек, накосячивший с логикой в php, не сделает чего-то подобного на sql? 6. Что-то не нашёл данных по трейтам на Си (только начиная с С++). Они там есть? :) Если есть - значит по сути реализуемо всё-таки. Но вопрос удобства. Смотри... я создаю новую модель: 6.1. На каждое свойство мне надо написать 2 функции (геттер и сеттер), ведь самого свойства как такового нету 6.2. Учитывая, что сеттер - это уже функция, а магических методов как я понимаю там нету... Получаем необходимость вызывать валидатор прямо в сеттере (то есть сначала пишем в конфиге, а потом ещё и в методе вызов валидатора из конфига). Ну или отказываемся от конфига и пихаем прямые вызовы прямо в сеттер. 6.3. Не могу унаследовать одну модель от другой (хотя надо не часто, но всё же иногда востребовано). Точнее могу, но с некоторыми сложностями и не всегда 6..4, 5, 6, бесконечность - я почти не знаю Си, потому мог ещё много что упустить В общем, возможно для сишника такой подход просто не удобен, учитывая инструментарий? 1. о, значит мы уже не доверяем данным из базы в ОРМ... ты вниамательно читал про идею перехода от файлсерверной архитектуры к клиент серверной. так вот как никрути ОРМ это пол шага назад. (это я имею ввиду минусы связанные с тем, что в орм тулят работу вместо базы) . в моём понимании ОРМ должно заниматься работой до базы при движении в базу, и после в обратную сторону, но не вместо. 2.угу 3.дык этож одна из центральных моих идей - вот почему я хвалил смартри и подобное. главный мой аргумент - если смарти существует под пхп, питон, ноуджиес, перл, руби - шаблоны автоматически кросплатформенные в этом смысле. конфиги можно ввиде пхп масива хранить, в пхп файле, а можно иначе...в чом удобство в иначе? а чтобы не только для пхп кода это было удобочитаемым конфигом, а и для кода на другом языке. в симфони помниться заглядывал, там конфиг отличаеться от иии,коханы, кодигнитера, цмсок простых - там не пхп файл возвращающий масив, и вообще не пхп синтаксис. зайдём сдугой стороны, а нафига мы пытаемся делать вещи не являющиеся частью бизнеслогики, не жостко привязанные к языку реализации... про базу кто подумает? и таки да, когда мы говорим про систему а не сайт, 90% что ядром будет не вебморда. а для сайта, пусть даже с наворотами - вот счас домучал иии, заставил её через тамошний орм получать агрегированные данные. медлено, тупо - да болт с ним, будет работать не куда не денеться, хотя если бы надо было обязательно серьёзно, то преагрегация в базе, делалася бы как ни крути средствами базы. ибо тут уже, никакая высокая идея не обяснит зачем из пхп кода это делать. кслову вопрос, а вообще есть ормы и прочая лабуда, расчитанные на создание прегрегаций в базе? 5.вот.. и много кто не знает, и писал бы свой код не расчитывая на это. а я бы взял твой код, мне надо постоянные, включил, а потом бы узнал что ты незнал, когда у меня локи висят подолгу.я не как тебе минус.а как илюстрация простой истины, чем больше елементов в цепи, тем чаще будут проблемы. 6. не трейтов там нету, я это как аналогия.(вообще чисто эмирически, если на си написан интерпритатор пхп, и там есть ооп, то на си без ооп, можно реализовать ооп) это как пить дать. да чтоты акцентируешь внимание на том как ооп воссоздать. я это писал в другом контексте -пускай обьектов небыло, но были структуры, и их тоже надо было сохранять считывать из базы, и структуры были как и счас обьектные типы, удобные для кода, а в базе они храняться реляционной немного не так - ну нету у юзера (запись в базе) поля информация(множества пар ключ значение) а в юзере(структуре на си) есть поле информация, которое также являеться структурой. задача мапинга одной структуры данных в другую стояла, стоит, и будет стоять везде где происходит стык разных алгоритмов обработки. ибо программа = алгоритм*структура_данных. другой алгоритм, для еффективности програмы в целом, другая и структура будет. задача была, и решалась, но небыло крутого слова орм, да и решалась в другом контексте - преобразование типов. того типа который акуратно ложиться в базу и встаёт из неё, и того который используется. ладно...давай договримся так, когда меня начнёт крыть опять, и я принципиально захочу чтото сделать через орм как сёдня, я не буду тратить пол дня, а спрошу у вас ...всех дискутирующих, а вы ответите... и вы когда чтото надо будет не через орм, смело обращайтесь...помогу...пусть это будет костыли в терминологи скаАна, но опыт не пропьёшь и в карты не проиграешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 21:08 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Програмёр, Парни, сделайте уже стартап, уедьте на доход от него на Ямайку и избавьте народ от прочтения портянок бреда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2015, 23:44 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453ладно...давай договримся так, когда меня начнёт крыть опять, и я принципиально захочу чтото сделать через орм как сёдня, я не буду тратить пол дня, а спрошу у вас ...всех дискутирующих, а вы ответите... и вы когда чтото надо будет не через орм, смело обращайтесь...помогу...пусть это будет костыли в терминологи скаАна, но опыт не пропьёшь и в карты не проиграешь.Может всё-таки хватит мне приписывать всякую надуманную чушь? :) Сам надумал, себе и приписывай. Мне вот постоянно с MongoDB надо общаться не через ОРМ, с Counchbase не через ОРМ, с внутренними и сторонними сервисами не через ОРМ, с lock-сервером не через ОРМ, но боюсь Вам не хватит компетенций, чтобы мне как-то помочь. Триггеров-то нема. Да и с триггерами (двумя) в основном хранилище я как-то сам уже, представляете, разобрался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 09:35 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAalex564657498765453ладно...давай договримся так, когда меня начнёт крыть опять, и я принципиально захочу чтото сделать через орм как сёдня, я не буду тратить пол дня, а спрошу у вас ...всех дискутирующих, а вы ответите... и вы когда чтото надо будет не через орм, смело обращайтесь...помогу...пусть это будет костыли в терминологи скаАна, но опыт не пропьёшь и в карты не проиграешь.Может всё-таки хватит мне приписывать всякую надуманную чушь? :) Сам надумал, себе и приписывай. Мне вот постоянно с MongoDB надо общаться не через ОРМ, с Counchbase не через ОРМ, с внутренними и сторонними сервисами не через ОРМ, с lock-сервером не через ОРМ, но боюсь Вам не хватит компетенций, чтобы мне как-то помочь. Триггеров-то нема. Да и с триггерами (двумя) в основном хранилище я как-то сам уже, представляете, разобрался из википедии На практике всё не так просто и очевидно. Все системы ORM обычно проявляют себя в том или ином виде, уменьшая в некотором роде возможность игнорирования базы данных. Более того, слой транзакций может быть медленным и неэффективным (особенно в терминах сгенерированного SQL). Все это может привести к тому, что программы будут работать медленнее и использовать больше памяти, чем программы, написанные «вручную». вот это я имел ввиду, когда увидишь минусы орм, а судя по твоим постам их нету. вот тогда пиши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 11:11 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAalex564657498765453ладно...давай договримся так, когда меня начнёт крыть опять, и я принципиально захочу чтото сделать через орм как сёдня, я не буду тратить пол дня, а спрошу у вас ...всех дискутирующих, а вы ответите... и вы когда чтото надо будет не через орм, смело обращайтесь...помогу...пусть это будет костыли в терминологи скаАна, но опыт не пропьёшь и в карты не проиграешь.Может всё-таки хватит мне приписывать всякую надуманную чушь? :) Сам надумал, себе и приписывай. Мне вот постоянно с MongoDB надо общаться не через ОРМ, с Counchbase не через ОРМ, с внутренними и сторонними сервисами не через ОРМ, с lock-сервером не через ОРМ, но боюсь Вам не хватит компетенций, чтобы мне как-то помочь. Триггеров-то нема. Да и с триггерами (двумя) в основном хранилище я как-то сам уже, представляете, разобрался кстате, на конференции по биг дата, выступали по 20-30 лет люди, насчёт нового прорыва в науке - монго и подобное, и пару матёрых дядек, на тему не стоит кидаться в монго и подобное. оно хорошо для какойто конкретной задачи, это не решение проблем реляционной модели. так вот, вы зачем то ломанулись в монго, и counchbase. а то я таки да, есчё не работал, ...ну работал но то я не считаю(по вашим занощивым меркам, я собаку сел на монго, не по моим, ибо я не знаю минусов её, и не чётко представляю плюсы все) - поэтому по сути, для вопроса зачем монго, могу только пересказывать чужие слова - своего мнения нету, задач не было, где бы нехватало памяти, сети, проца, время отклика надо уменьшать до быстрее быстрого. тоесть делал, но вся эта муть при таких нагрузках работала бы себе и на мускле. паралельные вычисления делал... но... когда мы говорим о 10 одновременных юзерах, и 8 потоков команд на 4 ядернике... то что вычисления каждого из 10 паралельные что не паралельные... это как говорят - пытаться попой костёр задуть. а вы походу таки сильно поработали на этих базах. можете рассказать: 1)где можно найти преимущества в монго(обьектность не предлагать, сдесь я согласен с вами насчёт ОРМ, поэтому у меня мускл тоже обьектная база) 2)где можно найти минусы . можно просто пример задачи и решения и предполагаемого решения на другой субд. я думаю это всем интересно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 11:27 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453вот это я имел ввиду, когда увидишь минусы орм, а судя по твоим постам их нетупотому как ты делаешь не правильные выводы из моих постов я написал, что ORM - это всего-лишь инструмент, а ты из него ветряную мельницу построил и борешься с ней и при этом на меня зачем-то сваливаешь свои проблемы с пониманием предмета :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 11:30 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453skyANAпропущено... Может всё-таки хватит мне приписывать всякую надуманную чушь? :) Сам надумал, себе и приписывай. Мне вот постоянно с MongoDB надо общаться не через ОРМ, с Counchbase не через ОРМ, с внутренними и сторонними сервисами не через ОРМ, с lock-сервером не через ОРМ, но боюсь Вам не хватит компетенций, чтобы мне как-то помочь. Триггеров-то нема. Да и с триггерами (двумя) в основном хранилище я как-то сам уже, представляете, разобрался кстате, на конференции по биг дата, выступали по 20-30 лет люди, насчёт нового прорыва в науке - монго и подобное, и пару матёрых дядек, на тему не стоит кидаться в монго и подобное. оно хорошо для какойто конкретной задачи Спасибо, кэп. Дальше опять много букоф непонятно о чём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 11:33 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANAalex564657498765453вот это я имел ввиду, когда увидишь минусы орм, а судя по твоим постам их нетупотому как ты делаешь не правильные выводы из моих постов я написал, что ORM - это всего-лишь инструмент, а ты из него ветряную мельницу построил и борешься с ней и при этом на меня зачем-то сваливаешь свои проблемы с пониманием предмета :) ну дык, уважаемый, неправильное понимание твоих слов, это 50 на 50 моя твоя недоработка. но ты же 0 раз попытался свою мысль по другому изложить. вот взять ключевые моменты моей мысли - валидация например, в скольких разных постах она проскакивает!? а твои. скоко раз просил и я и другие тут поподробней про чтото рассказать. твой ответ поподробней короче заданного вопроса. например про тригерры зло. твой ответ лишь то, что сгодиться под название статьи, отвечающей на вопрос, один из минусов тригеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 10:30 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
skyANA, может я чегото и не понимаю, но форум на то и форум, а не статья, чтобы из непонимания выросло понимание. я ж потому и настырно поддерживаю разговор, чтобы хоть гдето, хоть ктото - указал на то что я не понимаю. пример, Программер верно подметил насчёт проверки сразу нескольких уникальных полей в одной таблице, через отдельные селекты можно сразу найти не валидные, а через анализ ошибки только первое не валидное значение(не уникальное) ...а я как-то не думал о этом... опыт больше основан на системах а не сайтах - то-бишь данные технические, аля комп, уникальное поле одно - макадрес в сети, или в учёте, серийный номер, тоесть реально уникально примари кей обычно у меня, в меньшей части есчё одно поле, и совсем редко, но один уникальный индекс из пары полей - обычно на дереве ,ибо уникальность среди прямых потомков одного родителя только... вот человек привел не лозунг, селектом валидировать лучше, а пример... я бы с радостью от тебя прочитал подобное, тем более что судя по всему, ты поработал с разными субд и не мало, то есть опыт есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 10:35 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
alex564657498765453skyANA, может я чегото и не понимаю, но форум на то и форум, а не статья, чтобы из непонимания выросло понимание. я ж потому и настырно поддерживаю разговор, чтобы хоть гдето, хоть ктото - указал на то что я не понимаю. пример, Программер верно подметил насчёт проверки сразу нескольких уникальных полей в одной таблице, через отдельные селекты можно сразу найти не валидные, а через анализ ошибки только первое не валидное значение(не уникальное) ...а я как-то не думал о этом... опыт больше основан на системах а не сайтах - то-бишь данные технические, аля комп, уникальное поле одно - макадрес в сети, или в учёте, серийный номер, тоесть реально уникально примари кей обычно у меня, в меньшей части есчё одно поле, и совсем редко, но один уникальный индекс из пары полей - обычно на дереве ,ибо уникальность среди прямых потомков одного родителя только... вот человек привел не лозунг, селектом валидировать лучше, а пример... я бы с радостью от тебя прочитал подобное, тем более что судя по всему, ты поработал с разными субд и не мало, то есть опыт есть. Я крут :-P ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:21 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
По моему ИМХО 1) ОРМ - для того что б связать БД с ООП 2) ОРМ позволяет не задумываться, какая СУБД используется минусы 1) До нативного SQL как до неба раком, не видел я, что б ЮНИОН нормально поддерживался 2) RAM надо в разы больше 3) О массовых апдейтех, делитах, инсертах, как правило, не может быть и речи, все работает по условию "where id=x" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 10:52 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
artasПо моему ИМХО 1) ОРМ - для того что б связать БД с ООП 2) ОРМ позволяет не задумываться, какая СУБД используется минусы 1) До нативного SQL как до неба раком, не видел я, что б ЮНИОН нормально поддерживался 2) RAM надо в разы больше 3) О массовых апдейтех, делитах, инсертах, как правило, не может быть и речи, все работает по условию "where id=x" Я в некоторых местах и пишу нативный SQL в ORM-вызовах. ORM далее автоматом результат мапит и возвращает объект с данными. Касаемо проблем с RAM - не обязательно мапить данные и забивать ОЗУ, можно из ORM вернуть открытое соединение с данными, пройтись по ним и сделать что требуется. Я к тому, что возможны различные вариации использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 12:20 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
artas1) До нативного SQL как до неба раком, не видел я, что б ЮНИОН нормально поддерживался Да пожалуйста artas2) RAM надо в разы больше Прям в разы? Может, если только дело в неоптимальном кэшировании. artas3) О массовых апдейтех, делитах, инсертах, как правило, не может быть и речи, все работает по условию "where id=x" Это да, хотя, можно сделать воркэраунд как здесь в один запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 13:26 |
|
||
|
Зачем нужен ORM?
|
|||
|---|---|---|---|
|
#18+
st_startasПо моему ИМХО 1) ОРМ - для того что б связать БД с ООП 2) ОРМ позволяет не задумываться, какая СУБД используется минусы 1) До нативного SQL как до неба раком, не видел я, что б ЮНИОН нормально поддерживался 2) RAM надо в разы больше 3) О массовых апдейтех, делитах, инсертах, как правило, не может быть и речи, все работает по условию "where id=x" Я в некоторых местах и пишу нативный SQL в ORM-вызовах. ORM далее автоматом результат мапит и возвращает объект с данными. Касаемо проблем с RAM - не обязательно мапить данные и забивать ОЗУ, можно из ORM вернуть открытое соединение с данными, пройтись по ним и сделать что требуется. Я к тому, что возможны различные вариации использования.+1 Существуют различные стратегии использования ОРМ, даже статейка на хабре на эту тему есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 14:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=23&tid=1461949]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 409ms |

| 0 / 0 |
