как использовать докер в разработке

Ответ от @KM хорош, насколько это возможно, но не может полностью следить за одним из его ранних советов,

..., игнорировать компактный код, игнорировать беспокойство о повторении кода, ...

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

CREATE PROCEDURE spDoSearch
    @FirstName varchar(25) = null,
    @LastName varchar(25) = null,
    @Title varchar(25) = null
AS
BEGIN

    IF (@FirstName IS NOT NULL AND @LastName IS NULL AND @Title IS NULL)
        -- Search by first name only
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
            FirstName = @FirstName

    ELSE IF (@FirstName IS NULL AND @LastName IS NOT NULL AND @Title IS NULL)
        -- Search by last name only
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
            LastName = @LastName

    ELSE IF (@FirstName IS NULL AND @LastName IS NULL AND @Title IS NOT NULL)
        -- Search by title only
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
            Title = @Title

    ELSE IF (@FirstName IS NOT NULL AND @LastName IS NOT NULL AND @Title IS NULL)
        -- Search by first and last name
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
            FirstName = @FirstName
            AND LastName = @LastName

    ELSE
        -- Search by any other combination
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
                (@FirstName IS NULL OR (FirstName = @FirstName))
            AND (@LastName  IS NULL OR (LastName  = @LastName ))
            AND (@Title     IS NULL OR (Title     = @Title    ))

END

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

2
задан Raja Kondla 29 March 2019 в 12:46
поделиться

1 ответ

  1. Настройка, к которой я привык, заключается в том, что разработчики в основном игнорируют Docker, пока им не понадобится его для развертывания. Такие инструменты, как каталог Node node_modules или виртуальные среды Python, могут помочь изолировать подпроекты друг от друга. Любой отдельный разработчик должен иметь возможность запустить docker build для создания образа, но обычно не требуется до финальных этапов тестирования конкретного изменения. Вам следует развернуть систему непрерывной интеграции , которая возьмет на себя ответственность за тестирование и создание окончательного образа Docker для каждого коммита.

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

  3. Никогда не храните базу данных в том же контейнере, что и приложение. (См. Предыдущий пункт о регулярном удалении контейнеров.) Мой опыт обычно заключался в том, что производственные базы данных являются важными и достаточно специальными, чтобы заслужить свои собственные выделенные хосты, не входящие в Docker, но в действительности нет ничего плохого в запуске базы данных в Docker; просто убедитесь, что вы знаете, как выполнять резервное копирование, восстановление, миграцию и все остальное на нем.

Нет технической причины, по которой вы не можете использовать Docker Compose для производства, но если вам потребуется развернуть приложение на более чем одном физическом сервере, вы можете счесть его ограничивающим. Кубернетес является более сложным, но, кажется, текущий победитель в этом пространстве; Docker Swarm имеет некоторый импульс; Hashicorp Nomad там; или вы можете создать систему ручного развертывания вручную. (Обратите внимание, что, по крайней мере, Kubernetes и Nomad оба очень хорошо понимают концепцию «что-то изменилось, поэтому я собираюсь удалить и воссоздать контейнер», и оба усложняют разработку в реальных условиях в квазипроизводственной установке.) [ 1111]

Также обратите внимание, что там, где я говорю «развернуть», есть общедоступные облачные версии всех этих вещей (Docker Hub, CircleCI, комплексные решения, включая реестр и Kubernetes, построенные на основе AWS или Azure, или GCP), и если вас устраивает компромисс между затратами и усилиями и последствиями использования внешнего сервиса в цепочке сборки / развертывания, то это может помочь вам быстрее начать работу

0
ответ дан David Maze 29 March 2019 в 12:46
поделиться
Другие вопросы по тегам:

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