212 похожих чатов

Здравствуйте. Подскажите плиз, как более корректно разделить доменные данные и

аналитку/логи на разные БД и нужно ли.
О чем речь, просто пример. Например есть сущность баланс и история. История атомарно меняется с балансом в одной транзакции, все жестко и это устраивает. Не устраивает то, что история по большей части к работе домена никакого отношения не имеет. Записываем чтобы было и чтобы потом анализировали мы и клиенты через UI. Опять же база разрастается данными, которые там особо и не нужны для корректной работы приложения.
Возникла мысль складывать в какой нить nosql типа эластики, опять же через кибану все это удобно смотреть в случае чего.
При этом все же хотелось бы сохранить имеющуюся жесткость, чтобы история и баланс сохранялись атомарно и не нарушалась консистенция. Как насчет того чтобы сохранять так же в реляционку, но паралельно сохранять в nosql, например через ивенты для скорости обновления на UI, а потом еще периодически досинхронивать периодично по крону какой либо промежуток, для избежания неконсистенции. А в sql хранить только за последний месяц-два.
Норм, не норм вариант или какие есть хорошие практики?

17 ответов

39 просмотров

Эластику не надо рассматривать как надежное хранилище, ибо там потерять индекс проще, чем в rdbms. Я бы оставил как есть сейчас history, разве что порезал ее на партишны, чтобы быстрее данные доставать и проще их удалять целыми порциями по месяцу, допустим. И раз в сутки индексировал в solr/elastic для построения аналитики.

Разделять нужно. Но менять формат данных не факт. Если у вас коректно подобраны структуры данных и вы используєте подходящую базу, тогда или не стоит менять это вовсе, или стоить менять с учетом того какого вида аналитика вам нужна. В любом случае, ваше приложение не должно знать ни о какой аналитике. Ваша аналитика должна собираться отдельно посредством подключения к реплике основной базы и/или к шине данных куда ваше приложение ложило бы информацию о своей работе

Павел-Г. Автор вопроса
Max Grom
Разделять нужно. Но менять формат данных не факт. ...

Ну это не совсем аналитика, это история. И для атамарности сохранения, она не может не знать совсем. Тут скорее идея, чтобы разгрузить а не освободить. И не просто про модель чтения. Задача уменьшить объем информации зранящайся в основной базе. От объёма все же и скорость записи зависит, да и вообще бОльшая часть бд захламлена именно такими "историями"

Павел Г.
Ну это не совсем аналитика, это история. И для ата...

Если сделать там партицирование, то скорость будет норм

Павел Г.
Ну это не совсем аналитика, это история. И для ата...

Вы просто начали за "аналитику/логи" а теперь это таки данные которые относятся к домену, если я правильно понял. Тогда не понимаю что вам разделять и зачем. Пишите тогда в две базы в место одной - вот и разгрузите

Павел-Г. Автор вопроса
Anton K.
Если сделать там партицирование, то скорость будет...

Для истории партицирование не и знаю как выйдет. Делать по юзерам - жёстко чёт. Делать по времени - не угадать партицию. Например история заказа. Не разбивать же в ui по месяцам.

Павел-Г. Автор вопроса
Max Grom
Вы просто начали за "аналитику/логи" а теперь это ...

Ну они как бы домен, но с другой стороны в логике не участвуют, просто пишутся

Anton K.
Если сделать там партицирование, то скорость будет...

Так им писать нужно, а не читать, зачем им партицирование? 😊

Павел Г.
Ну они как бы домен, но с другой стороны в логике ...

Ну пишите в две базы вместо одной - устраивает вас такой кейс?

читать когда анализируешь данные, потом уже.

Павел-Г. Автор вопроса
Андрей Рудин
читать когда анализируешь данные, потом уже.

Ну так потом и будут читать и смотреть устраивает их скорость чтения или нет. В любом случае не вижу причин добавлять туда "партиции для скорости" прям сейчас

Павел-Г. Автор вопроса
Max Grom
Почему не получится?

Распределеные транзакции за счёт бд ?

Павел Г.
В две базы не получится атомарно

ну это можно сделать через репликацию данных, для истории прям атомарно и не нужно. так или иначе с этим данными нужно будет работать когда то потом.

Павел Г.
Распределеные транзакции за счёт бд ?

Вы у меня спрашиваете? 😁 Я ж не знаю что там у вас и почему не получится. Потому и задал вопрос. Очевидно что если разделять то разделять нужно будет слегка больше чем просто создать ещё одну базу

Павел-Г. Автор вопроса
Max Grom
Вы у меня спрашиваете? 😁 Я ж не знаю что там у вас...

Ну может технологии из коробки есть :)

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

Обсуждают сегодня

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Карта сайта