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

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

всего об этом спрашивать, но так как касается проектирования бэка, то решил здесь.

Подскажите, что лучше использовать (relational db, views + denormalization) или write relational db + read document-oriented noSql?

Дано: система документооборота между различными контрагентами. Над одним документом могут работать N компании/ сотрудников, в каждой компании у документа свой жизненный цикл - согласования, правки, статусы и т.д. Ну и есть общий стейт, который считается на основе стейтов в каждой компании.

Сейчас все это храним в нормализованном виде в 8 таблицах, все ОК, но начитает тормозить на тяжёлых запросах / фильтрах по всем документам - строим запросы сразу ко всем таблицам, группировки / джойны / расчеты - тяжело, индексов не хватает.

Что думаем:
Либо пилить вьюшки/триггеры, либо поставить рядом document-oritented noSql и асинхронно ивентами обновлять и хранить денормализованный плоский стейт, удобный для чтения/фильтров.

Из требовании: не профукать смену стейта, стейт чтения меняется достаточно часто, т.е. база для чтения постоянно обновляет записи.

Куда можно копать? Адекватная ли идея с nosql-read или легче запилить вьюхи/денормализованные таблицы в основной реляционной БД (+acid гарантия) и не иметь дела со всякими асинхронными ивентами?

2 ответов

22 просмотра

вопросы которые стоит задавать: - денормализация вьюшки и т.д. - это всегда slate data - насколько это критично для флоу. Задержки там небольшие и если это только для UI топо идее норм - вопрос в чем "тормозит". Если вопрос только в UI - я бы начал с того что бы проанализировал запросы глянул можно ли обойтись просто парой реплик базы и тд. перед тем как решать вопросы построения вьюшек. Для этого по хорошему нужно какую-нибудь надежную инфраструктуру которая тригернет апдейт гарантированно

короч опять же - "nosql read или денормализация и вьюхи" - это все вопрос "как ты гарантируешь что стэйт актуализируется

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта