Хранимые процедуры остановка в php/mysql мире?

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

18
задан Community 23 May 2017 в 12:19
поделиться

10 ответов

Я разрабатываю и поддерживаю большое приложение PHP/MySQL. Вот мой опыт с хранимыми процедурами.

Со временем наше приложение стало очень сложным. И со всей логикой на php стороне, некоторые операции запросили бы базу данных с более чем 100 короткими запросами.

MySQL так быстр, что производительность была все еще приемлемой, но не большой.

Мы приняли решение в нашей последней версии программного обеспечения для перемещения части логики к хранимым процедурам для сложных операций.

Мы действительно достигали значительного увеличения производительности вследствие того, что мы не должны были отправлять данные назад и вперед между PHP и MySQL.

я действительно соглашаюсь с другими плакатами здесь, что МН / SQL не современный язык и является трудным отладить.

Нижняя строка: Хранимые процедуры являются большим инструментом для определенных ситуаций. Но я не рекомендовал бы использовать их, если у Вас нет серьезного основания. Для простых приложений хранимые процедуры не стоят стычки.

23
ответ дан 30 November 2019 в 06:36
поделиться

У Вас есть определенная потребность в памяти, которая заставляет Вас рассмотреть их? Хранимые процедуры являются намного менее портативными, чем "плоскость" SQL, это обычно, почему люди не хотят использовать их. Кроме того, записав справедливую долю МН / SQL, я должен сказать, что процедурный способ написания кода добавляет сложность, и это является просто не очень современным или тестируемым. Они могли бы быть удобными в некоторых особых случаях, где необходимо оптимизировать, но я, конечно, думал бы дважды. Jeff имеет подобные мнения .

6
ответ дан 30 November 2019 в 06:36
поделиться

Я обычно избегаю хранимых процедур, потому что это добавляет загрузку в базу данных, которая составляет 99% времени, Вашего самого большого узкого места. Добавление нового php сервера является ничем по сравнению с тем, чтобы заставлять Ваш дб MySQL копировать.

6
ответ дан 30 November 2019 в 06:36
поделиться

При использовании хранимых процедур с MySQL необходимо будет часто использовать интерфейс mysqli в PHP а не постоянном клиенте интерфейс mysql.

причина этого состоит в том вследствие того, что хранимые процедуры часто будут возвращать больше чем 1 набор результатов. Если это делает, mysql API не может обработать его, и будете Вы получать ошибки.

интерфейс mysqli имеет функции к обработке этих нескольких наборов результатов, функции такой как mysqli_more_results и mysqli_next_result.

Имеют в виду, что при возврате какого-либо набора результатов вообще из хранимой процедуры, затем необходимо использовать эти API, поскольку хранимая процедура генерирует 1 набор результатов для фактического выполнения и затем 1 дополнительный для каждого набора результатов, намеренно возвращенного из хранимой процедуры.

10
ответ дан 30 November 2019 в 06:36
поделиться

Это - субъективный вопрос.

я лично включал бы все вычисления в PHP и только действительно использовал бы MySQL в качестве таблицы.

, Но, Если Вы чувствуете, что легче использовать хранимые процедуры затем любой ценой, идите вперед и сделайте это.

2
ответ дан 30 November 2019 в 06:36
поделиться

Я не сказал бы, что "хранимые процедуры являются остановкой", сказал бы я, "Не используют их без серьезного основания".

хранимые процедуры MySQL имеют особенно ужасный синтаксис (Oracle, и MSSQL довольно ужасны также), поддержание их просто усложняет Ваше приложение.

Действительно используют хранимую процедуру, если у Вас есть реальная (измеримая) причина сделать так, иначе не делайте. Это - мое мнение так или иначе.

1
ответ дан 30 November 2019 в 06:36
поделиться

Необходимо также знать, что хранимые процедуры не поддерживались в Mysql перед версией 5.0. http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html , Также хранимые процедуры имели тенденцию быть быть немного странными в той реализации. Теперь, когда Mysql 5.1 начинает неожиданно возникать в дикой природе, я вижу больше использования хранимых процедур с Mysql.

0
ответ дан 30 November 2019 в 06:36
поделиться

Я делаю ограниченное использование хранимых процедур, и оно работает хорошо. Я - вывод dev для одного из моих клиентов компаний, работающих над их веб-сайтом электронной коммуникации. У клиента есть система запаса, мы реализовали ряд хранимых процедур в их системе и создали API для общения с нею. Это позволило нам абстрагировать их базу данных, и они могли реализовать логику в хранимых процедурах. Простой, но встреченный бизнес-требование очень хорошо.

0
ответ дан 30 November 2019 в 06:36
поделиться

Я думаю, что использование хранимых процедур может предложить некоторую абстракцию в определенных приложениях, как в любом, где Вы использовали бы тот же блок кода SQL, чтобы обновить или добавить те же данные, Вы могли затем создать один sproc save_user ($attr.....) скорее что повторение себя повсеместно.

Согласованный синтаксис является волосатым и если Ваш привыкший к MSSQL и оракулу sprocs существуют различия, которые могут fustrate.

0
ответ дан 30 November 2019 в 06:36
поделиться

Существует возможно фобия хранимых процедур с mysql, частично из-за того, чтобы не быть в подавляющем большинстве мощным (по сравнению с Postgresql, и даже MSSQL, mysqls хранимые процедуры значительно недостает).

На плюс: Они делают взаимодействие через интерфейс с ним больше чем с одного языка легче.

, Если кто-то заявляет, что" хранимые процедуры использования плохо, потому что не портативный к различным базам данных " затем это, конечно, означает, что они думают, что Вы, вероятно, переключите базы данных, что означает их в свою очередь высказывание, что они думают, что Вы не должны использовать mysql.

Это популярно для использования ORM's в эти дни, но я лично думаю, что ORM является BadThing ( Question:82882)

0
ответ дан 30 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: