powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сложность при проектировании многопользовательской БД на основе однопользовательской.
25 сообщений из 64, страница 1 из 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
25 сообщений из 64, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Сложность при проектировании многопользовательской БД на основе однопользовательской.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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