powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сложность при проектировании многопользовательской БД на основе однопользовательской.
64 сообщений из 64, показаны все 3 страниц
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821557
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть однопользовательская БД, которая нормально спроектирована и работает на SQLite. Сейчас возникла задача сделать её многопользовательской на основе MS SQL Server или чём-то подобном.
Сложность заключается в следующем: есть основная таблица r_objects, где находятся некие объекты, упорядоченные в виде дерева. И есть масса вспомогательных таблиц, данные в которых принадлежат конкретному объекту.
Логика обработки этих данных требует при указании конкретного объекта загрузить их все в память, и там обрабатывать (корректировать, выполнять расчеты, представлять в виде графиков и т.д.)
После выполнения всех действий, если возникли изменения в данных (а они могут кардинально поменяться), необходимо записать данные обратно. Пока это однопользовательская БД, это нормально.
Но в многопользовательской среде 2 оператора могут корректировать один и то же объект (а время коррекции получается достаточно длительное) и каждый может перезаписать свою версию данных. Ситуация усугубляется тем, что пользователи могут быть разнесены на тысячи километров.
Вопрос: как синхронизировать такие коллизии?
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821574
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52,

если не секрет, клиент на чём? В общем случае механизм корректировки данных нужно менять. Кто придумал такую логику работы, не спрашиваю.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821617
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Вопрос: как синхронизировать такие коллизии?

Ответ: выяснить какого чёрта два оператора лезут в один и тот же объект и разнести его на
два разных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821620
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXINewBy52,
если не секрет, клиент на чём? В общем случае механизм корректировки данных нужно менять.
Я понимаю, что надо менять. Вопрос - как менять. Если данные не загрузить в память, некоторые операции будут считаться о-чень долго. Придумать бы какой-нибудь семафор, говорящий о том, что объект занят. Но 100% надёжного придумать не могу.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821622
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Вопрос - как менять.

Заведи поле "версия объекта". Перед попыткой сохранения - проверяй, что эта версия в базе
та же, что была при загрузке объекта. Если нет - грузи новую версию и проси пользователя
решить какая из них правильнее. Так работают все VCS.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821623
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Вопрос: как синхронизировать такие коллизии?Не допускать их.

У вас очень странная работа с данными. Как один и тот же показатель может быть разным у двух юзеров ?
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821624
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovОтвет: выяснить какого чёрта два оператора лезут в один и тот же объект и разнести его на
два разных.

Ну, право-то имеют. Но не одновременно. Выше написал, что семафор, говорящий: "занято для коррекции", устроил бы. Вопрос - как.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821626
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Ну, право-то имеют. Но не одновременно.

Почему нет? Один-то всегда данные сохранит позже, он и будет прав.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821629
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argoУ вас очень странная работа с данными. Как один и тот же показатель может быть разным у двух юзеров ?
Может. авторЕсть многое на свете, друг Горацио...
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821633
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovПочему нет? Один-то всегда данные сохранит позже, он и будет прав.

Не обязательно. Если юзер более высокого статуса (в плане знаний предмета) сохранит данные, а юзер более низкого статуса (находящийся порой за тысячи километров) сохранит их позже, и затрёт данные первого пользователя, это будет нехорошо. Поэтому, второй пользователь должен видеть, что сейчас стоит отказаться от сохранения данных.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821636
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovЗаведи поле "версия объекта". Перед попыткой сохранения - проверяй, что эта версия в базе
та же, что была при загрузке объекта. Если нет - грузи новую версию и проси пользователя
решить какая из них правильнее. Так работают все VCS.

А вот это мысль очень полезная для меня. Спасибо, надо будет обдумать.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821642
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NewBy52Dimitry SibiryakovЗаведи поле "версия объекта". Перед попыткой сохранения - проверяй, что эта версия в базе
та же, что была при загрузке объекта. Если нет - грузи новую версию и проси пользователя
решить какая из них правильнее. Так работают все VCS.

А вот это мысль очень полезная для меня. Спасибо, надо будет обдумать.
Да, это решит проблему. Ещё раз спасибо.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821652
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно вообще пересмотреть схему работы с данными.
Текущая схема ущербна.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821654
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52,

надо всё-таки исходить из того, что разные пользователи могут одновременно править разные данные одного объекта. Почему нет? Таблицы же разные. Вот когда два пользователя правят одну и ту же запись в одной и той же таблице, то тогда должно быть сообщение пользователям о проблеме. Но это стандартный механизм работы с БД. Почему я и спрашиваю о клиенте.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821669
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXINewBy52,
надо всё-таки исходить из того, что разные пользователи могут одновременно править разные данные одного объекта. Почему нет? Таблицы же разные. Вот когда два пользователя правят одну и ту же запись в одной и той же таблице, то тогда должно быть сообщение пользователям о проблеме. Но это стандартный механизм работы с БД. Почему я и спрашиваю о клиенте.
Я знаю стандартный механизм работы с БД. Но тут "правка" может подразумевать удаление 1000+ записей вспомогательной таблицы и заполнение её 2000+ других записей (или наоборот). И так по всем вспомогательным таблицам. Потому что многие записи расчетные. Но одновременно их можно и индивидуально править. Таково было ТЗ.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821672
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компьютеры на Win7. СУБД пока не выбрана.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821681
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52,

какое-то противоречивое ТЗ. Наверно рано говорить о практической реализации. Надо понять какие данные могут одновременно редактироваться. Можно пойти, например, таким путём. Один пользователь "взял" объект (в каком-нибудь поле главной таблицы появляется идентификатор "взявшего"). Всем остальным отлуп до тех пор пока "взявший" не внесёт все изменения.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821683
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXINewBy52,
Один пользователь "взял" объект (в каком-нибудь поле главной таблицы появляется идентификатор "взявшего"). Всем остальным отлуп до тех пор пока "взявший" не внесёт все изменения.
Это не сработает. Свет отключили у пользователя, и объект завис для всех.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821687
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот схема, предложенная Дмитрием, проблему закрывает. Собственно, я уже получил ответ на вопрос.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821693
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIПочему нет?

Потому что это проклятая проблема компетенции, лежащая за пределами компьютеров. Данные
которого из пользователей правильные? Если они говорит "небо голубое", а другой "небо
серое" - кто врёт?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821709
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

была бы одна/несколько таблиц, то с версионностью можно было бы жить. А если масса подчинённых таблиц, да ещё удаления/добавления тысячами, проверка перед записью будет занимать нехилое время. Ещё где-то "старые" данные нужно хранить. Я поэтому и говорю - может ТЗ чуть подправить?
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821710
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIЕщё где-то "старые" данные нужно хранить
Зачем старые данные? Номера версии вполне достаточно

Банальное сравнение номера версии перед UPDATE'ом. Если не совпадает - ошибка и транзакция ROLLBACK.

IMHO Так обычно оптимистичная блокировка и работает.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821714
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Это не сработает. Свет отключили у пользователя, и объект завис для всех.
Жесть какая. Блокировки обычно отслеживаются на уровне ОС (ну или СУБД).

Отключение света никак не мешает. Свет отключился, сетевая карта выключилась, сеанс прервался, блокировки снялись

p.s. SQLLite блокировками OS пользуется. AFAIK по гуглю.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821750
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevNewBy52Это не сработает. Свет отключили у пользователя, и объект завис для всех.
Жесть какая. Блокировки обычно отслеживаются на уровне ОС (ну или СУБД).

Отключение света никак не мешает. Свет отключился, сетевая карта выключилась, сеанс прервался, блокировки снялись

Вы невнимательно прочитали цепочку ответов.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821763
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, право-то имеют. Но не одновременно. Выше написал, что семафор, говорящий: "занято для коррекции", устроил бы. Вопрос - как.
Семафор в нормальных SQL Server'ах обычно:
SELECT FOR UPDATE
но блокировать на долгое время не есть айс + некоторые СУБД блокируют не запись, а страницу AFAIK

Если не хочется стандартные семафоры, то 95% СУБД предоставляют возможность пользовательских семафоров (вроде, не точно: Oracle DBMS_LOCK, PostgreSQL - Advisory Locks, MS SQL не знаю).

Проблемы с "выключили питание" быть не должно

Если хранить дополнительную информацию, то наверное отдельная табличка + автономные транзакции

Но сначала стоит определится, что же хочется:

писсимистик блокировку - "семафор, говорящий: "занято для коррекции", устроил бы"
или ему писсимистичной не хватает, и хочется оптимистичную - версия
или какую-то помесь писсимистик + оптимистик
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821769
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если MS SQL, то рассмотрите applock
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821784
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фейспалм, блин..
Причем тут блокировки ??????

Речь про организацию работы с данными. Она изначально ущербна.
Видимо есть некие параметры, кот. нужны в разных местах.
И юзеры их зачитывают и потом меняют на свое усмотрение.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821799
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argoВидимо есть некие параметры, кот. нужны в разных местах.
И юзеры их зачитывают и потом меняют на свое усмотрение.
Нет.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39821857
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoПричем тут блокировки ??????

Мне кажется топик стартеру нужно почитать(поиграться руками) с Писсимистик и Оптимистик блокировками

L_argoРечь про организацию работы с данными. Она изначально ущербна.
Видимо есть некие параметры, кот. нужны в разных местах.
И юзеры их зачитывают и потом меняют на свое усмотрение.
IMHO
Обычная "ущербная" организация работы a la ORM (Hibernate). Все затащили в память, а дальше for'ами, for'ами.... Но AFAIK, ORM (Hibernate) обычно как раз Optimistic блокировки и используют.

Для ИС, возможно, осмысленно использовать какой нибудь микс писсимистик + оптимистик. Например объекты "верхнего" уровня блокировать писсимистик, а объекты ниже уровнями - оптимистик.

Если тупо (!!!) реализовать предложение Dimitry Sibiryakov, то с оптимистик блокировкой много лулзов можно словить.

Например, бизнес процесс выставление счета за ком. услуги за нужный период
1. Для каждого клиента:
1.1. Считали данные
1.2. Сформировали новые данные
1.3. Старые данные НЕ менялись (т.ч. UPDATE не было, только INSERT'ы)
2. Го на пункт 1
3. Коммит
Java, Hibernate, Cobol, Optimistic блокировка по умолчанию (номер версии).... Модно, молодежно и считает минутами

Реалии:
1. Один пользователь запустил пакет из 100500 клиентов по каким-то условиям
2. Второй пользователь запустил пакет из 100500 клиентов, но по другим условиям
3. Некоторые клиенты вошли в оба списка
===>
Блокировок нет, зато счета за период у ряда клиентов банально ЗАДВОИЛИСЬ. Смотрим, радуемся, восторгаемся архитекторами Oracle Customer Care & Billing. Модно, молодежно и куча лулзов.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39822841
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52А вот схема, предложенная Дмитрием, проблему закрывает. Собственно, я уже получил ответ на вопрос.

да и не закрывает совсем...
ну получил я версию объекта после того как отдолбил 1000 параметров в течение двух часов и что?
- я должен понять и принять тот факт, что я два часа долбил зря, передо мной вроде как долбил крутой ?
- или я честно отработал день, а на утро увидел что вчера работал зря, мои труды потерли...
- а может у меня пусть 10 % но более правильная информация, которая ушла в никуда... ?
ИМХО тут блокировки и и всякие версии не сработают на все 100 ...

Не хватает организационных мер:
- например поделить параметры между регионами (ответственными) , ну кому например нужно вводить показания счетчиков, как ни тому, кто сейчас смотрит на этот счетчик, или Иванову, который сидит хрен знает где от счетчика, но он круче по статусу...
- или поделить юзеров на две категории: администраторы и юзеры. Первые вносят изменения, вторые используют БД и готовят предложения по изменению... Например, юзер за 1000 км, готовит проект для изменения объекта, Администратор его рассматривает и принимает решение принять изменения полностью или в связи со своим статусом внести изменения (дополнения) и потом уже принять изменения...

Думаю если бы ТС выложил предметную область, хотя бы намеком, все было бы гораздо прозрачнее...
Трабл когда 1000 параметров и более правят все сразу, не лечится, его нужно устранять на уровне начальной логики
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39822915
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagда и не закрывает совсем...

Закрывает, закрывает...
vmagну получил я версию объекта после того как отдолбил 1000 параметров в течение двух часов и что?
- я должен понять и принять тот факт, что я два часа долбил зря, передо мной вроде как долбил крутой ?
- или я честно отработал день, а на утро увидел что вчера работал зря, мои труды потерли...
- а может у меня пусть 10 % но более правильная информация, которая ушла в никуда... ?

Не всё так страшно. Собственно, ручного ввода так немного. В основном, расчетные данные.
vmag Не хватает организационных мер:

Кто сказал?
vmag- например поделить параметры между регионами (ответственными) , ну кому например нужно вводить показания счетчиков, как ни тому, кто сейчас смотрит на этот счетчик, или Иванову, который сидит хрен знает где от счетчика, но он круче по статусу...
- или поделить юзеров на две категории: администраторы и юзеры. Первые вносят изменения, вторые используют БД и готовят предложения по изменению... Например, юзер за 1000 км, готовит проект для изменения объекта, Администратор его рассматривает и принимает решение принять изменения полностью или в связи со своим статусом внести изменения (дополнения) и потом уже принять изменения...

Всё приблизительно так и организовано, за некоторыми нюансами. Зачем я буду грузить вас организационными проблемами, если меня интересует техническая?
vmagДумаю если бы ТС выложил предметную область, хотя бы намеком, все было бы гораздо прозрачнее...

Изыскательские работы.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39822930
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мужики, я очень ценю то, что вы мне помогли найти устраивающее меня решение. Я даже уверен, что большинство из вас сможет придумать архитектуру базы данных эффективнее моей. Но для этого вам надо будет погрузиться на несколько месяцев в эту область, причём в постоянном контакте с опытными специалистами. Боюсь, это не реально, да и никому из вас не нужно.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823350
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Пока это однопользовательская БД, это нормально.
Но в многопользовательской среде 2 оператора могут корректировать один и то же объект (а время коррекции получается достаточно длительное) и каждый может перезаписать свою версию данных. Ситуация усугубляется тем, что пользователи могут быть разнесены на тысячи километров.
Вопрос: как синхронизировать такие коллизии?

Делаете в табличке объекта поле - признак блокировки (ID юзера, время или просто битик-взависимотсти от потребностей).
При открытии функционала редактирования объекта - ставите этот признак. Если очередной пользователь пытается открыть окно редактирования залоченного объекта- ругаться и говорить что сейчас другой работает и посылать.
После сохранения данных признак обнулять. Обойтись просто средствами СУБД можно (SELECT FOR UPDATE), но не сможете показать инфу- какой именно юзер заблокировал объект.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823462
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergueiДелаете в табличке объекта поле - признак блокировки (ID юзера, время или просто битик-взависимотсти от потребностей).
При открытии функционала редактирования объекта - ставите этот признак.
Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех.
Это простое, но неверное решение.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823473
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более того, скажу, лет 30 назад, я, по неопытности, реализовал подобное решение. И, несмотря на то, что юзеров было всего 5, и располагались одни на одном этаже, ну я и помучился!
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823511
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52SergueiДелаете в табличке объекта поле - признак блокировки (ID юзера, время или просто битик-взависимотсти от потребностей).
При открытии функционала редактирования объекта - ставите этот признак.
Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех.
Это простое, но неверное решение.
Это не очень простое и в определенных случаях самое разумное решение - но, конечно,
случай разрыва сессии (да и вообще долгого залочивания данных - у юзера может не отрубиться свет, а его может отогнать от компьютера и положить мордой в пол маски -шоу) обрабатывать надо.

NewBy52Более того, скажу, лет 30 назад, я, по неопытности, реализовал подобное решение.
30 лет назад (в 1989 году) Вы реализовывали многопользовательскую клиент-серверную систему? На какой платформе, если не секрет?
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823512
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самой большой проблемой было, когда юзер включал коррекцию, и уходил на обед, никого не предупредив.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823514
NewBy52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Btrieve фирмы Novell
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823688
experience
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Мужики, я очень ценю то, что вы мне помогли найти устраивающее меня решение. Я даже уверен, что большинство из вас сможет придумать архитектуру базы данных эффективнее моей. Но для этого вам надо будет погрузиться на несколько месяцев в эту область, причём в постоянном контакте с опытными специалистами. Боюсь, это не реально (*), да и никому из вас не нужно (**).

(*) Обсуждая как то электронную историю болезни и мед статистику в ответ на сложно, сложно, очень сложно с улыбкой ответил: вы так считаете потому что не видели электронного уголовного дела и криминальную статистику.
Это я про опытный, но в каждом конкретном случае свежий не замыленный взгляд.

(**) Лето, с работой затишье, а вдруг в качестве маленького суб подряда, ... ???

Почта в профиле, если вдруг...

p.s. И да NetWareSql(Надстройку на упомянутым вами Btrieve) в 92-94 гг прошлого века я официально пару раз покупал и в красных коробках Novell и в серых у Btrieve Technologies.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823696
experience
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин30 лет назад (в 1989 году) Вы реализовывали многопользовательскую клиент-серверную систему? На какой платформе, если не секрет?

Вы не поверите, но SQL не главное в клиент - сервер, вот например CICS + NATURAL + ADABAS вполне себе подойдёт.

Ну и проматерь протцов импортозамещения СУБД реляционного типа Рубин это вам не КАРАТ и РЕБУС какие то ))))

Знаком лично, в руках держал, зарплату получал и вполне себе клиент - серверно )))
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823722
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
experienceКот Матроскин30 лет назад (в 1989 году) Вы реализовывали многопользовательскую клиент-серверную систему? На какой платформе, если не секрет?

Вы не поверите, но SQL не главное в клиент - сервер, вот например CICS + NATURAL + ADABAS вполне себе подойдёт.

Лучше не надо гадать, во что я поверю или не поверю (хотя бы потому что буковок SQL в моей цитате нет)
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823741
experience
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

Автор темы упомянул Btrieve, история которого началась до покупкой Novell в районе 1987 года, так что 30 лет назад вполне себе были и клиенты и сервера и немножко пользователей в многопользовательском режиме.

Наши СМ-1425

под ДЕМОС рассыпались и было очень обидно терять INGRES(РУБИН), а на intel-386-e которые были доступны по деньгам что то UNIX-овое кусалось ценниками не гуманно и где то в районе 92-93 года попалась инфа по NetWare SQL на NetWare Runtime(дешевле существенно), т.е. с одним пользователем для традиционного доступа и много по SPX-SQL. И рантайм ещё и позволял грузить без дисковые 286 Dos машины клиенты.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823771
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех.
Это простое, но неверное решение.

Это сказал что зависает все? И почему оно зависает? Для пользователя который начал редактировать все чудесно работает (я обычно Id юзера ставлю в качестве битика). "залоченные" самим собой записи разрешается редактировать. Так что решение ещё какое рабочее.

А случай если есть непутевые юзеры, которые лочат объекты и уходят домой - должна быть админская функция разлочки. Можете аргументированно сказать что здесь не работает?
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823894
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergueiА случай если есть непутевые юзеры, которые лочат объекты и уходят домой - должна быть админская функция разлочки. Можете аргументированно сказать что здесь не работает?
Админов нет. Некому разлочкой заниматься. Предложите решение - при потере коннекта нужный битик сбрасывается в ноль.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39823985
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI
Админов нет. Некому разлочкой заниматься. Предложите решение - при потере коннекта нужный битик сбрасывается в ноль.

Ну у меня то в общем то так и есть. При прекращении сессии пользователя, эти все битики удаляются.
Без админов не обойтись в любом случае. Если пользователь залочил и сидит чай пьет... У меня админ рубит и все.
Вариант есть сделать ограничение по времени работы с объектом. Если больше положенного- тоже рубить этот битик. Все зависит от требований. Сделать можно все что угодно под потребности. И это не сложно.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39824102
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergueiТак что решение ещё какое рабочее.
Зачем?
Если 99% процентов СУБД (в том числе MS SQL) умеют команду SELECT FOR UPDATE
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39824123
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех.
Это простое, но неверное решение.
В качестве признака блокировки лично я использую audsid блокирующей сессии. Соответственно, нет никаких проблем с "выключили свет" и прочими страшилками.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39824316
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсли 99% процентов СУБД (в том числе MS SQL) умеют команду SELECT FOR UPDATE
Как с помощью этого механизма пользователю, который пытается открыть заблокированный объект показать, что его заблокировал такой то пользователь? (максимум вы покажете пользователя СУБД, но это ни о чем - он может быть один на всех.

Leonid KudryavtsevSergueiТак что решение ещё какое рабочее.
Зачем?
Если 99% процентов СУБД (в том числе MS SQL) умеют команду SELECT FOR UPDATE

В СУБД да есть такой механизм. Но от него можно огрести тоже проблем, когда будут залоченные записи и появится много желающих изменить эти записи.
Я не хотел такой жесткой блокировки, тем более что физически саму запись в таблице объекта я не меняю, а меняю таблицы связанные с ней. И при этом у меня нет Update никогда (исключительные случаи только), есть только insert и все это логгируется в БД. От select for update мы ушли давно. И преимуществ у select for update не вижу никаких.


softwarerNewBy52Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех.
Это простое, но неверное решение.
В качестве признака блокировки лично я использую audsid блокирующей сессии. Соответственно, нет никаких проблем с "выключили свет" и прочими страшилками.

Да -такой способ тоже имеет право на жизнь.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39824527
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) сначала выбрать СУБД, причем выбор должен учитывать знания тех, кто будет реализовывать эту программу (как и цену лицензий и кучу других факторов)
2) выбрать механизм реализации изложенной логики в данной конкретной СУБД

А сейчас автор занимается какой-то фигней.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856058
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52,
В БД у вас лежат некие объекты и связанные с ними результаты каких-то расчётов. Пользователь открывает объект, смотрит результаты расчётов и если не понравилось - меняет параметры расчёта (или объекта), пересчитывает и сохраняет.
Вариант: хранить все результаты расчётов вместе с параметрами для которых выполнялся расчёт.
При открытии объекта показывать пользователю список всех хранящихся результатов расчётов и дать пользователю возможность удалять ненужные.

Простой пример, расчёт массы топлива в баках сложной формы в зависимости от плотности топлива. Открываем объект "Бочка №12" и видим список:
2019-08-26мазут12.342019-08-26бензин11.002019-08-26мазут313.462019-02-25мазут214.002019-02-25мазут10.46
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856079
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>NewBy52, 3 июн 19, 11:43 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1313250&msg=21900247][21900247]
>… есть основная таблица r_objects … есть масса вспомогательных таблиц … Логика обработки этих данных требует при указании конкретного объекта загрузить их все в память …
<Поддерживаю Dimitry Sibiryakov. Вопрос касается "широких" сущностей, много атрибутов, разумно растащить их по разным таблицам.
Имею MS SQL и поступаю так:
1. Формирую целостную сущность из многих её частей (у меня всего две) хранимой процедурой.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
ALTER PROCEDURE [dbo].[au01_ОбъектыД_Sel] 
  @pk_Entity uniqueidentifier
AS
BEGIN
  SET NOCOUNT ON;
  SELECT TOP(1)
    -- ОбъектыД
    обд.pk_Entity,
    обд.tn_ЧастьОбъ,
    обд.str_Признак,
    обд.fk_ДокВкл,
    . . .
    обд.ts_Entity,

    -- Объекты
    об.pk_Entity,
    об.fk_Дог,
    об.fk_Гос,
    об.str_NameObj,
    об.str_НаимОбъ,
    . . .
    об.str_РегНом,
    об.str_AbbrObj,
    об.str_АббрОбъ,
    об.str_Del,
    об.ts_Entity
  FROM tbl01_ОбъектыД обд
       INNER JOIN tbl01_Документы дв ON обд.fk_ДокВкл=дв.pk_Entity
       INNER JOIN tbl01_Документы дл ON обд.fk_ДокЛик=дл.pk_Entity
       INNER JOIN tbl01_Документы дф ON обд.fk_ДокФакЛик=дл.pk_Entity,
    tbl01_Объекты об
	INNER JOIN tbl01_Государства го ON об.fk_Гос=го.pk_Entity
	INNER JOIN tbl01_Договоры до ON об.fk_Дог=до.pk_Entity 
  WHERE (обд.pk_Entity=@pk_Entity) and (обд.pk_Entity=об.pk_Entity);
END


2. Храню изменения сущности так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
ALTER PROCEDURE [dbo].[au01_ОбъектыД_Upd] 
    -- ОбъектыД
    @pk_EntityД	     uniqueidentifier,
    . . .    
    @ts_EntityД	     timestamp,
    
    -- Объекты
    @pk_Entity	     uniqueidentifier,
    . . .    
    @ts_Entity	     timestamp
AS
BEGIN
  DECLARE @ErrorVar INT;  
  SET NOCOUNT OFF
  BEGIN TRANSACTION
    UPDATE tbl01_ОбъектыД SET
      tn_ЧастьОбъ     = @tn_ЧастьОбъ,
      str_Признак     = @str_Признак,
      fk_ДокВкл       = @fk_ДокВкл,
      . . .
      str_Радиус      = @str_Радиус,
      fl_Площадь      = @fl_Площадь
	WHERE (pk_Entity=@pk_Entity) and (ts_Entity=@ts_Entity)
	SET @ErrorVar=@@error;
	IF (@ErrorVar <> 0) GOTO CORO; --Отменить транзакцию, если есть ошибки
	UPDATE tbl01_Объекты SET
      fk_Дог=@fk_Дог,
      . . .
      str_NameObj=@str_NameObj
	WHERE (pk_Entity=@pk_Entity) and (ts_Entity=@ts_Entity)
	SET @ErrorVar=@@error;

	CORO:
	IF (@ErrorVar <> 0) ROLLBACK; --Отменить транзакцию, если есть ошибки
	ELSE COMMIT;

  SELECT TOP(1)
    -- ОбъектыД
    обд.pk_Entity,
    . . .
    обд.ts_Entity,

    -- Объекты
    об.pk_Entity,
    . . .
    об.ts_Entity,
    @ErrorVar as rc
  FROM tbl01_ОбъектыД обд
    INNER JOIN tbl01_Документы дв ON обд.fk_ДокВкл=дв.pk_Entity
    INNER JOIN tbl01_Документы дл ON обд.fk_ДокЛик=дл.pk_Entity
    INNER JOIN tbl01_Документы дф ON обд.fk_ДокФакЛик=дл.pk_Entity,
    tbl01_Объекты об
	INNER JOIN tbl01_Государства го ON об.fk_Гос=го.pk_Entity
	INNER JOIN tbl01_Договоры до ON об.fk_Дог=до.pk_Entity 
  WHERE (обд.pk_Entity=@pk_Entity) and (обд.pk_Entity=об.pk_Entity);
END


При изменениях всегда получаю текущее состояние сущности в базе данных, если ок - свои изменения, иначе крайние изменения кого-то. Крайний параметр строки выборки @ErrorVar as rc - код ошибки

3. Относительно вопроса "грязного" чтения.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856080
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Но в многопользовательской среде 2 оператора могут корректировать один и то же объект (а время коррекции получается достаточно длительное) и каждый может перезаписать свою версию данных.

В вашем случае проблема пока еще в технологической плоскости, а не в технической. Сначала нужно решить а как все это должно работать, а потом искать техническое решение.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856083
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за нашествие некроспамеров?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856086
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЧто за нашествие некроспамеров?
Поясните, пожалуйста, что вы имели ввиду?
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856087
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На даты сообщений в топике посмотри.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856090
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНа даты сообщений в топике посмотри.
3 июн 19 не так уж и давно это было.

Просто для интереса: какой возраст записи для Вас не считается некроманским? 2 недели? )
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856093
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Serguei, сегодня, 14:56 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1313250&msg=21961467][21961467]
>… какой возраст записи …
<Да не суть, не берите в голову.
Ответа на поставленный вопрос так и нет. В моём варианте пользователь (клиентское приложение) после UPDATE имеет две версии сущности - сущность в базе данных и локальную сущность + код ошибки.
И как далее поступать? И если много изменений?
В настоящее время тупо отражаю сущность базы данных в локальную сущность, отображаю атрибуты в компонентах графического интерфейса и при необходимости сигнализирую об ошибке.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856109
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagда и не закрывает совсем...
ну получил я версию объекта после того как отдолбил 1000 параметров в течение двух часов и что?
- я должен понять и принять тот факт, что я два часа долбил зря, передо мной вроде как долбил крутой ?
- или я честно отработал день, а на утро увидел что вчера работал зря, мои труды потерли...
- а может у меня пусть 10 % но более правильная информация, которая ушла в никуда... ?
ИМХО тут блокировки и и всякие версии не сработают на все 100 ...
посмотрите, как в википедии сделано
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856128
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухпосмотрите, как в википедии сделаноА чо туда смотреть ?
Сабж необходимо реализовывать исходя из логики задачи.
Чтобы новые данные не пропадали - ввести понятие данных-кандидатов. Т.е. разновидность черновика. Если там есть непротиворечивые ценные данные - после верификации поместить их в продакшн-данные. Сразу или спустя некот. время - зависит только от Б/Л.
Это чисто бизнес-логический процесс, кот. можно реализовать хоть в DBF, хоть в тхт-файлах.

Непонятно, зачем постить сюда портянки кода и умно рассуждать о блокировках в БД.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856136
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoА чо туда смотреть ?
чтобы увидеть там всё то, что вы ниже описали
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856188
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинNewBy52Более того, скажу, лет 30 назад, я, по неопытности, реализовал подобное решение.
30 лет назад (в 1989 году) Вы реализовывали многопользовательскую клиент-серверную систему? На какой платформе, если не секрет?

А что смущает? Древние фокспро 2.6 и клиппер 5 (что ещё тогда модно было - Кларион какойто досовский емнип) вполне позволяли реализовывать совместный доступ к СУБД, представляющей собой набор файловых dbf и cdx файлов на общей сетевой шаре. Доводилось немного сопровождать такие решения, доставшиеся от старших товарищей. Вполне достойно работали по тем временам.

И кстати, кое в чём могли поспорить с современными графическими "интерфейсами", - темп ввода в экранные формы, несмотря на отсутствие мышки, был вцелом я бы сказалвыше. Т.к. выбор в поле ввода из справочника обычно вешали на F-клавиши, навигация по полям ввода - enter-ом (а не уродским Табом, который ну совсем в неудобном углу клавиатуры), выбор (выделение) позиций грида для массовой обработки - обычно пробелом или Ins (который сразу сдвигал курсор вниз на 1 запись). Никто эргономически-уродские решения с галочками, в которые нужно целиться мышью, махая клешнями то на мышь то на клавиатуру (и постраничным листанием гридов) не применял (и даже не снил себе в кошмарном сне :).
Так что всё норм было на рубеже 80-90ых. И даже встроенный интерпретатор с отладчиком прямо в откомпиленную софтину клиптцер по крайней мере умел прилепливать, очень помогало в отладке-трассировке тяжёлых случаев.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856367
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>NewBy52, 3 июн 19, 14:01 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1313250&msg=21900485][21900485]
>...Потому что многие записи расчетные…
<Мне не приходилось хранить 2000+ расчетных данных в "лоб". Имею дело с географическими объектами (сущностями) не точечного размера. Граница сущности задаётся вершинами многоугольника, кругом, эллипсом, сегментом. Число точек границы не более 20(пока). Для пробы не стал записывать параметры границы по точечно в дополнительную таблицу базы данных - сериализовал значения в byte[] и записал одним полем в запись базовой таблицы сущности. Думаю, что тоже самое можно сделать и с 2000+.
Если данных очень много, то аппроксимация сплайнами, но это уже другая задача.
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856452
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NewBy52Добрый день!
Есть однопользовательская БД, которая нормально спроектирована и работает на SQLite. Сейчас возникла задача сделать её многопользовательской на основе MS SQL Server или чём-то подобном.
Сложность заключается в следующем: есть основная таблица r_objects, где находятся некие объекты, упорядоченные в виде дерева. И есть масса вспомогательных таблиц, данные в которых принадлежат конкретному объекту.
Логика обработки этих данных требует при указании конкретного объекта загрузить их все в память, и там обрабатывать (корректировать, выполнять расчеты, представлять в виде графиков и т.д.)
После выполнения всех действий, если возникли изменения в данных (а они могут кардинально поменяться), необходимо записать данные обратно. Пока это однопользовательская БД, это нормально.
Но в многопользовательской среде 2 оператора могут корректировать один и то же объект (а время коррекции получается достаточно длительное) и каждый может перезаписать свою версию данных. Ситуация усугубляется тем, что пользователи могут быть разнесены на тысячи километров.
Вопрос: как синхронизировать такие коллизии?
Насколько это будет быстро работать? По сабжу я бы делал третью базу в которую бы хранил только изменения конкретных записей и конфликты, если они будут возникать на уровне строк. А что требуется получить на выходе-то?
...
Рейтинг: 0 / 0
Сложность при проектировании многопользовательской БД на основе однопользовательской.
    #39856514
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewBy52Добрый день!
Есть однопользовательская БД, которая нормально спроектирована и работает на SQLite. Сейчас возникла задача сделать её многопользовательской на основе MS SQL Server или чём-то подобном.
Сложность заключается в следующем: есть основная таблица r_objects, где находятся некие объекты, упорядоченные в виде дерева. И есть масса вспомогательных таблиц, данные в которых принадлежат конкретному объекту.
Логика обработки этих данных требует при указании конкретного объекта загрузить их все в память, и там обрабатывать (корректировать, выполнять расчеты, представлять в виде графиков и т.д.)
После выполнения всех действий, если возникли изменения в данных (а они могут кардинально поменяться), необходимо записать данные обратно. Пока это однопользовательская БД, это нормально.
Но в многопользовательской среде 2 оператора могут корректировать один и то же объект (а время коррекции получается достаточно длительное) и каждый может перезаписать свою версию данных. Ситуация усугубляется тем, что пользователи могут быть разнесены на тысячи километров.
Вопрос: как синхронизировать такие коллизии?
У меня есть что-то похожее.

Сделано следующим образом.
Дерево отображается так, как будто юзер работает один, не обращая внимания на других юзеров. Данные из базы в дерево грузятся не сразу, а через кэш. Кэш - небольшой, на пару экранов. Что это дает. При изменении данных одним из юзеров все заинтересованные получают извещение об изменении. Получив сообщение, клиентская часть сбрасывает кэш и выполняет команду перерисовать видимую часть дерева. В результате в кэш из базы подтягиваются свежие данные.
При этом, измененные элементы сразу отображаются. Удаленные элементы отображаются как пустые строки, поэтому на экране ничего не "прыгает". Добавленные элементы не видны, за исключением случая, когда они добавлены во вложенные свернутые уровни, при этом меняется иконка уровня (появляется "крестик" - значит, внутри что-то есть). А также подсвечивается кнопка "обновить", по которой можно заново перестроить дерево и увидеть все, что появилось.
Схема прижилась и работает уже больше 10 лет. Ничего не тормозит, но нагрузка не очень велика - до полутора сотни одновременно работающих юзеров.
Вот, на картинка синим подсвечена строчка, удаленная другим юзером.
...
Рейтинг: 0 / 0
64 сообщений из 64, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сложность при проектировании многопользовательской БД на основе однопользовательской.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]