Действительно ли хранимые процедуры легче поддержать?

Вы можете сделать это, сделав осей twinx для частот. Вы можете переключить две оси y вокруг так, чтобы частоты оставались слева, а счетчики справа, но без необходимости пересчитывать ось отсчетов (здесь мы используем tick_left() и tick_right() для перемещения тиков и set_label_position для перемещения меток оси

Затем вы можете установить тики с помощью matplotlib.ticker модуль, особенно ticker.MultipleLocator и ticker.LinearLocator .

Что касается ваших аннотаций, вы можете получить адреса x и y для всех четырех углов бар с patch.get_bbox().get_points(). Это, наряду с правильной настройкой горизонтального и вертикального выравнивания, означает, что вам не нужно добавлять какие-либо произвольные смещения в место аннотации.

Наконец, вам нужно повернуть сетку (g7] ax2.grid(None) )

Вот рабочий скрипт:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import matplotlib.ticker as ticker

# Some random data
dfWIM = pd.DataFrame({'AXLES': np.random.normal(8, 2, 5000).astype(int)})
ncount = len(dfWIM)

plt.figure(figsize=(12,8))
ax = sns.countplot(x="AXLES", data=dfWIM, order=[3,4,5,6,7,8,9,10,11,12])
plt.title('Distribution of Truck Configurations')
plt.xlabel('Number of Axles')

# Make twin axis
ax2=ax.twinx()

# Switch so count axis is on right, frequency on left
ax2.yaxis.tick_left()
ax.yaxis.tick_right()

# Also switch the labels over
ax.yaxis.set_label_position('right')
ax2.yaxis.set_label_position('left')

ax2.set_ylabel('Frequency [%]')

for p in ax.patches:
    x=p.get_bbox().get_points()[:,0]
    y=p.get_bbox().get_points()[1,1]
    ax.annotate('{:.1f}%'.format(100.*y/ncount), (x.mean(), y), 
            ha='center', va='bottom') # set the alignment of the text

# Use a LinearLocator to ensure the correct number of ticks
ax.yaxis.set_major_locator(ticker.LinearLocator(11))

# Fix the frequency range to 0-100
ax2.set_ylim(0,100)
ax.set_ylim(0,ncount)

# And use a MultipleLocator to ensure a tick spacing of 10
ax2.yaxis.set_major_locator(ticker.MultipleLocator(10))

# Need to turn the grid on ax2 off, otherwise the gridlines end up on top of the bars
ax2.grid(None)

plt.savefig('snscounter.pdf')

14
задан Patrick Cuff 27 February 2009 в 01:32
поделиться

19 ответов

Хранимые процедуры являются плохой практикой по ряду причин.

Один из старших значащих является разделением проблем. С хранимыми процедурами у Вас есть бизнес-логика в слое данных, вместо на уровне служб, где это принадлежит. Одно последствие этого - то, что у Вас теперь есть один язык и один язык только, на котором можно реализовать Вашу бизнес-логику. Поскольку новые технологии приходят, у Вас нет хорошего миграционного пути.

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

Затем, масштабируемость. Это довольно просто, чтобы создать сервисы на среднем уровне и распределить их через кластер. Как Вы собираетесь сделать это с хранимой процедурой? Я думаю, что было бы в высшей степени трудно кластеризировать хранимую процедуру через, скажем, даже восемь машин.

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

22
ответ дан 1 December 2019 в 05:51
поделиться

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

-1
ответ дан 1 December 2019 в 05:51
поделиться

Это действительно зависит от того, как хорошо хранимые процедуры записаны, не так ли? T-SQL и мн SQL могут стать столь же непростыми и твердыми поддержать как C# или КОБОЛ, если практик не кодирует с некоторой мыслью и уходом.

Одно из недавних улучшений я продолжил работать, я намеренно поместил функциональность в сохраненный proc, главным образом потому что я хотел, чтобы функциональность была легче к ссылке, а тем более поддержала (хранимую процедуру можно назвать от уровня DB и также клиентского уровня; если бы я поместил логику в другой слой, который не был бы верен). Я думал, что сделал хорошее задание создания довольно модульного мн SQL, но когда TOAD проанализировала его, 3 из 4 разделов получили хорошие метки, и последний ковался для высокой цикломатической сложности. Heh, я думаю, что только что доказал свою собственную точку!

0
ответ дан 1 December 2019 в 05:51
поделиться

двумя преимуществами Сохраненного Procs

, я думаю один фактор, который влияет на это, является число клиентов, поскольку это позволяет внести изменения схемы, не имея необходимость повторно развертывать приложения. Например, как DBA я нахожу это намного легче при настройке SQL, разрешении ошибок, и т.д. для посещения той Сохраненный Proc, а не X-клиенты для изменения SQL-оператора, когда X большое количество, и 'посещение' их означает развертывать новую версию приложения к нескольким рабочим станциям.

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

один недостаток сохраненного procs

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

-1
ответ дан 1 December 2019 в 05:51
поделиться

Мы переключились от использования sprocs к сгенерированному DAL для основанной на коде бизнес-логики по довольно многим причинам:

  1. независимая База данных - при помощи встроенного SQL или генерировать DAL (оба совместимые ANSI), легче переключиться от Oracle до Пост-ГРЭС к SQL Server, и т.д.
  2. Принудительное управление исходным кодом (я признаю, что это могло быть доступно в любом случае, но для нас это помогло чрезвычайно)
  3. , Мы обновляем GUI намного более часто, чем база данных так или иначе, таким образом, это уменьшило нашу сложность обновления
  4. Легче для разработчика отладить клиентские проблемы
0
ответ дан 1 December 2019 в 05:51
поделиться

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

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

0
ответ дан 1 December 2019 в 05:51
поделиться

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

у меня нет непосредственной реакции коленного рефлекса на тот (в отличие от большинства людей, здесь делают), но я скажу, что компиляция и развертывание DLL действительно не состоят в том что намного тяжелее в том типе среды ковбоя. Или, Вы могли использовать что-то как Сценарий CS, который позволяет Вам, сохраняют сырые данные .cs файлами, которые компилируются по требованию.

я всегда находил это трудным к версии и тестирую сохраненный procs, тогда как большая часть кода легко сделана. Кроме того, большинство процедурных языков RDBMS довольно примитивно - таким образом, Вы не делаете выразительности или абстракций, которые современный язык дает Вам.

, Конечно, управление версиями является Хорошей Вещью - и, для большинства мест, так является некоторыми проверками процесса между devs и производством.;)

1
ответ дан 1 December 2019 в 05:51
поделиться

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

1
ответ дан 1 December 2019 в 05:51
поделиться

Я сделал CRUD, программируя как консультант для 10 + годы в деловом мире. Я могу сказать Вам, что поместил столько же бизнес-логики в sprocs & представления, как я могу (и имеет смысл). Требования имеют тенденцию изменяться каждый раз, когда удары ветров и логика наличия в базе данных помогают измениться, и (с достойными комментариями) это сам документирование. Плюс sprocs делают для хорошей безопасности и для легкого повторного использования кода.

FWIW я использую управление исходным кодом и строгое тестирование на всем моем sprocs. Выполнение иначе просто lazyiness.

2
ответ дан 1 December 2019 в 05:51
поделиться

Равный, это - плохая практика для изменения на лету, Вы помните?
Серьезно, код создания в хранимой процедуре может сделать Вас уверенными, что Ваше взаимодействие SQL быстрее .
, Но Ваши изменения слишком далеко от управления исходным кодом . (для управления исходным кодом необходимо экспортировать, как я знаю)

2
ответ дан 1 December 2019 в 05:51
поделиться

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

А большое преимущество может состоять в том, если у Вас есть несколько платформ (скажите и приложения Windows и веб-приложения), или Вы портируете старое приложение на новую технологию, можно быть в состоянии снова использовать процедуры базы данных.

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

2
ответ дан 1 December 2019 в 05:51
поделиться

Я не привожу доводы против хранимых процедур, но я предположил бы, что их более трудно поддержать, так как они должны быть обновлены независимо от обновления приложения (Они должны быть сохранены в SQL-сервере).

3
ответ дан 1 December 2019 в 05:51
поделиться

Мой опыт состоит в том, что управление исходным кодом редко используется так же старательно для, поддерживают базу данных, как это для кода приложения. Несомненно, это - вероятно, не всегда случай, но за 15 лет я никогда не видел его. То, что это означает, - то, что Вы, более вероятно, будете иметь людей, вносящих изменение в dev, и не дай бог жить, база данных сохранила procs без реальной мысли простоте обслуживания, потому что это просто слишком легко.

4
ответ дан 1 December 2019 в 05:51
поделиться

Хранимые процедуры обеспечивают много преимуществ перед хранением запросов в приложении, и многие уже были упомянуты.

Хранимые процедуры служат слоем абстракции между приложением и данными, и слои абстракции редко являются плохой вещью.

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

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

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

для понимания этих преимуществ, хорошая дисциплина в порядке для поддержания непротиворечивости и той же гранулярности через все процедуры в приложении. Я работал над приложениями со многими 100's процедур. Если бы все эти запросы были в коде, то это было бы намного более трудно, если не невозможный, для реализации безопасности уровня данных. Сохраненный procdures может быть легко сгенерирован. Я чувствую, что полная производительность выше с хранимыми процедурами, чем без. И конечно хранимые процедуры могут, реклама должна быть в управлении исходным кодом, поскольку это имеет место со всеми другими объектами базы данных.

9
ответ дан 1 December 2019 в 05:51
поделиться

Если Ваше основное программное обеспечение развертывается на нескольких различных сайтах для клиентов, большая часть настройки, необходимой для каждого отдельного клиента, может быть выполнена через базу данных (представления и хранимые процедуры). Можно почти думать о SP как об ИНТЕРФЕЙСЕ, передать стандартные данные назад и вперед без беспокойства о том, что происходит внутри.

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

В некоторых случаях, хотя, настройка в SP вместо .dll допускает более быструю настройку и позволяет DBA или эксперту по данным вступать во владение, оставляя программиста для работы над кодированием.

Помнят, что код в SP доступен значительно большему количеству людей (клиент, в этом случае), чем скомпилированный код. Это может быть хорошо или плохо, в зависимости от Вашей ситуации.

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

6
ответ дан 1 December 2019 в 05:51
поделиться

Думайте об альтернативах...

  • Для твердого кодирования запросов в систему
  • Для создания строк запроса на основе ввода данных пользователем
  • , Чтобы иметь код динамично генерируют запросы на основе предприятий, и соглашения о присвоении имен базы данных (через ORM, LINQ, CodeDom и т.д....)
  • и т.д.

Тогда рассматривают требования и среду...

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

  • Требуются, чтобы, Вы вносите частые изменения в схему дб?

  • Как насчет безопасности? Вы требуете безопасности полностью вниз к уровню пользователя базы данных? Было бы легче управлять безопасностью в коде, или в дб?

  • Ваши разработчики были бы более продуктивными с ORM, не имея необходимость записать DAL для себя или являются там добавленной сложностью, что требуется добавить пользовательским способом к DAL, что ORM не мог обеспечить?

  • и т.д.

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

11
ответ дан 1 December 2019 в 05:51
поделиться

Это, вероятно, зависит от Вашей системы. Для нас Сохраненные Procs используются почти исключительно. У нас просто есть один веб-сайт, также - SQL-операторы в сохраненном proc делают настолько легче для нашего DBA настроить запросы и воссоздать проблемы порождения производительности.

11
ответ дан 1 December 2019 в 05:51
поделиться

Хранимые процедуры являются хорошей идеей по многой причине:

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

Другая причина использовать хранимые процедуры состоит в том, что это устанавливает сильную связь между Вами и выбранной базой данных. Таким образом, можно использовать в своих интересах созданный в функциональности DB, который Вы оплачиваете (или используете в случае открытого исходного кода). И угадайте то, что, при попытке сделать свой DB приложения независимым, у Вас, вероятно, будут много твердыми разыскать ошибки. непротиворечивость Read работает по-другому над базой данных каждого поставщика.

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

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

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

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

Наконец, не все процедурные языки создаются одинаково. MySQL просто выпустил способность использовать хранимые процедуры, и они дают Вам много языков, которые можно использовать включая их собственное. Я сомневаюсь, что их встают к или SQL-серверу Oracle. Я не собираюсь входить, кто является лучшим, потому что я не эксперт ни в чем кроме Oracle. МН Oracle / SQL имеет большую функциональность, которая оптимизирована в ядре DB. Я уверен, что SQL MS делает это слишком также другие.

Hope это полезно (и имеет смысл - долгий день).

2
ответ дан 1 December 2019 в 05:51
поделиться

Некоторые утверждают, что бизнес-логика не имеет места в хранимых процедурах, а также приводит к неизвестным системам. Я бы указывал, что эти аргументы приходят в первую очередь из точек зрения DDD и N-уровня, которые стремятся добиться вся бизнес-логика в определенном регионе в пределах приложений. Хотя это достойная цель, есть и другие точки зрения, которые стоит рассмотреть. SPS также может сделать намного больше, чем просто домашняя деловая логика.

Кстати, мир Oracle считает свою лучшую практику, чтобы иметь все бизнес-логику в коде PL / SQL на БД, и они знают вещи или две о реляционных базах данных!

Рассмотрим эти применения SPS:

производительность. Часто полезно запустить несколько операторов SQL в SP и, таким образом, избегайте вашего приложения, делая несколько круглых поездок в БД, что приводит к тому, что иногда значительные улучшения производительности.

Управление изменением. SPS просты для обслуживания и модификации, если у вас есть дисциплина вокруг контроля версий и процессу вашего развертывания.

SPS может быть освобожден в живых производственных системах без отключения , что может быть значительным преимуществом в 24/7 операциях. Конечно, вам все еще нужен жесткий контроль вокруг процесса выпуска.

Слой абстракции. SPS может абстрагироваться детали схемы БД из приложения, при условии, что все взаимодействия приложений / дБ являются через SPS. Это может быть очень мощная концепция. Считайте, что продолжительность жизни БД часто переживает приложение - приложению приступить и пойти и повторно написано каждый так часто с новейшими технологиями и шаблонами архитектуры, но ценные данные остаются в той же старой реляционной БД для Aeons. Часто Mulitple Apps разработаны на одной и той же БД, даже если это никогда не было оригинальным намерением. SPS в этих сценариях используются для обеспечения жесткого, четко определенного API между приложением и БД, которые могут быть тщательно контролируемыми для обеспечения согласованных взаимодействий с несколькими приложениями и даже несколькими версиями одного и того же приложения.

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

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

1
ответ дан 1 December 2019 в 05:51
поделиться
Другие вопросы по тегам:

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