Чтобы сохранить код DRY В настоящее время у меня есть несколько отдельных запросов, которые имеют свои собственные обязанности. Это позволяет мне выполнять сложные действия, используя комбинацию этих запросов вместо того, чтобы писать более крупные запросы, настроенные только для этих действий.MySQL Запуск нескольких запросов для сохранения кода DRY, проблемы с производительностью?
Подобно тому, как в вашем коде используются многоразовые/динамические методы вместо того, чтобы писать один метод для каждого конкретного прецедента. Это делает разработку более простой, но потенциально ценой некоторой производительности.
Примечание: Я не хранил его СУХОЙ только ради СУХОЙ. Я пытаюсь держать вещи динамичными и легко читать & понять.
Упрощенный пример:
Мне нужно, чтобы получить группы разрешений для сотрудника и отдела. Затем мне нужно получить ассоциации разрешений для этих групп разрешений. Мне также необходимо получить гранулярные разрешения, назначенные сотруднику или отделу (разрешения, не связанные с группой разрешений).
Я мог написать 2 запроса, чтобы получить группы разрешений и связанные с ними разрешения с помощью объединений и еще два запроса, чтобы получить разрешения, связанные с сотрудниками и отделами напрямую. Они не будут использоваться повторно для других целей.
Или я мог написать 1 запрос, чтобы получить группы разрешений для сотрудников или отделов, 1 запрос, который получает разрешения, связанные с любой группой разрешений, и 1 запрос, который может получить разрешения, связанные с самими сотрудниками/отделами.
- 4 Конкретные Non-многоразовые Запросы, 4 казни, 4 метод вызывает из API
- VS
- 3 многоразовые/Динамические запросы, 6 казней, 1 вызов метода из API
Это упрощенный пример. На практике у меня было бы 15 запросов к конкретным случаям и 15 казней. Vs 5 динамических запросов и ~ 40 исполнений.
Есть ли проблемы с производительностью при движении по этому пути? Сам код выглядит намного чище и с ним легче работать, но я не хочу жертвовать значительным количеством производительности DB для более чистого dev-API.
Я не могу опубликовать этот комментарий в качестве ответа, потому что у меня нет конкретной информации о тестах производительности. Однако учтите следующее: недавно я реорганизовал мой старый php-back-end, чтобы точно отразить философию DRY (и SOLID и другие шаблоны проектирования ...). Я создал свой первый back-end в то время с очень высоким учетом производительности, поэтому я бы сделал сверхспецифичные запросы и т. Д. Теперь мой back-end полностью переписан, и я не вижу разницы в производительности. Иногда даже лучше, потому что запросы на самом деле кэшируются mysql ... – Sebas
в 2017 году, у нас есть такие технологии, как memcache и буфер базы данных, а также жесткие диски ssd и огромное количество RAM. Я искренне верю, что теперь это современное и актуальное для написания паттерн кода, и подумайте об оптимизации позже. Это заявление было бы очень, очень спорным в начале 2000-х годов. – Sebas
@Sebas Отличное понимание, спасибо. –