Базы данных: EventStoreDB

EventStoreDBopen in new window — база данных для хранения событий (изменений состояний объектов), например, для реализации шаблона Event sourcingopen in new window.

Основные объекты EventStoreDB:

  • Событие (event) — основной объект в котором хранятся данные. Событие имеет тип — группа событий имеющих одно назначение, например, пополнение счёта, изменение данных и подобные. Данные хранятся в виде набора байт (чаще всего json).
  • Поток (stream) — объект к которому привязываются события. Это может быть некоторый общий объект вроде application, или же это может быть определенный объект с идентификатором такой как user-123.

Логически EventStoreDB представляет из себя key-value хранилище, где key это название потока, а value — список событий. Так же эту базу данных можно представить в виде последовательно добавляемых записей лога.

Запуск

Запустить EventStoreDB проще всего через dockeropen in new window.

docker run --name esdb -d -p 2113:2113 \
    eventstore/eventstore:latest --insecure --run-projections=All \
    --enable-atom-pub-over-http
1
2
3

Event Store Navigator

EventStoreDB поддерживает web-интерфейс для администрирования. После запуска контейнера интерфейс будет доступен по адресу localhost:2113.

На вкладке Stream Browser можно увидеть недавно изменённые потоки и добавить событие в любой поток.

Пример на Python

Пример использования библиотеки esdbclientopen in new window:

from esdbclient import EventStoreDBClient, NewEvent, StreamState

client = EventStoreDBClient(
    uri="esdb://localhost:2113?Tls=false"
)

event1 = NewEvent(
    type='PartProduced',
    data=b'{"count": "3"}'
)

event2 = NewEvent(
    type='PartProduced',
    data=b'{"count": "5"}'
)

client.append_to_stream(
    stream_name='machine-25',
    events=[event1, event2],
    current_version=StreamState.ANY
)

events = client.get_stream('machine-25')

print(list(event.data for event in events))
# [b'{"count": "3"}', b'{"count": "5"}']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

Ссылки

Последниее изменение: 30.12.2024, 18:29:25