Что будет быстрее update или insert?

всем привет, пишу сервис, в котором пользователи будут раз в 10 секунд будут кидать свою геопозицию, сервис будет сильно загружен и постоянно при обновлении писать в бд не вариант, у меня появилось две идеи:
1. просто апдейтить, но это не сильно быстрее
2. писать в редис и потом другим скриптом читать редис раз в какое-то время и писать в бд, но есть страх, что редис переполниться и то что может произойти гонка данных

предполагается нагрузка на сервис где-то рпс 70-100к
  • Вопрос задан
  • 343 просмотра
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
1 м/с это 3.6 км/ч - пешая походка.
Так что смело что ниже отбрасывайте. Это даст сильную экономию.
Дальше, сохраняйте в редисе и сбрасывайте пакетной вставкой в 100 записей.
Посчитаем 1000 инсертов в секунду. Не так уж и много.
Дальше считаем объём памяти для редиса.
guid + timestamp + lng + lat

16 байт + 8байт + 4 + 4 = 32 байта.
Итого 100 000 * 32 = 3.2 мегабайта под редис на секунду
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
предполагается нагрузка на сервис где-то рпс 70-100к
c
Это не большая нагрузка. Oracle лет 20 назад заявлял 500K транзакций в секунду по результатам бенчмарков.

Данную задачу также можно решать со стороны CQRS / Event Sourcing. Тоесть посто фиксировать события гео-позиции в журналы (они могут быть распределенные) а потом уже накатывать в БД. Здесь я предполагаю что вам не требуется реал-тайм. (За 10 секунд вашего технического лага человек все равно успеет убежать за горизонт) и накинтье еще от 1 секунды до допустим 30 секунд время на фиксацию в основной БД. И получается система вполне себе почти реального времени. И в то-же время вам будет лего выдержать всплески информации и ничего не потерять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы