|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
Если MS SQL, то рассмотрите applock ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 15:45 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
фейспалм, блин.. Причем тут блокировки ?????? Речь про организацию работы с данными. Она изначально ущербна. Видимо есть некие параметры, кот. нужны в разных местах. И юзеры их зачитывают и потом меняют на свое усмотрение. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 15:59 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
L_argoВидимо есть некие параметры, кот. нужны в разных местах. И юзеры их зачитывают и потом меняют на свое усмотрение. Нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 16:11 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
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. Модно, молодежно и куча лулзов. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 17:22 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
NewBy52А вот схема, предложенная Дмитрием, проблему закрывает. Собственно, я уже получил ответ на вопрос. да и не закрывает совсем... ну получил я версию объекта после того как отдолбил 1000 параметров в течение двух часов и что? - я должен понять и принять тот факт, что я два часа долбил зря, передо мной вроде как долбил крутой ? - или я честно отработал день, а на утро увидел что вчера работал зря, мои труды потерли... - а может у меня пусть 10 % но более правильная информация, которая ушла в никуда... ? ИМХО тут блокировки и и всякие версии не сработают на все 100 ... Не хватает организационных мер: - например поделить параметры между регионами (ответственными) , ну кому например нужно вводить показания счетчиков, как ни тому, кто сейчас смотрит на этот счетчик, или Иванову, который сидит хрен знает где от счетчика, но он круче по статусу... - или поделить юзеров на две категории: администраторы и юзеры. Первые вносят изменения, вторые используют БД и готовят предложения по изменению... Например, юзер за 1000 км, готовит проект для изменения объекта, Администратор его рассматривает и принимает решение принять изменения полностью или в связи со своим статусом внести изменения (дополнения) и потом уже принять изменения... Думаю если бы ТС выложил предметную область, хотя бы намеком, все было бы гораздо прозрачнее... Трабл когда 1000 параметров и более правят все сразу, не лечится, его нужно устранять на уровне начальной логики ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 14:20 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
vmagда и не закрывает совсем... Закрывает, закрывает... vmagну получил я версию объекта после того как отдолбил 1000 параметров в течение двух часов и что? - я должен понять и принять тот факт, что я два часа долбил зря, передо мной вроде как долбил крутой ? - или я честно отработал день, а на утро увидел что вчера работал зря, мои труды потерли... - а может у меня пусть 10 % но более правильная информация, которая ушла в никуда... ? Не всё так страшно. Собственно, ручного ввода так немного. В основном, расчетные данные. vmag Не хватает организационных мер: Кто сказал? vmag- например поделить параметры между регионами (ответственными) , ну кому например нужно вводить показания счетчиков, как ни тому, кто сейчас смотрит на этот счетчик, или Иванову, который сидит хрен знает где от счетчика, но он круче по статусу... - или поделить юзеров на две категории: администраторы и юзеры. Первые вносят изменения, вторые используют БД и готовят предложения по изменению... Например, юзер за 1000 км, готовит проект для изменения объекта, Администратор его рассматривает и принимает решение принять изменения полностью или в связи со своим статусом внести изменения (дополнения) и потом уже принять изменения... Всё приблизительно так и организовано, за некоторыми нюансами. Зачем я буду грузить вас организационными проблемами, если меня интересует техническая? vmagДумаю если бы ТС выложил предметную область, хотя бы намеком, все было бы гораздо прозрачнее... Изыскательские работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 15:46 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
Мужики, я очень ценю то, что вы мне помогли найти устраивающее меня решение. Я даже уверен, что большинство из вас сможет придумать архитектуру базы данных эффективнее моей. Но для этого вам надо будет погрузиться на несколько месяцев в эту область, причём в постоянном контакте с опытными специалистами. Боюсь, это не реально, да и никому из вас не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 16:04 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
NewBy52Пока это однопользовательская БД, это нормально. Но в многопользовательской среде 2 оператора могут корректировать один и то же объект (а время коррекции получается достаточно длительное) и каждый может перезаписать свою версию данных. Ситуация усугубляется тем, что пользователи могут быть разнесены на тысячи километров. Вопрос: как синхронизировать такие коллизии? Делаете в табличке объекта поле - признак блокировки (ID юзера, время или просто битик-взависимотсти от потребностей). При открытии функционала редактирования объекта - ставите этот признак. Если очередной пользователь пытается открыть окно редактирования залоченного объекта- ругаться и говорить что сейчас другой работает и посылать. После сохранения данных признак обнулять. Обойтись просто средствами СУБД можно (SELECT FOR UPDATE), но не сможете показать инфу- какой именно юзер заблокировал объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 12:02 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
SergueiДелаете в табличке объекта поле - признак блокировки (ID юзера, время или просто битик-взависимотсти от потребностей). При открытии функционала редактирования объекта - ставите этот признак. Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех. Это простое, но неверное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:16 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
Более того, скажу, лет 30 назад, я, по неопытности, реализовал подобное решение. И, несмотря на то, что юзеров было всего 5, и располагались одни на одном этаже, ну я и помучился! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:20 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
NewBy52SergueiДелаете в табличке объекта поле - признак блокировки (ID юзера, время или просто битик-взависимотсти от потребностей). При открытии функционала редактирования объекта - ставите этот признак. Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех. Это простое, но неверное решение. Это не очень простое и в определенных случаях самое разумное решение - но, конечно, случай разрыва сессии (да и вообще долгого залочивания данных - у юзера может не отрубиться свет, а его может отогнать от компьютера и положить мордой в пол маски -шоу) обрабатывать надо. NewBy52Более того, скажу, лет 30 назад, я, по неопытности, реализовал подобное решение. 30 лет назад (в 1989 году) Вы реализовывали многопользовательскую клиент-серверную систему? На какой платформе, если не секрет? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:56 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
Самой большой проблемой было, когда юзер включал коррекцию, и уходил на обед, никого не предупредив. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:57 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
Btrieve фирмы Novell ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 14:58 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
NewBy52Мужики, я очень ценю то, что вы мне помогли найти устраивающее меня решение. Я даже уверен, что большинство из вас сможет придумать архитектуру базы данных эффективнее моей. Но для этого вам надо будет погрузиться на несколько месяцев в эту область, причём в постоянном контакте с опытными специалистами. Боюсь, это не реально (*), да и никому из вас не нужно (**). (*) Обсуждая как то электронную историю болезни и мед статистику в ответ на сложно, сложно, очень сложно с улыбкой ответил: вы так считаете потому что не видели электронного уголовного дела и криминальную статистику. Это я про опытный, но в каждом конкретном случае свежий не замыленный взгляд. (**) Лето, с работой затишье, а вдруг в качестве маленького суб подряда, ... ??? Почта в профиле, если вдруг... p.s. И да NetWareSql(Надстройку на упомянутым вами Btrieve) в 92-94 гг прошлого века я официально пару раз покупал и в красных коробках Novell и в серых у Btrieve Technologies. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 18:49 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
Кот Матроскин30 лет назад (в 1989 году) Вы реализовывали многопользовательскую клиент-серверную систему? На какой платформе, если не секрет? Вы не поверите, но SQL не главное в клиент - сервер, вот например CICS + NATURAL + ADABAS вполне себе подойдёт. Ну и проматерь протцов импортозамещения СУБД реляционного типа Рубин это вам не КАРАТ и РЕБУС какие то )))) Знаком лично, в руках держал, зарплату получал и вполне себе клиент - серверно ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 19:18 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
experienceКот Матроскин30 лет назад (в 1989 году) Вы реализовывали многопользовательскую клиент-серверную систему? На какой платформе, если не секрет? Вы не поверите, но SQL не главное в клиент - сервер, вот например CICS + NATURAL + ADABAS вполне себе подойдёт. Лучше не надо гадать, во что я поверю или не поверю (хотя бы потому что буковок SQL в моей цитате нет) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 20:27 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
Кот Матроскин, Автор темы упомянул Btrieve, история которого началась до покупкой Novell в районе 1987 года, так что 30 лет назад вполне себе были и клиенты и сервера и немножко пользователей в многопользовательском режиме. Наши СМ-1425 под ДЕМОС рассыпались и было очень обидно терять INGRES(РУБИН), а на intel-386-e которые были доступны по деньгам что то UNIX-овое кусалось ценниками не гуманно и где то в районе 92-93 года попалась инфа по NetWare SQL на NetWare Runtime(дешевле существенно), т.е. с одним пользователем для традиционного доступа и много по SPX-SQL. И рантайм ещё и позволял грузить без дисковые 286 Dos машины клиенты. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 21:11 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
NewBy52Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех. Это простое, но неверное решение. Это сказал что зависает все? И почему оно зависает? Для пользователя который начал редактировать все чудесно работает (я обычно Id юзера ставлю в качестве битика). "залоченные" самим собой записи разрешается редактировать. Так что решение ещё какое рабочее. А случай если есть непутевые юзеры, которые лочат объекты и уходят домой - должна быть админская функция разлочки. Можете аргументированно сказать что здесь не работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 22:26 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
SergueiА случай если есть непутевые юзеры, которые лочат объекты и уходят домой - должна быть админская функция разлочки. Можете аргументированно сказать что здесь не работает? Админов нет. Некому разлочкой заниматься. Предложите решение - при потере коннекта нужный битик сбрасывается в ноль. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 10:44 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
KreatorXXI Админов нет. Некому разлочкой заниматься. Предложите решение - при потере коннекта нужный битик сбрасывается в ноль. Ну у меня то в общем то так и есть. При прекращении сессии пользователя, эти все битики удаляются. Без админов не обойтись в любом случае. Если пользователь залочил и сидит чай пьет... У меня админ рубит и все. Вариант есть сделать ограничение по времени работы с объектом. Если больше положенного- тоже рубить этот битик. Все зависит от требований. Сделать можно все что угодно под потребности. И это не сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 12:42 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
SergueiТак что решение ещё какое рабочее. Зачем? Если 99% процентов СУБД (в том числе MS SQL) умеют команду SELECT FOR UPDATE ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 15:11 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
NewBy52Ну да, и в это время у вас вырубается свет, и всё повисает. Для всех. Это простое, но неверное решение. В качестве признака блокировки лично я использую audsid блокирующей сессии. Соответственно, нет никаких проблем с "выключили свет" и прочими страшилками. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 15:40 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
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 блокирующей сессии. Соответственно, нет никаких проблем с "выключили свет" и прочими страшилками. Да -такой способ тоже имеет право на жизнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 21:06 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
1) сначала выбрать СУБД, причем выбор должен учитывать знания тех, кто будет реализовывать эту программу (как и цену лицензий и кучу других факторов) 2) выбрать механизм реализации изложенной логики в данной конкретной СУБД А сейчас автор занимается какой-то фигней. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 01:57 |
|
Сложность при проектировании многопользовательской БД на основе однопользовательской.
|
|||
---|---|---|---|
#18+
NewBy52, В БД у вас лежат некие объекты и связанные с ними результаты каких-то расчётов. Пользователь открывает объект, смотрит результаты расчётов и если не понравилось - меняет параметры расчёта (или объекта), пересчитывает и сохраняет. Вариант: хранить все результаты расчётов вместе с параметрами для которых выполнялся расчёт. При открытии объекта показывать пользователю список всех хранящихся результатов расчётов и дать пользователю возможность удалять ненужные. Простой пример, расчёт массы топлива в баках сложной формы в зависимости от плотности топлива. Открываем объект "Бочка №12" и видим список: 2019-08-26мазут12.342019-08-26бензин11.002019-08-26мазут313.462019-02-25мазут214.002019-02-25мазут10.46 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2019, 04:13 |
|
|
start [/forum/topic.php?fid=32&msg=39824123&tid=1539914]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 235ms |
total: | 500ms |
0 / 0 |