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

Коллеги, подскажите по архитектуре. Сервис, аналог яндекс.диска или гугл.драйв, но

не по хранению файлов, а просто данные компаний (всякая отчетность и тд).

Но структура подобная: есть у пользователя на компьютере приложение со своей sql-базой, данные из локальной базы должна синхронизироваться с облачной (постгрес) и некоторые действия, предоставлять иногда доступ к своим данным другим пользователям.

Пользователей предполагается много, порядка 1млн. Вообще меньше, но запас поставили такой.

Как лучше спроектировать постгрес? Варианты:
1. Сливаем все данные в одну схему в таблицы по сущностям: например: table_users, table_orders и т.д. И секционируем эти огромные таблицы по дате, а внутри секционируем по пользователям.
2. Каждого пользователя заливаем в отдельную schema, у каждого будет своя синхронизация локальной базы со своей schema. И в отдельной schema сделать возможность общего доступа к данным. Типа schema это как место на яндекс.диске. У каждого пользователя своя.

Вот как будет логичней архитектуру создать?

19 ответов

20 просмотров

Прекратите выдумывать оптимизацыи -- с вашым опытом у вас не получается. Никаких партицыонирований, разных схем, составных строк и документов в jsonах -- только классические значения, классические отношэния между таблицами и простые смыслы у всего. Когда потребуется -- тогда и будете делать, притом, 100% -- совсем не то, что собрались сейчас.

Danila- Автор вопроса
Ilya Anfimov
Прекратите выдумывать оптимизацыи -- с вашым опыто...

Хорошо, можете пояснить чем плохи мои решения?

Danila
Хорошо, можете пояснить чем плохи мои решения?

Да много чего вы предложыли. Таблицы не в 1НФ, DDL в обычной работе, миллионы схем (ладно, десятки тысяч), партицыонирование без показаний (оно тут непростое, потому это всегда слёзы, и чаще всего -- торможэние).

Danila- Автор вопроса
Ilya Anfimov
Да много чего вы предложыли. Таблицы не в 1НФ, DDL...

Почему? Все таблицы в НФ. Я просто думаю как логически это все увязать. Если пользователь просто синхронизирует свои данные с облаком (постгрес), то зачем бегать по таблице всех пользователей, когда можно обратиться в свою схему. Тем более, что количество схем не ограничено в постгресе. Ну или разбить на партиции. Я понимаю, что партиции сложны, но архитертуру хотелось бы продумать заранее, хотя бы селать ее гибче

Danila
Почему? Все таблицы в НФ. Я просто думаю как логи...

Колонка типа "iduser.idaction" -- очень типичное нарушэние 1НФ. Главное, в данном случае -- безо всякой пользы. И да, суть в том, что вашы оцэнки того, что "полезно" или "быстро" -- пока что крайне далеки от реальности. Ну, вот не знаю -- опыта нехватает или там божэственного откровения -- но вот все эти рассуждения "зачем бегать по таблице всех пользователей", " селать ее гибче" -- являются полной ерундой.

Danila- Автор вопроса
Ilya Anfimov
Колонка типа "iduser.idaction" -- очень типичное н...

а как бы вы спроектировали архитектуру для этой задачи (про синхронизацию)? поделитесь мыслями

Danila
а как бы вы спроектировали архитектуру для этой за...

1) Для начала -- есть шанс, что дажэ не взялся бы. Это, фактически, мульти-мастер, а мульи-мастер для взаимосвязанных данных -- это всегда боль, разрешэние конфликтов, привлечение экспертов для этого разрешэния и необходимость в тренировке пользователей. В общем, ... мало там не покажэтся, я думаю. 2) А сама репликацыя -- хранил бы с каждой строчкой changetime, плюс отметки в базах о последней успешной синхронизацыи. Всё, что появилось с последней успешной синхронизацыи -- отправляется на сервер и получается оттуда. Последний изменившый побеждает, если нет каких-то важных конфликтов (например, если эту строчку не хочется потерять, а изменили её в двух местах). И да, примерно всё остальное -- чётко по предметной области.

Danila
а как бы вы спроектировали архитектуру для этой за...

В соответствии с техническим заданием. Которого ты нам не показал. Ну, конечно, яндексе диски же все знают как делать..

Danila- Автор вопроса
Ilya Anfimov
1) Для начала -- есть шанс, что дажэ не взялся бы....

Благодарю, есть над чем подумать. Можете подкинуть какие-нибудь ресурсы на эту тему с кейсами или бестпрактис?

Ilya Anfimov
1) Для начала -- есть шанс, что дажэ не взялся бы....

> Всё, что появилось с последней успешной синхронизацыи -- отправляется на сервер и получается оттуда. Вот это прямо напоминает "Любая, даже самая сложная, проблема обязательно имеет простое, лёгкое для понимания, неправильное решение." ;) Я, к несчастью, видел несколько систем "репликации", сделанных по этому принципу. Естественно, все они работали неправильно (теряли данные). Если что — их проблема в том, что реальное время не имеет никакого отношения к "видимому" порядку выполнения транзакций. Т.е. строка с меньшим changetime вполне может появиться в базе позже (в реальном времени), чем строки с большим. Разумеется, подобные системы "теряют" такие строки.

Yaroslav Schekin
> Всё, что появилось с последней успешной синхрони...

Чтобы этого не было -- надо, конечно, блокировать отметку синхронизацыи, чтобы сам процэсс видел консистентные данные и никто не мог в ведомую базу ничего записать пока синхронизацыя не завершытся. И да, Вы, скорее всего, видели множэство автоматических онлайн мульти-мастеров, которых делали чтобы было прозрано для "пользователя" и нагрузка распределялась. У этих-то вообще мало шансов быть нормальными. Если бы задача стояла так -- то я бы посоветовал вообще оставить надежду. Синхронизацыя пользовательских данных при участии пользователя, с другой стороны -- в общем реальна. Вон, git тому примером. Только, понятно, тяжко там всё.

Ilya Anfimov
Чтобы этого не было -- надо, конечно, блокировать ...

> и никто не мог в ведомую базу ничего записать пока синхронизацыя не завершытся А это не поможет. Проблема-то в работе с источником данных. > И да, Вы, скорее всего, видели множэство автоматических онлайн мульти-мастеров Да если бы. Обычная однонаправленная "синхронизация". > Только, понятно, тяжко там всё. Готовые системы триггерной репликации (например, Slony) вполне справляются, тем не менее.

Yaroslav Schekin
> и никто не мог в ведомую базу ничего записать по...

>А это не поможет. Проблема-то в работе с источником данных. Поможэт. Ну, то есть консистентность состояния всё равно будет необходимо выправлять бизнес-логикой -- поскольку параллельные изменения могут всё рушыть и без каких-либо проблем с таймстампами. >например, Slony Например, слони однонаправленный -- и это совсем другое дело. Почитать слони, кстати, я бы топикстартеру советовал -- хорошо работающая архитектура и написана относительно несложно. Но напрямую копирование его архитектуры в этом кейсе по многим причинам не подойдёт.

Ilya Anfimov
>А это не поможет. Проблема-то в работе с источник...

почему "Слони"? "Слоны" же, вроде Бартунов с Сигаевым запустили в начале нулевых тему.

Ega23 Egorov
почему "Слони"? "Слоны" же, вроде Бартунов с Сигае...

Не знаю, не видел тех заявлений Сигаева с Бартуновым.

Ilya Anfimov
Не знаю, не видел тех заявлений Сигаева с Бартунов...

Ян Вик, автор Слонов, рассказывал, что это именно Слоны.

Ilya Anfimov
>А это не поможет. Проблема-то в работе с источник...

> Поможэт. Наверное, авторы этих систем синхронизации тоже так думали... но не помогло. ;) > Например, слони однонаправленный А я всего лишь про такой случай и писал, собственно. И уже там можно запросто "накосить", используя "простые и очевидные" подходы.

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

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

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
что за асемблер кста?
Shvabrikk Nya
19
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
This automated cryptocurrency trading system uses intelligent algorithms to buy low and sell high on leading crypto exchanges. Many users have already enjoyed significant prof...
Endu Wako
1
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Карта сайта