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

Всем привет. Такая задачка. Есть таблица со списком долгов Debt (переводов

amount) между пользователями, в обе стороны. Также есть таблица балансов долгов DebtBalance между пользователями, чтобы иметь возможность оперировать балансами в коде и не высчитывать баланс каждый раз из списка долгов. Задача состоит в том как сохранить целостность данных и чтобы баланс всегда был равен тому что находится в таблице долгов.

Сейчас такие модели::
Debt => [
'from_user_id’,
'to_user_id',
'amount’,
];
DebtBalance => [
'from_user_id’,
'to_user_id',
'amount’,
];

В такой схеме требуется постоянно менять местами id пользователей в DebtBalance (если он существует), чтобы amount был положительный. Также когда существует DebtBalance, то его amount меняется на величину amount долга при создании нового Debt между пользователями, что может вызвать проблемы рассинхронизации с таблицей долгов.

Вопросы:
1. Имеет ли смысл заменить один DebtBalance на два DebtBalance, чтобы в одном из них был отрицательный amount и не надо было менять местами id пользователей?
2. Имеет ли смысл при создании нового Debt, не изменять DebtBalance, а удалять его и создавать новый DebtBalance (взяв значение amount для него из таблицы Debt, просуммировав все долги между двумя пользователями)? В идеале сделать это каким то одним запросом sql, чтобы все расчеты база данных сделала самостоятельно.

Модели:
https://github.com/opensourcewebsite-org/opensourcewebsite-org/blob/060beaa33fef7a913293718a1fb6dda29f754739/models/Debt.php
https://github.com/opensourcewebsite-org/opensourcewebsite-org/blob/060beaa33fef7a913293718a1fb6dda29f754739/models/DebtBalance.php

11 ответов

15 просмотров
Vitaliy-Shevchenko Автор вопроса

Не знаком с этими понятиями

Vitaliy Shevchenko
Не знаком с этими понятиями

Вам нужна целостность вот прям сразу одновременно или допустимы поблажки, что изменения во второй таблице отразятся с задержкой?

Целостность разная бывает. Пример: в банке вы делаете перевод и по факту перевод может появится в интерфейсе не сразу. Но точно появится. Более того баланс обновится с еще большей задержкой чем перевод.

Vitaliy-Shevchenko Автор вопроса
Romka Los
Целостность разная бывает. Пример: в банке вы дела...

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

Vitaliy Shevchenko
параллельно с тем что пользователи создают долги в...

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

Vitaliy-Shevchenko Автор вопроса
Sergey P
если у тебя есть два процесса то одновременно не в...

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

я тебе страшную тайну открою - ты когда данные из базы пихаешь на UI у тебя есть ограничение в виде скорости света (причем в медных проводах в твоей витой паре скорость меньше сильно, а в оптоволокне всеравно не скорость света в вакууме). И даже если все хорошо - мозгу нужно милисекунд 100 что бы осознать что происходит и еще 200 что бы понять что там за циферки.

Sergey Zolotov
100мс мозгу?

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

Sergey P
ну вот от момента как картинка показалась и ты осо...

а. ну если так) а то я сразу так понял что человек больше 10 Гц не воспринимает

Sergey Zolotov
а. ну если так) а то я сразу так понял что человек...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта