Любые мысли о Многопользовательском по сравнению с приложениями Мультибазы данных в направляющих

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

  1. docker container prune. Эта команда удаляет все контейнеры, которые не работают правильно теперь. Можно узнать, какие контейнеры не работают путем сравнения вывода docker ps и docker ps -a. Контейнеры, которые перечислены в docker ps -a и не существуют в docker ps, не работают правильно теперь, но их контейнеры не удалены.

  2. docker kill $(docker ps -aq). То, что делает эта команда, - то, что путем выполнения $(docker ps -aq) она возвращает список идентификаторов всех контейнеров, и уничтожьте их. Когда-то эта команда не работает, потому что это - использование рабочим контейнером. Чтобы заставить это работать, можно использовать --force опция.

  3. docker rm $(docker ps -aq). Это имеет то же определение как вторая команда. Единственная разница их - то, что это удаляет контейнер (как то же как чернослив докера), в то время как эти docker kill не делает.

  4. Иногда необходимо удалить изображение, потому что Вы изменили конфигурацию Dockerfile и должны удалить ее для восстановления ее. С этой целью Вы видите все изображения путем выполнения docker images и затем копируете идентификатор изображения, которое Вы хотите удалить. Это может быть удалено просто путем выполнения docker image rm <image-id>.

пз: можно использовать docker ps -a -q вместо [1 114] и нет никаких различий. Поскольку в основанной на Unix операционной системе, можно присоединиться к опциям как вышеупомянутый пример.

11
задан John Topley 5 September 2009 в 10:03
поделиться

5 ответов

В мультитенантных системах вы столкнетесь с целым рядом проблем. Мои быстрые мысли приведены ниже

  • Все SQL должны быть проверены и рефакторинг для включения ClientId ценность.

  • Все индексы должны быть проверены на определить, должен ли ClientId быть включен

  • Ошибка в инструкции SQL из-за разработчик / системный администратор в производстве будет повлияют на всех ваших клиентов.

  • Повреждение / проблема базы данных приведет к влияют на всех ваших клиентов

  • У вас есть проблемы с конфиденциальностью данных в результате плохой код / ​​реализация могут позволить customerA видеть принадлежащие в CustomerB

  • Клиент, использующий вашу систему в тяжелая / агрессивная манера может повлиять восприятие производительности другими клиентами

  • Адаптация статических данных к предпочтениям отдельных клиентов становится более сложной.

Я уверен, что есть ряд других проблем, но это были мои первоначальные мысли.

6
ответ дан 3 December 2019 в 07:38
поделиться

Это действительно зависит от того, что вы делаете.

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

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

В настоящее время мы находимся на стадии бета-тестирования нашей программы, и вот некоторые вещи, с которыми мы столкнулись:

  • Миграции: A Rails Предполагается, что у вас будет только 1 база данных. Вы можете адаптировать его для нескольких баз данных, и миграции - одна из них. Для применения миграции ко всем существующим базам данных вам потребуется настраиваемая задача с граблями. Будьте готовы выполнить множество действий по устранению неполадок, потому что миграция может быть успешной для одной БД, но неуспешной для другой.
  • Создание баз данных: Как создать новую базу данных? Из файла SQL, копируя существующую базу данных или выполняя все миграции? Как вы поддерживаете согласованность схемы между вашей системой создания таблиц и вашими действующими базами данных?
  • Подключение к соответствующей базе данных: Мы используем cookie для хранения уникального значения, которое сопоставляется с правильной базой данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.

Если у вас есть конкретные вопросы по любому из них, я могу помочь.

  • Создание баз данных: Как создать новую базу данных? Из файла SQL, копируя существующую базу данных или выполняя все миграции? Как вы поддерживаете согласованность схемы между вашей системой создания таблиц и вашими действующими базами данных?
  • Подключение к соответствующей базе данных: Мы используем cookie для хранения уникального значения, которое сопоставляется с правильной базой данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.
  • Если у вас есть конкретные вопросы по любой из них, я могу помочь.

  • Создание баз данных: Как создать новую базу данных? Из файла SQL, копируя существующую базу данных или выполняя все миграции? Как обеспечить согласованность схемы между вашей системой создания таблиц и вашими действующими базами данных?
  • Подключение к соответствующей базе данных: Мы используем cookie для хранения уникального значения, которое отображается в правильную базу данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.
  • Если у вас есть конкретные вопросы по любой из них, я могу помочь.

    или выполняются все миграции? Как обеспечить согласованность схемы между вашей системой создания таблиц и вашими действующими базами данных?
  • Подключение к соответствующей базе данных: Мы используем cookie для хранения уникального значения, которое отображается в правильную базу данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.
  • Если у вас есть конкретные вопросы по любому из них, я могу помочь.

    или выполняются все миграции? Как обеспечить согласованность схемы между вашей системой создания таблиц и вашими действующими базами данных?
  • Подключение к соответствующей базе данных: Мы используем cookie для хранения уникального значения, которое отображается в правильную базу данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.
  • Если у вас есть конкретные вопросы по любому из них, я могу помочь.

    Мы используем файл cookie для хранения уникального значения, которое соответствует правильной базе данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.

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

    Мы используем файл cookie для хранения уникального значения, которое соответствует правильной базе данных. Мы используем предварительный фильтр в авторизованном контроллере, который наследуется от ActionController, который получает db из этого уникального значения и использует метод install_connection в подклассе ActiveRecord :: Base. Это позволяет нам получать одни модели из общей базы данных, а другие из конкретной базы данных клиента.

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

    2
    ответ дан 3 December 2019 в 07:38
    поделиться

    Зачем? У вас сильная агрегация между пользователями или вы создаете слишком много БД? Рассматривали ли вы использование файлов SQLite для каждого клиента вместо общих серверов БД (поскольку многопользовательские приложения часто являются низкопрофильными и не требуют такого большого параллелизма)?

    0
    ответ дан 3 December 2019 в 07:38
    поделиться

    Лично у меня нет опыта в этом, но во время молниеносных переговоров на Ruby Hoedown 2009 Эндрю Коулман представил плагин, который он разработал и использует для мультитенантных баз данных в рельсах. поддомены. Вы можете посмотреть слайды Lightning Talk и вот репозиторий plays_as_restricted_subdomain .

    0
    ответ дан 3 December 2019 в 07:38
    поделиться

    Я исследовал то же самое и обнаружил, что эта презентация предлагает интересное решение: использование схем Postgre (немного похожих на пространства имен) для разделения данных на уровне БД с сохранением всех клиентов в та же БД и остается (в основном) прозрачным для рельсов.

    Написание мультитенантных приложений в Rails - Гай Наор

    8
    ответ дан 3 December 2019 в 07:38
    поделиться
    Другие вопросы по тегам:

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