Задать вопрос
Ответы пользователя по тегу PostgreSQL
  • Как бороться с deadlock?

    @mitya_k
    У тебя есть видимо множество update, которые пытаются обновить данную запись. Вариантов решения несколько:
    • Переписать бизнес логику, чтобы update шли последовательно, а не параллельно
    • На уровне приложения ловить быть готовым, что может прилететь ошибка deadlock и сделать повторный запрос или что-то другое в зависимости от бизнес-логики
    • И самый костыльный вариант это увеличить deadlock_timeout - это время сколько postgres ждет, в случае блокировок. Я бы это использовал только, как временный вариант
    Ответ написан
  • Как оптимизировать базу данных?

    @mitya_k
    Если у вас слишком большая таблица получаются, то вам поможет партицирование https://postgrespro.ru/docs/postgresql/10/ddl-part... Тогда UPDATEs станут быстрее работать, ибо id будет искаться не во всей таблице, а в конкретной секции. Если Postgres будет все-равно задыхаться под кол-во запросов, то придется применить шардирование. Завести еще один или несколько инстансов бд, в одной например будет таблица с матчами из Москвы, а в другой из Краснодара. Как выбрать ключ шардирования(по городу, региону, id, хэшу от чего-то и т.д) только вы можете решить исходя из бизнес логики и объема данных.

    Если вы переписываете JSON целиком и не ищете в нем ничего, то смысла выносить в отдельные колонки нет.
    Ответ написан
    Комментировать
  • Использование нескольких БД внутри 1 или больше микросерисов нормально-ли?

    @mitya_k
    Если кратко, то нет, а по факту надо четко ответить на вопрос зачем вы берете другую БД?

    Отказоустойчивость достигается за счет репликации и шардирования в рамках выбранной технологии.
    Взяли MongoDB ради JSONB, но поддержка JSON давно есть в MySQL8/Postgres, в MySQL даже есть монгоподобный язык запросов(MySQL Document Store). Админить зоопарк баз сложнее и отказоустойчивость только ниже станет. Моностек всегда проще и вводить новые сущности стоит, если вы понимаете зачем.
    Ответ написан
    Комментировать