У вас может быть слишком много хранимых процедур?

Я согласен с johndodo, существует так много переменных, которые делают типы mime, которые отправляются из браузеров ненадежными. Я бы исключил подтипы, которые были получены, и просто сосредоточиться на типе типа «приложение». если ваше приложение основано на php, вы можете легко сделать это, используя функцию explode (). кроме того, просто проверьте расширение файла, чтобы убедиться, что это .zip или любое другое сжатие, которое вы ищете!

13
задан Brian G 30 January 2009 в 12:44
поделиться

19 ответов

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

, Что, будучи сказанным необходимо разработать/создать столько, сколько приложение требует. Хотя с В спящем режиме, NHibernate.NET LINQ, который я попытался бы сохранить таким же количеством логики процедур хранилища в коде, и только поместить его в базу данных, когда скорость является фактором.

5
ответ дан David Basarab 30 January 2009 в 12:44
поделиться

Необходимо поместить весь тот код где-нибудь.
, Если Вы собираетесь иметь хранимые процедуры вообще (я лично делаю одолжение их, но многие не делают), тогда Вы могли бы также использовать их так, как Вы должны. По крайней мере, вся логика базы данных находится в одном месте. Оборотная сторона - то, что обычно нет большого количества структуры к блоку, полному сохраненного procs.

Ваш вызов!:)

-1
ответ дан AJ. 30 January 2009 в 12:44
поделиться

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

Связь себя к одной базе данных не является хорошим дизайном.

, Кроме того, если у Вас есть бизнес-логика на базе данных и в бизнес-слое тогда, обслуживание становится проблемой.

1
ответ дан Joe Ratzer 30 January 2009 в 12:44
поделиться

Мой первый большой проект был разработан с Объектным Реляционным Картопостроителем, который абстрагировал базу данных, таким образом, мы сделали все объектно-ориентированное, и было легче поддержать и исправить ошибки, и было особенно легко внести изменения начиная со всего доступа к данным, и бизнес-логика была кодом C#, однако, когда это прибыло, чтобы сделать, комплекс наполняет систему, которую чувствуют медленный, таким образом, мы должны были работать вокруг тех вещей или повторно спроектировать проект, особенно когда ORM должен был сделать, комплекс участвует в базе данных.

Im, теперь работающие над различной компанией, которая имеет девиз "наших приложений, просто frontends базы данных", и она имеет свои преимущества и недостатки. У нас есть действительно быстрые приложения, так как все операции данных сделаны на хранимых процедурах, это использует главным образом SQL Server, который 2005, но, когда дело доходит до вносит изменением или фиксацией к программному обеспечению тяжелее, потому что необходимо изменить обоих, код C# и хранимые процедуры SQL так как работа дважды, вопреки тому, когда я использовал ORM, у Вас нет рефакторинга или объектов со строгим контролем типов в sql, Studio управления и другие инструменты помогают много, но обычно Вы проводите больше времени, идя этим путем.

, Таким образом, я сказал бы, что зависящий от потребностей проекта, если Вы не собираетесь сохранять действительно сложные бизнес-данные, чем, возможно, Вы, мог бы даже избегать использования хранимых процедур вообще и использовать ORM, который делает жизнь разработчика легче. Если Вы обеспокоены производительностью и должны сохранить все ресурсы, чем необходимо использовать хранимые процедуры, конечно, количество зависит uppon архитектура, которую Вы разрабатываете, таким образом, для экс-клена, если бы у Вас всегда есть хранимые процедуры для операций CRUD, Вам было бы нужно один для вставок, один для обновления, один для удаления, один для выбора и один для списка, так как это наиболее распространенные операции, если Вы имеете 100 бизнес-объектов, умножаете эти 4 на это, и Вы получаете 400 хранимых процедур только для управления самыми основными операциями на объектах так, да, они могли быть слишком многими.

1
ответ дан Gustavo Rubio 30 January 2009 в 12:44
поделиться
  • 1
    да это - то, что я искал. Mozzila имеет большую ссылку. Спасибо! – Martin 2 May 2011 в 16:38

я думаю, пока Вы называете их, uspXXX и не spXXX поиск по имени будет прямым, таким образом, никакая оборотная сторона - хотя Вы могли бы задаться вопросом об обобщении procs, если у Вас есть тысячи...

0
ответ дан Steven A. Lowe 30 January 2009 в 12:44
поделиться

Нет, не, что я знаю о. Однако у Вас должно быть хорошее соглашение о присвоении имен для них. Например, запуск их с usp_ является чем-то, что большому количеству poeple нравится делать (быстрее, чем запуск с SP _).

, Возможно, Ваше создание отчетов sprocs должно быть usp_reporting _, и Ваши бизнес-объекты должны быть usp_bussiness _, и т.д. Как длинный s можно управлять ими, не должно быть проблемы с наличием большого количества из них.

, Если они становятся слишком крупными, Вы могли бы хотеть разделить базу данных на несколько баз данных. Это могло бы иметь более логический смысл и может помочь с размером базы данных и таким.

1
ответ дан Charles Graham 30 January 2009 в 12:44
поделиться

Мне, с помощью большого количества хранимых процедур, кажется, приводит Вас к чему-то эквивалентному API PHP. Весь группировались тысячи глобальных функций, которые могут не иметь никакого отношения друг к другу. Единственный способ иметь отношение между ними состоит в том, чтобы иметь некоторое соглашение о присвоении имен, где Вы снабжаете префиксом каждую функцию имя модуля, подобное функциям mysql_ в PHP. Я думаю, что к этому очень трудно поддержать, и очень трудно сохранить все последовательным. Я думаю, что хранимые процедуры работают хорошо на вещи, которые действительно должны произойти на сервере. Хранимая процедура для простого запроса Select, или даже запрос Select с соединением, вероятно, идет в далеко. Только используйте хранимые процедуры, где Вы на самом деле требуете, чтобы усовершенствованная логика была обработана на сервере базы данных.

2
ответ дан Kibbee 30 January 2009 в 12:44
поделиться

Да, у Вас может быть toooooo много хранимых процедур.

Соглашения о присвоении имен могут действительно помочь с этим. Например, если у Вас есть соглашение о присвоении имен, где Вы всегда имеете имя таблицы и InsUpd или Добираетесь, довольно легко найти право хранимая процедура при необходимости в нем. Если бы у Вас нет некоторого стандартного соглашения о присвоении имен, было бы действительно легко придумать два (или больше) процедуры, которые делают почти точно то же самое.

было бы легко найти несколько после, не имея стандартизированного соглашения о присвоении имен... usp_GetCustomersOrder, CustomerOrderGet_sp, GetOrdersByCustomer_sp, spOrderDetailFetch, GetCustOrderInfo, и т.д.

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

Jeff

1
ответ дан Jeff 30 January 2009 в 12:44
поделиться
  • 1
    Это хорошо для стороны JavaScript, как насчет справки, пишущий программы построения теней вершины/фрагмента – Drew 5 September 2011 в 14:06

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

1
ответ дан Constantin 30 January 2009 в 12:44
поделиться

Как другие сказали, это действительно сводится к аспекту управления. Через некоторое время это превращается в нахождение общеизвестной иглы в стоге сена. Это еще больше, когда там существует несовершенные стандарты именования...

1
ответ дан Kevin Fairchild 30 January 2009 в 12:44
поделиться

в базе данных Oracle можно использовать Пакеты для связанных с группой процедур вместе.

несколько из тех и Вашего пространства имен освободили бы.

2
ответ дан ShoeLace 30 January 2009 в 12:44
поделиться

Мой вопрос состоит в том, почему Вы не использующий своего рода платформу промежуточного программного обеспечения, если Вы говорите приблизительно сотни или тысячи хранимых процедур?

Называют меня старомодным, но я думал, что база данных должна просто содержать данные, и программа (программы) должна быть той, принимающей решения бизнес-логики.

2
ответ дан MattC 30 January 2009 в 12:44
поделиться

Я просто упомянул бы, что со всеми такими вещами обслуживание становится проблемой. Кто знает то, что они все и какой цели они служат? Что происходит годы вниз путь, когда они - просто артефакты унаследованной системы, что никто не может вспомнить то, для чего они, но боятся смешивать с?

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

3
ответ дан Arthur Thomas 30 January 2009 в 12:44
поделиться
  • 1
    спасибо - can' t используют " prop" в лямбде в FirstOrDefault, но i' ve отсортировал его:-), – Alex 20 July 2010 в 11:10

Ад да, у Вас могут быть слишком многие. Я работал над системой несколько лет назад, которая имела что-то как 10,000 procs. Это было безумно. Люди, которые записали систему, действительно не знали, как программировать, но они действительно знали, как исправить плохо структурированный procs, таким образом, они помещают почти всю прикладную логику в procs. Некоторые procs работали за тысячами строки. Управление путаницей было кошмаром.

Слишком многие (и я не могу привлечь Вас определенная строка в песке) являются, вероятно, индикатором плохого дизайна. Кроме того, как другие указали, существуют лучшие способы достигнуть детализированного интерфейса БД, не обращаясь к крупным числам procs.

3
ответ дан TheMadHungarian 30 January 2009 в 12:44
поделиться

Я имею только под 200 в коммерческом моем продукте SQL Server 2005 года, который, вероятно, увеличится приблизительно еще 10-20 в ближайшие дни для некоторых новых отчетов.

, Где возможный я пишу 'подпрограмму' sprocs, так, чтобы каждый раз, когда я соединяю 3 или 4 идентичных оператора больше чем в нескольких sprocs, было пора превратить те немного операторов в подпрограмму, если Вы видите то, что я имею в виду.

я не склонен использовать sprocs для выполнения всей бизнес-логики как таковой, я просто предпочитаю иметь sprocs выполнение чего-либо, что могло рассматриваться как 'транзакционное' - поэтому, где, поскольку мой клиентский код (в Дельфи, но безотносительно) мог бы сделать нечетную вставку или само обновление, как только что-то требует, чтобы несколько вещей были обновлены или вставлены 'сразу', время для sproc.

у меня есть простое, сырое соглашение о присвоении имен помочь в удобочитаемости (и в обслуживании!)

кодовым названием продукта является 'Rachel', таким образом, мы имеем

RP_whatever   - these are general sprocs that update/insert data, 
              - or return small result sets

RXP_whatever  - these are subroutine sprocs that server as 'functions' 
              - or workers to the RP_ type procs

REP_whatever  - these are sprocs that simply act as glorified views almost
              - they don't alter data, they return potentially complex result sets
              - for reporting purposes, etc

XX_whatever   - these are internal test/development/maintenance sprocs 
              - that the client application (or the local dba) would not normally use

, именование произвольно, это должно только помочь отличить от sp_ префикса тот SQL Server использование.

я предполагаю, нашел ли я, что у меня было 400-500 sprocs в базе данных, я мог бы стать соответствующим, но несколько сотен не проблема вообще, пока у Вас есть система для идентификации, за какое действие каждый sproc ответственен. Я упорно искал бы изменения схемы в нескольких сотнях sprocs (где инструменты SQL Server могут помочь Вам найти зависимости и т.д.), чем попытайтесь упорно искать изменения схемы на моем высокоуровневом языке программирования.

3
ответ дан robsoft 30 January 2009 в 12:44
поделиться

Вы имеете в виду помимо того, что необходимо поддержать всех их при внесении изменения в базу данных? Это - большая причина для меня. Лучше иметь меньше, которые могут обработать много сценариев, чем сотни, которые могут только обработать тот.

3
ответ дан kemiller2002 30 January 2009 в 12:44
поделиться
  • 1
    Ahh да, писал его в блокноте;-) зафиксированный. – Richard Friend 20 July 2010 в 11:17

Я предполагаю, что более глубокий вопрос вот - где еще должен весь тот код идти? Представления могут использоваться для обеспечения удобного доступа к данным через стандартный SQL. Языки более мощного приложения и библиотеки могут использоваться для генерации SQL. Хранимые процедуры имеют тенденцию затенять природу данных и представлять ненужный слой абстракции, сложности и обслуживания к системе.

, Учитывая питание объектных реляционных инструментов отображения генерировать основной SQL, любая система, которая чрезмерно зависит от хранимых процедур, будет менее эффективной для разработки. С ORM существует просто намного меньше кода для записи.

4
ответ дан MattMcKnight 30 January 2009 в 12:44
поделиться
  • 1
    I' ve отметил мое свойство с [Идентификатор ()], но.GetProperties () возвращает все другие свойства КРОМЕ этого?! мой атрибут, кажется, скрывает его?? – Alex 20 July 2010 в 12:49
  • 1
    Попытайтесь определить обязательные флаги, такие как GetProperties (BindingFlags. Общественность | BindingFlags. Экземпляр); – Richard Friend 20 July 2010 в 13:05

Слишком много какой-то конкретной вещи, вероятно, означает выполнение его неправильно. Слишком много файлов конфигурации, слишком много buttns на экране...

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

2
ответ дан David Aldridge 30 January 2009 в 12:44
поделиться
Другие вопросы по тегам:

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