|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
Здравствуйте ВСЕ... Необходима ваша помощь, как профессиональных разработчиков. Опишу задачу. Есть приложение (для разработки используется C#). Сначала выходит версия 1.0 с базовыми функциями. В дальнейшем (приложение должно быть довольно большое) планируется наращивать его функциональность. Т.е. будут выходить версии 1.1, 1.2, 1.3, ... 5.0, ... и т.д. С этим все ясно. И есть база данных (SQL Server Express). Соответственно для версии приложения 1.0 у нее базовая структура. С выходом новых версий структура будет меняться (добавляться таблицы, меняться поля таблиц, и т.д.). С этим вроде тож все ясно... Приложение будет довольно популярно (хотелось бы на это рассчитывать), т.е. количество клиентов не 1-5, а 50-100 (может и больше). Но вот собственно говоря и сам вопрос: Какую схему вы можете посоветовать по работе приложения с базой данных? Обрисую для наглядности, например, одну: Клиентам дается инсталяция приложения и MSSQL Express. При запуске (в данном случае первом) приложение проверяет есть ли база данных с нужным именем. Если нет, то создает ее и ее структуру, при этом прописывает версию БД (например, в таблице параметров). Далее при выходе обновления для приложения оно передается клиентам и при запуске проверяет версию БД (например, она хранится в таблице параметров) и если версия менее нужной проводит обновление внутренней структуры БД. Вот вроде бы и все... Хотелось бы услышать ваши схемы работы с БД, и на ваш взгляд "+" и "-" данного (описанного) подхода. Заранее спасибо, и прошу прощение за такой большой трактат... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 16:06 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
По обновлению структуры базы могу посоветовать создать на сервере, доступном по инету только кругу Ваших клиентов, базу со всеми обновлениями структуры от версии к версии в виде sql-операторов. При запуске приложение проверяет версию базы, и в случае чего лезет за последними обновлениями на Ваш сервер. Такой схемой убъете 2 зайцев: 1) Будете централизованно хранить обновления структуры 2) Сможете отключать от обновлений юзеров, которые не платят за поддержку ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 18:14 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
2 strizh: Для меня не понятно зачем так усложнять. ( Просто редко приходилось делать подобные задачи. ) Ведь если потребуется кому-либо запретить обновления, то это можно реализовать при попытке загрузки обновления для приложения, или во время установки обновления, или во время запуска самого приложения. А обновления структуры БД, в нашей модели работы, и так хранятся централизовано в приложении (т.е. на клиенте). по принципу: - если версия = 0 то выполнить: то-то-то - если версия = 1 то выполнить: то-то-то - если версия = 2 то выполнить: то-то-то И при данной модели абсолютно всеравно, что один клиент постоянно обновляется, а другой, раз в пол года. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 18:45 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
Хотя... если предположить что у нашего одного заказчика стоит в офисе 20 клиентов которые обращаются к БД, один может обновится и обновить структуру БД, а 19 остальных будут пытаться работать со старой структурой... мда... не хорошо получается... может у кого то есть опыт разработки подобного приложения??? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2007, 18:48 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
Ну различай клиентов-то. Одно дело - клиент в разрезе архитектуры "клиент-сервис", другое - в разрезе "покупатель-продавец". Обновления раздавай покупателям, в виде скриптов к БД и upgrade к клиентской части, по факту оплаты авторского сопровождения или как вы там это назовёте. не смешивай понятия-то ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 01:32 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
Спасибо за ответы. В разговоре немного поменялось представление самих данных. получается теперь так: есть, предположим, 50 заказчиков. У каждого стоит своя база данных (структура общая для всех заказчиков) и любое количество приложений-клиентов (работающих с этой базой), которые тоже одинаковые для всех. Просто если скрипты для изменения структуры базы давать клиентам, то они же задолбают звонками с вопросами: а это что? а это куда? а это как? Случай из жизни: Мы вот, например, обновления для нашей программы в zip архиве давали. Человек звонит нам и говорит: У меня на экране висит табличка в которой написано, что доступны новые обновления, что мне делать? я говорю: нажмите кнопку загрузить. он: а тут оно спрашивает куда его сохранить??? я: в любое место. он: и все??? (напоминаю, файл с расширением zip) я: нет, его нужно распаковать и запустить. После этого было еще два звонка от него (как распаковать, и как запустить). По этому сейчас пытаемся свести участие клиента к минимуму. А если ему скрипты дать... так этож просто будет для него взрыв мозгов, который может привести к разрушению всей системы (если он своими ручками его запустит.). Простите за отступление от темы. Но так все же... мы определились, что в приложения-клиентов встраивать скрипты глупо... Так какой же выход еще есть? Может присылать ему два приложения-обновления - первое новая версия приложения-клиент, а второе - программа, которая обновит структуру базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 10:26 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
Предлагаю поразмышлять на предмет создания самораспаковывающейся инсталяшки, которую надо только толкнуть и она автоматом обновит всё то, что необходимо и БД, и клиента ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 11:10 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
Тогда (с инсталяшкой все ясно), вернемся к приложению-клиенту. Он (приложение-клиент) после запуска должен опросить версию БД (предположим, из таблицы параметров) и если эта версия меньше необходимой - выдать пользователю сообщение, в котором будет сказано, что необходимо обновить приложение-клиент и завершит работу с программой. Или же предложит загрузить требуемое обновление с инета... Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 11:20 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
WStealth<...>Обрисую для наглядности, например, одну: Клиентам дается инсталяция приложения и MSSQL Express. При запуске (в данном случае первом) приложение проверяет есть ли база данных с нужным именем. Если нет, то создает ее и ее структуру, при этом прописывает версию БД (например, в таблице параметров). Далее при выходе обновления для приложения оно передается клиентам и при запуске проверяет версию БД (например, она хранится в таблице параметров) и если версия менее нужной проводит обновление внутренней структуры БД.<...> А где миграция данных? И что будет, если у клиента 1.0, а ему пришёл дистрибутив 3.0 ? И что, если с версии 3.0 нужно откатиться на 2.0? IMHO нужно, чтобы эникейщик клиента скопировал дистрибутив на сервер, дважды щёлкнул на setup.exe, выбрал версию, отметил галочкой "установка сервера БД", и ушёл. А тем временем дистрибутив сам бы: - понял, стоит ли СУБД, и если нет - жалобно попросил её дистрибутив, проверил, что ему подсунули то, что надо , сам установил и настроил - есть ли на ней БД нашей системы, и какой версии, надо ли обновлять и загружать - разослал пользователям в клиенты команду "Остановиться через 5 мин. и не волнует!" и по почте "Через 5 мин. сервер будет остановлен". - дождался завершения транзакция и остановил БД, - копировал старую БД, - удалил старую БД, - создал новую БД, - загрузил данные из копии старой БД в новую, - запустил БД, - сконфигурировал для работы с сервером БД и выложил в общий доступ дистрибутив клиента, - разослал пользователям в клиенты команду "Обновиться, и не волнует!" и по почте "Щёлкните на ссылку, чтобы обновить свой клиент, и можете работать". Вот такая утопия. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 11:23 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
По-моему рассуждения не на шутку углубились ! Так можно придти к тому, что такую систему вообще экономически невыгодно создавать. Начните с малого, а там видно будет......... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 14:27 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
LSV<...>Так можно придти к тому, что такую систему вообще экономически невыгодно создавать.<...> Согласен. Тут надо считать, что выгоднее - реализовать полноценную процедуру обновления сразу (если изначально правильно спроектировать - разработать не так и сложно) или всё время жизни системы держать в штате 5-50 (для 50 клиентов, в зависимости от частоты и срочности обновлений) человек от $1.5k. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 14:50 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
Всяко-разно нужно иметь скрипты для перехода от одной версии БД к другой. И не просто изменение структуры, а изменение данных - если поля меняются, делятся, переносятся Значит нужен отдельный update.exe. И причем такой, который умеет переходить через версии - от 1.1 к 3.2 за один раз. Отсюда получается, что при каждой выкладке новой версии нужно писать для нее переход от всех предыдущих. Задачка неслабая :) Или заставлять всех переходить на новую - но это тоже хреново. Хотя если изменение структуры БД будет только в плане добавления новых таблиц - тогда фигня :) -- Tygra's -- Мои фотогалереи тут и тут ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 16:00 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
tygraЗначит нужен отдельный update.exe. И причем такой, который умеет переходить через версии - от 1.1 к 3.2 за один раз. Отсюда получается, что при каждой выкладке новой версии нужно писать для нее переход от всех предыдущих. Можно это решить так: есть версия базы 1.0 выпускаем версию 2.0 соответственно делаем переход от 1.0 до 2.0 выпускаем версию 3.0 и опять же делаем переход от 2.0 до 3.0 Получается что update знает как переходить от 1.0 к 2.0, и как от 2.0 к 3.0. Т.е. те у кого стоит версия 2.0 переходят в 3.0 без проблем. Те же у кого стоит 1.0 запустив update переходят тоже в 3.0, но update выполняет сначала переход к 2.0, а затем в 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2007, 18:58 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
WStealth - так сделано в 1С, правда "в автомате" всё делать бывает невозможно и требуется ручной переход (Запустите обработку и укажите на какие суб-счета делать перенос со счёта тако-то). ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2007, 09:33 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
2 Petro123: Согласен, бывают моменты, когда в автомате не перейдешь. 2 ALL: Вот еще вопросик: Как целесообразно работать с базой??? Т.е. например, открывать соединение к серверу при старте приложения-клиента, и, например, ели пользователь хочет работать со справочником заказчиков, открывать соединение с таблицей заказчиков, а потом после окончания работы - закрывать соединение с таблицей, но до выхода из приложения-клиента оставлять открытое соединение с сервером... Или же подключаться к серверу и базе при открытии справочника, а после его закрытия - закрывать соединение и с базой и с сервером. И еще, например, при изменении данных заказчика открывается форма с полями данного заказчика и кнопочками ок и cancel. Так вот для ввода этих данных в поля лучше использовать обычные TextBox (и по нажатию ок добалвять или изменять данные в базе путем sql-запросов) или с привязкой к данным (изменять путем запросов ничего не нужно, а потом просто вызывать метод tableadapter.update)? Мое мнение - лучше работать через обычные TextBox и sql-запросы (т.к. интерфейс напрямую не привязан к данным, что например соответствует модели MVC (модель - контроллер - представление)). Хотелось бы услышать ваше мнение - как профи, которые на этом деле шляпу съели... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2007, 14:35 |
|
Неопределенность в выборе метода работы с БД
|
|||
---|---|---|---|
#18+
WStealth Т.е. например, открывать соединение к серверу при старте приложения-клиента, и, например, ели пользователь хочет работать со справочником заказчиков, открывать соединение с таблицей заказчиков, а потом после окончания работы - закрывать соединение с таблицей, но до выхода из приложения-клиента оставлять открытое соединение с сервером... Или же подключаться к серверу и базе при открытии справочника, а после его закрытия - закрывать соединение и с базой и с сервером. ============= всё равно. Слышал, что MS рекомендует недержать коннект без надобности. Но если открывать и закрывать на каждый чих, СУБД должно поддерживать пул коннектов для ускорения открытия соединения. Мое мнение - лучше работать через обычные TextBox и sql-запросы (т.к. интерфейс напрямую не привязан к данным, что например соответствует модели MVC (модель - контроллер - представление)). ======= IMHO данный вопрос, как и первый относится к КОНКРЕТНОМУ форуму-стилю - ЯП-программирования ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2007, 16:00 |
|
|
start [/forum/topic.php?fid=33&fpage=52&tid=1549070]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 449ms |
0 / 0 |