Architecture Decision Record

Active theme: Light

← Примери за записи на решения

Запис на архитектурно решение: избор на технология за база данни

Състояние

Прието

Контекст

Проектираме ново приложение, което изисква съхранение и извличане на данни по мащабируем и производителен начин. Идентифицирахме три типа технологии за бази данни, които се използват често: релационни бази данни, документни бази данни и бази данни за събития.

Релационните бази данни съхраняват данни в таблици с фиксирани схеми и налагат строги ограничения за целостта на данните. Подходящи са за приложения, които изискват сложни връзки между данните и транзакции. Примери са MySQL, PostgreSQL и Oracle.

Документните бази данни съхраняват данни в документи, подобни на JSON, и са без схема. Подходящи са за приложения, които изискват гъвкави модели на данни и хоризонтално мащабиране. Примери са MongoDB, Couchbase и Amazon DynamoDB.

Базите данни за събития съхраняват данни като поредица от събития, като фиксират всяка промяна в данните. Подходящи са за приложения, които изискват одит, event sourcing и сложна обработка на данни. Примери са Apache Kafka, Apache Pulsar и AWS Kinesis. Решение

След внимателна оценка на изискванията и ограниченията на нашето приложение решихме да използваме документна база данни.

Обосновка

Избрахме документна база данни, защото:

  1. Нашето приложение изисква гъвкав модел на данните, който може да се развива с времето. Документните бази данни ни позволяват да съхраняваме данни във формат без схема, което означава, че можем да добавяме нови полета или да променяме структурата на съществуващите документи, без да се налага да променяме схемата на базата данни.

  2. Нашето приложение трябва да се мащабира хоризонтално, за да обработва големи обеми данни и трафик. Документните бази данни предоставят вградена поддръжка на шардинг и репликация, което ни позволява да разпределяме данните между няколко сървъра и да обработваме висока пропускателна способност при четене и запис.

  3. Нашето приложение изисква бързо и ефективно извличане на данни. Документните бази данни предоставят мощни възможности за индексиране и заявки, които ни позволяват да извличаме данни бързо и ефективно.

  4. Нашето приложение не изисква сложни транзакции или връзки между данните. Макар релационните бази данни да се отличават с налагането на ограничения за целостта на данните и обработката на сложни транзакции, нашето приложение няма такива изисквания. Документните бази данни могат да осигурят достатъчни гаранции за консистентност и трайност за нашия случай на употреба.

Последици

Избирайки документна база данни, ще трябва да инвестираме в изучаване и разбиране на конкретната технология, която изберем да използваме. Освен това ще трябва да се уверим, че моделът на данните на нашето приложение се вписва добре в модела на данните на документната база данни, за да се увеличат максимално производителността и мащабируемостта.

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