su1d
Старожил PHPClubа
Новичковые вопросы inside
решил вот на старости лет поработать с "настоящими СУБД"(тм). =)
прочитал почти весь мануал (1.2К страниц в ПДФе -- это ж, геноцид девелоперов и насилие над личностью!), чтобы понять возможности, методы решения разных задач и т.п.
также прочитал SadSpirit'овскую доку "Pg's perfomance".
есть вопросы вроде как не из мана, а посему хотелось бы услышать мнения тех, у кого уже есть достаточный опыт работы с Pg.
понимаю, что нельзя везде давать однозначный ответ. попробуйте хотя бы разнести решаемые вами задачи в процентном соотношении, чтобы можно было хотя б расставить приоритеты между разными вариантами.
а) [..skip..] кипятком с триггеров и хранимых процедур.
но пока ещё не понятно: в чём их главный выигрыш?
- в целостности данных и удобстве работы с ними, когда не нужно "задумываться о мелочах"
- в большей скорости за счёт того, что не проводится дополнительный парсинг запросов (хотя, в триггерах с EXECUTE такого выигрыша нет), и нет передачи данных между клиентом и сервером.
б) не будут ли сильно затормаживать обработку данных куча:
- CONSTRAINT'ов на несколько (на все?) полей сразу
- нескольких триггеров, назначенных на таблицу по разным действиям
- индексов, созданных по expression'сам?
стоит ли вообще все проверки на допустимость значений переносить в БД?
в) какое правило всё-таки взять за основу:
- если какую-то логику можно запихнуть в БД, надо так и делать. даёшь оголтелый pl/PgSQL!
- по возможности всё-таки лучше делать проверки на клиентской стороне
- банальное "каждой задаче -- своё решение", и снова взвешивать каждый подход.
г) я не ожидаю от Pg скорости MySQL'я, но за это хочу видеть от него удобство в работе. если я таки выберу стратегию "оголтелого pl/PgSQL", не станет ли всё в конце концов жутчайшим и неприемлемым образом тормозить нагружая сервер?
поправка на ветер: с данными я работать умею, запросы составлять и оптимизировать -- тоже. мне нужно оценить степень нагрузки, которую можно возлагать на pl/PgSQL.
д) мне понравился тип text и/или varchar, для которого не нужно задавать пределов длины значения. если в MySQL'е чётко и ясно говорится, что таблицы с рядами фиксированной длины работают быстрее, то что на этот счёт говорит (если вообще говорит) Pg?
e) кто-нибудь использовал массивы в полях? оно тормозит или лучше всё-таки использовать стандартный подход, максимально нормализуя данные?
естесственно, чтобы правильно ответить на вопросы, нужно знать хотя бы объёмы обрабатываемых данных.
объёмы пока небольшие. как максимум -- десятки тысяч записей.
но в будущем -- кто его знает.
а переписывать потом готовый фреймворк, лепя заплатки налево и направо, очень не хочется.
thanks for your time.
решил вот на старости лет поработать с "настоящими СУБД"(тм). =)
прочитал почти весь мануал (1.2К страниц в ПДФе -- это ж, геноцид девелоперов и насилие над личностью!), чтобы понять возможности, методы решения разных задач и т.п.
также прочитал SadSpirit'овскую доку "Pg's perfomance".
есть вопросы вроде как не из мана, а посему хотелось бы услышать мнения тех, у кого уже есть достаточный опыт работы с Pg.
понимаю, что нельзя везде давать однозначный ответ. попробуйте хотя бы разнести решаемые вами задачи в процентном соотношении, чтобы можно было хотя б расставить приоритеты между разными вариантами.
а) [..skip..] кипятком с триггеров и хранимых процедур.
но пока ещё не понятно: в чём их главный выигрыш?
- в целостности данных и удобстве работы с ними, когда не нужно "задумываться о мелочах"
- в большей скорости за счёт того, что не проводится дополнительный парсинг запросов (хотя, в триггерах с EXECUTE такого выигрыша нет), и нет передачи данных между клиентом и сервером.
б) не будут ли сильно затормаживать обработку данных куча:
- CONSTRAINT'ов на несколько (на все?) полей сразу
- нескольких триггеров, назначенных на таблицу по разным действиям
- индексов, созданных по expression'сам?
стоит ли вообще все проверки на допустимость значений переносить в БД?
в) какое правило всё-таки взять за основу:
- если какую-то логику можно запихнуть в БД, надо так и делать. даёшь оголтелый pl/PgSQL!
- по возможности всё-таки лучше делать проверки на клиентской стороне
- банальное "каждой задаче -- своё решение", и снова взвешивать каждый подход.
г) я не ожидаю от Pg скорости MySQL'я, но за это хочу видеть от него удобство в работе. если я таки выберу стратегию "оголтелого pl/PgSQL", не станет ли всё в конце концов жутчайшим и неприемлемым образом тормозить нагружая сервер?
поправка на ветер: с данными я работать умею, запросы составлять и оптимизировать -- тоже. мне нужно оценить степень нагрузки, которую можно возлагать на pl/PgSQL.
д) мне понравился тип text и/или varchar, для которого не нужно задавать пределов длины значения. если в MySQL'е чётко и ясно говорится, что таблицы с рядами фиксированной длины работают быстрее, то что на этот счёт говорит (если вообще говорит) Pg?
e) кто-нибудь использовал массивы в полях? оно тормозит или лучше всё-таки использовать стандартный подход, максимально нормализуя данные?
естесственно, чтобы правильно ответить на вопросы, нужно знать хотя бы объёмы обрабатываемых данных.
объёмы пока небольшие. как максимум -- десятки тысяч записей.
но в будущем -- кто его знает.
а переписывать потом готовый фреймворк, лепя заплатки налево и направо, очень не хочется.
thanks for your time.