powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос о технологии "клиент-сервер" (+)
25 сообщений из 53, страница 1 из 3
Вопрос о технологии "клиент-сервер" (+)
    #33183661
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброе время суток.
Что-то ничего не нашел в сети по разработке приложений типа "клиент-сервер", если дадите ссылок, буду очень признателен.
А вопрос такой: есть некий документ, который реализуется в базе на нескольких таблицах (шапка документа, состав, дополнительные данные и т.д.)
Пользователь хочет в приложении либо открыть существующий документ для редактирования, либо создать новый. Как это реализовать в приложении:
1. Создавать похожую структуру таблиц, связей и т.д., но в памяти клиента-компьютера, т.е. структура документа будет реализована средставми языка программирования - массивы в памяти, структуры и т.д. Для того чтобы сохранить новый или отредактированный документ в базе - из памяти переносится в таблицы базы. Неудобство - чем сложнее документ, тем сложнее его реализовать в памяти: структуры, массивы, проверки и т.д. Но из плюсов - меньше нагрузка на сеть и сервер БД. Выше скорость работы, т.к. обрабатывать данные в памяти компьютера в любом случае быстрее, нежели в базе.
2. Открывать транзакцию в базе, пользователь будет работать с документом (редактировать содержимое, дополнять или удалять что-то). Все изменения фиксируются сразу же в базе. По завершению редактирования - или COMMIT, или ROLLBACK (смотря что выберет пользователь)
Наверное, правильнее все же второй вариант с точки зрения технологии. Но в реальности все так же?
Подскажите, пожалуйста, или дайте ссылок :)
Заранее большое спасибо
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183703
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вариант #1 - может быть, но больго геморойно.
Вариант #2 - никогда!
Вариант #3. Пользователь все делает на отвязаных рекордсетах, а после окончания редактирования быстренько все сохраняет
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183714
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сейчас именно вариант1. Т.е. структура документа в базе реализуется в памяти локального компьютера. Вся работа с документом - в памяти, т.е. все связи, зависимости, целостность данных. Но действительно, уж больно геморройно. Вопрос возник из-за того, что понадобилось очередное "усложнение" документа в памяти компьютера.
А почему вариант2 - никогда? Не зная все тонкостей (не хватает опыта разработки БД), удобнее было бы. Есть куча вопросов о поддержании целостности в данном случае.
Что Вы подразумеваете на отвязанных рекордсетах? Т.е. получить данные, хранить в рекордсетах, а потом - UpdateBatch всех рекордсетов?
Если так, то идея неплоха!!! Надо обдумать. Или я неправильно понял?
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183719
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиент на VC++. Сейчас все сделано не на рекордсетах, а, скажем так, на массивах, списках и т.д.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183744
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет никакой разницы. Даже лучше. Свобода.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183747
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовНет никакой разницы. Даже лучше. Свобода.
Между чем и чем Вы имеете в виду "нет разницы"? Между этими двумя вариантами?
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183752
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Под "отвязаным рекордсетом" обычно понимается рекордсет, изменения в котором никак не отражаются на данных из которых он получен.

Так как данные в базе хранятся в виде таблиц, то разумно хранить подготовленые к занесению в базу данные в двумерных массивах, однако зачем городить огород с объявлениями всяких массивов, механизмами их заполнения и пр., в то время как нужная структрура может быть получена автоматически.
Пишется что-то вроде select * from table where что-то=невозможное значение. Еще один плюс такого метода - если в таблице сделаны какие-то изменения, то не надо много переделывать код клиента.

Можно и UpdateBatch. Если это одна таблица. Если много, то лучше все собрать в одном месте и сделать в единой транзакции, открытой на сервере . Это ключевые слова. Именно поэтому не катит вариант №2. Никогда нельзя открывать транзакции на клиенте! Пользователь открыл транзакцию. Попил чаю. Пошел домой. Сломал ногу. Попал в больницу. А кто будет транзакцию закрывать и блокировки снимать? Админ? А он в это время в командировке в пивной.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183754
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, я примерно так и понял про рекордсеты. Буду получать нужные данные в рекордсет, менять уже в нем, но с отложенным обновлением. Если пользователь выберет - "сохранить документ", тогда UpdateBatch для рекордсета. Мне удобнее будет часть документа в приложении сделать на рекордсете, а часть все же на массивах и структурах. Ну да ладно, это уже все понятно.
Насчет транзакций, я и писал, что открывать в базе, а не на клиенте:
Kezya2. Открывать транзакцию в базе , пользователь будет работать с
Самое первое сообщение.
Cat2 - большое Вам спасибо, подсказали вариант, о котором я не знал !!!
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183791
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
UpdateBatch - плохое решение. Если надо занести данные в несколько таблиц, то этот

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

данных если одна из них не завершится. Этого можно избежать, открыв перед UpdateBatch

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

упадет клиентская машина между обновлением 17 и 18 таблицы!
Лучше использовать хранимую процедуру в которой в единой транзакции выполняются все

обновления всех таблиц или собирать на клиенте запрос примерно такого вида:

begin transaction

update table1 ...
update table2 ...
...
commit transaction
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183804
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в рекордсете будут данные из нескольких таблиц, то для полного обновления одного рекордсета с использованием ХП - придется в цикле вызывать ХП для каждой записи в рекордсете. Что тоже не очень хорошо в плане производительности. А иначе - я что-то не понимаю с обновлением :(
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33183993
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KezyaЕсли в рекордсете будут данные из нескольких таблиц, то для полного обновления одного рекордсета с использованием ХП - придется в цикле вызывать ХП для каждой записи в рекордсете. Что тоже не очень хорошо в плане производительности. А иначе - я что-то не понимаю с обновлением :(

Если ты обтетишь одну таблицу, то делаешь изменние и сразу коммит (или автокоммит в свойствах рекордсетов). Если обнавляешь сразу несколько таблиц, то это лучше делать в ХП. И старайся построить логику преложения так, чтобы ФИЗИЧЕСКИ не блокировать таблицу на долго.

Cat2
begin transaction

update table1 ...
update table2 ...
...
commit transaction
Это не самый лучший способ обнавления нескольких таблиц, так лучше на клиенте не делать.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33184133
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2
2. Никогда
C> нельзя открывать транзакции на клиенте! Пользователь открыл транзакцию.
C> Попил чаю. Пошел домой. Сломал ногу. Попал в больницу. А кто будет
C> транзакцию закрывать и блокировки снимать? Админ? А он в это время в
C> командировке в пивной.
Вы какой сервер имели ввиду? Например, в ib/fb (версионник) транзакция может быть
открыта только на клиенте. Читающая транзакция блокировок не выставляет, а
пишущую открывают лишь для сохранения.
В общем то я понял, что вы хотели сказать... просто утверждение не распространяется
на все сервера.

--
Dik76

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33184460
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bas Cat2
begin transaction

update table1 ...
update table2 ...
...
commit transaction
Это не самый лучший способ обнавления нескольких таблиц, так лучше на клиенте не делать.

Именно так и правильно делать, независимо идет ли прямой UPDATE или через ХП. Сохранение документа с перечнем это одна транзакция, либо сохранился весь либо откатилось все.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33184732
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsИменно так и правильно делать, независимо идет ли прямой UPDATE или через ХП. Сохранение документа с перечнем это одна транзакция, либо сохранился весь либо откатилось все.

Во-первых, я роллбека не увидел там, а, во-вторых, я имел ввиду, что на клиенте лучше не делать обнавление сразу в нескольких таблицах, это лучше делать в ХП. Я же не сказал, что это совсем не правильно, я сказал, что по возможности обнавление нескольких таблиц должно быть завернуто в ХП.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33184780
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Афтару
Мазохизм - неизлечимая болезнь ИТ-отрасли.
Массивы, списки, транзакции, отвязанные рекодсеты...УЖАС ! Зачем ? Ради чего ? Что было основанием для такого решения ?
Этож надо так усложнять себе жизнь. Эту тему тут сто раз перетёрли.
С таким подходом Вам не поможет НИОДИН совет. Вы утонете в сложностях и глюках раньше, чем соберёте хотя бы альфа-версию.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33184812
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам надо взять заточенный для работы с БД инструмент типа Powerbuilder/Delphi/C++Builder/FoxPro/Access и поскорее (я бы добавил, бегОм) упростить программку, пока не поздно. Не нужно тратить время и силы для создания механизмов, которые были оформлены стандартом "де-факто" еще 10 лет назад.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33184860
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVАфтару
Мазохизм - неизлечимая болезнь ИТ-отрасли.
Массивы, списки, транзакции, отвязанные рекодсеты...УЖАС ! Зачем ? Ради чего ? Что было основанием для такого решения ?
Этож надо так усложнять себе жизнь. Эту тему тут сто раз перетёрли.
С таким подходом Вам не поможет НИОДИН совет. Вы утонете в сложностях и глюках раньше, чем соберёте хотя бы альфа-версию.
Спорить не буду, знаний маловато. Я же попросил вначале - если есть ссылки, ткните носом. Если Вы подскажите варианты (решение, понятное дело, не надо), буду лично Вам очень признателен :)
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33184872
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TemplarВам надо взять заточенный для работы с БД инструмент типа Powerbuilder/Delphi/C++Builder/FoxPro/Access и поскорее (я бы добавил, бегОм) упростить программку, пока не поздно. Не нужно тратить время и силы для создания механизмов, которые были оформлены стандартом "де-факто" еще 10 лет назад. Клиент у меня на VC++, база MS SQL Server, доступ через ADO. Какие инструменты именно Вы имеете в виду? :(
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33185056
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kezya TemplarВам надо взять заточенный для работы с БД инструмент типа Powerbuilder/Delphi/C++Builder/FoxPro/Access и поскорее (я бы добавил, бегОм) упростить программку, пока не поздно. Не нужно тратить время и силы для создания механизмов, которые были оформлены стандартом "де-факто" еще 10 лет назад. Клиент у меня на VC++, база MS SQL Server, доступ через ADO. Какие инструменты именно Вы имеете в виду? :(

Так и спрашивайте в форуме по VC++ про доступ к БД как и что там, кто-что использует, да и почитать книжечку типа работа с БД из VC++, тут нет темы связанной с проектированием БД
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33185150
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сервер будет строго MSSQL, то рекомендую:
Delphi (с компонентами SDAC, EhLib, FastReport).
Сможете сотворить чудеса за очень короткое время.

По теме:
Используйте свой пункт 2, но без транзакций. Вааще без транзакций. Если нужно отказаться от документа, то просто удаляйте его. И всего делов. Боитесь неизбежных пропусков в нумерации ? Если это очень критично, то помечайте документ как "для удаления" и его можно будет потом заюзать повторно.
ХРАНИТЕ ВСЁ СРАЗУ В БАЗЕ. Никаких отложенных коммитов.

Вы наверно интербазы на MSSQL перешли ? Не правда ли ?

Ща наверно услышу: "Вах...Ты знал !" (с)
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33185538
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basТак и спрашивайте в форуме по VC++ про доступ к БД как и что там, кто-что использует, да и почитать книжечку типа работа с БД из VC++, тут нет темы связанной с проектированием БД Тема была про технологию клиент-сервер, согласен, раздел не самый подходящий, но куда бы поместили такую тему Вы?
У меня уже есть и доступ и база. Мне не нужны советы про то, как это работает. Нужен был совет относительно реализации документа и всего лишь. Templar сказал, что есть специализированные инструменты, но пока ничего про них не написал. Но очень хотелось бы почитать. Т.к. написал он в этой теме, то и спросил про инструмент я здесь же.
LSV же предложил другой вариант - без транзакций, но это все же другой вариант, а не другой инструмент!!! Так что Ваш последний пост вобщем-то не понял к чему вообще относится.

LSVЕсли сервер будет строго MSSQL, то рекомендую:
Delphi (с компонентами SDAC, EhLib, FastReport).
Сможете сотворить чудеса за очень короткое время.

По теме:
Используйте свой пункт 2, но без транзакций. Вааще без транзакций. Если нужно отказаться от документа, то просто удаляйте его. И всего делов. Боитесь неизбежных пропусков в нумерации ? Если это очень критично, то помечайте документ как "для удаления" и его можно будет потом заюзать повторно.
ХРАНИТЕ ВСЁ СРАЗУ В БАЗЕ. Никаких отложенных коммитов.
Вы наверно интербазы на MSSQL перешли ? Не правда ли ?
Ща наверно услышу: "Вах...Ты знал !" (с)
У меня VC++, учить Delphi нет желания. Вот насчет отсутствия коммитов и отложенных обновлений стоит подумать. Только мазохизма в моих действиях особого не вижу. Два разных подхода, ну и что. В Вашем - тоже есть минусы, можем обсудить :)
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33185700
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТолько мазохизма в моих действиях особого не вижу. Два разных подхода, ну и что.Вот это и плохо, что не видите. :)
Переусложнение чревато ужасными последствиями. Чем больше ненужных наворотов, тем меньше шансов проге стать нормальным продуктом. Это и есть самый главный минус, который может перечеркнуть ВСЁ.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33185706
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KezyaTemplar сказал, что есть специализированные инструменты, но пока ничего про них не написал. Но очень хотелось бы почитать. Т.к. написал он в этой теме, то и спросил про инструмент я здесь же.
...
У меня VC++, учить Delphi нет желания. Вот насчет отсутствия коммитов и отложенных обновлений стоит подумать.
Если есть желание изучать VC++ то конечно Delphi не более заточено под работу с БД чем VC++. А вот если есть желание написать программу работающую с БД, то я бы воспользовался советом Templar и искал языки изначально расчитанные на работу с БД. А спросить возможности можно на соседних форумах.
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33185726
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV авторТолько мазохизма в моих действиях особого не вижу. Два разных подхода, ну и что.Вот это и плохо, что не видите. :)
Переусложнение чревато ужасными последствиями. Чем больше ненужных наворотов, тем меньше шансов проге стать нормальным продуктом. Это и есть самый главный минус, который может перечеркнуть ВСЁ.
Насчет переусложнения - полностью согласен. Надо найти баланс между излишним переусложнением и обеспечением нормальной работоспособности
...
Рейтинг: 0 / 0
Вопрос о технологии "клиент-сервер" (+)
    #33185730
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KezyaВот насчет отсутствия коммитов и отложенных обновлений стоит подумать.
Вот мое мнение, прямая работа с таблицами допустима только если создается телефонный справочник работающий в однопользовательском режиме. Любая более менее сложная задача включает в себя отношения мастер-детейл, кучу расчетных ХП, и в этом случае транзакционная целостность жизненно необходима.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос о технологии "клиент-сервер" (+)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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