Skip to content

Latest commit

 

History

History
68 lines (49 loc) · 2.97 KB

practice2.md

File metadata and controls

68 lines (49 loc) · 2.97 KB

Практика 2

ТЗ

  • Реализовать geojson базу данных с журналом записи транзакций и снапшотом состояния
  • Добавить первичный индекс по полю ID
  • Добавить вторичный spatial индекс по полю Geometry

Изменения

Добавить в конструктор сервиса параметр для имени сервиса

  • NewStorage(addr string, wrkdir string, name string)

Архитектура

Движком хранения и обработки данных является горутина:

  • Engine

Горутина Engine отвечает за in-memory хранение данных:

  • создание и сохранение транзакции в файл журнал
  • меняет эти данные
  • индексирует данные
  • возвращает данные по запросу
  • сохраняет данные в файл чекпоинт

Горутина Engine при запуске должна прочитать чекпоинт файл с данными затем должна прочитать файл с журналом транзакций.

Горутина должны завершаться в вызове Stop структуры Storage. Для взаимодействия с горутиной использовать каналы. Для управления горутиной использовать context.Context.

Индексация

  • Индексы неперсистентные и не больше, чем оперативная память
  • Для индексов использовать готовые решения:

LSN

LSN — log sequence number. Локальный счетчик транзакций. LSN + name — уникальный идентификатор транзакции.

Транзакции

Транзакция сериализуется в структуру Transaction:

  • action :string
    • значения
      • insert
      • replace
      • delete
  • name :string
    • значение name в сервисе
  • lsn :uint64
    • постоянно возрастающий локальный счетчик
  • feature :any
    • значения из стандарта https://geojson.org

Checkpoint

Горутина Engine должна обеспечить консистентное сохранения данных в файл чекпоинт. Файл чекпоинт должен представлять из себя как бы журнал insert транзакций. После checkpoint процедуру журнал транзакций можно очистить.

Добавить http api

  • POST /checkpoint
    • запускает checkpoint продедуру в горутине Engine