Правильный способ обработки сеанса QLDB
Я хочу знать, как обрабатывать сеансы qldb в приложении node.js.
Должен ли я создавать один сеанс для всей области действия приложения или я должен создавать новый сеанс перед каждым пакетом транзакций?
Прямо сейчас я создаю сеанс перед каждой транзакцией, и у меня возникают некоторые конфликты OCC при запуске модульных тестов (для каждого теста создается новый сеанс).
1 ответ
Вы должны использовать столько сеансов, сколько необходимо для достижения требуемого уровня пропускной способности. Каждый сеанс может запускать одну транзакцию, и каждая транзакция имеет определенную задержку. Так, например, если ваши транзакции занимают 10 мс, вы можете выполнять 100 транзакций в секунду (1 с = 1000 мс и 1000/10 = 100). Если вам нужно достичь 1000 TPS, вам понадобится 10 сеансов.
У драйвера есть "пул" сессий. Итак, каждая транзакция должна запрашивать сеанс из пула. Пул будет увеличиваться / уменьшаться по мере необходимости.
Каждая сессия может прожить не более ~15 минут (есть некоторый джиттер). Таким образом, вы должны обработать случай, когда использование сеанса вызывает исключение (недопустимый сеанс) и повторить операцию (получить сеанс, запустить транзакцию).
Что касается OCC, я думаю, что это, скорее всего, не связано с использованием вами сессий. OCC означает, что вы читаете данные в своей транзакции, которые были изменены к моменту попытки фиксации. Обычно это означает, что вы не настроили правильные индексы, поэтому при чтении сканируются все элементы в таблице.