|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
Суть проекта : - имеется БД в административном центре, в которую стекается информация с подчиненных подразделений. -Информация в подчиненных подразделениях так же хранится в БД, расположенных локально на машинах пользователей. - имеется клиентская программа, функционал которой заключается в поиске, отображении, редактировании, добавлении информации в БД, как в центральную, так и в БД подчиненных подразделений - выгрузка информации из БД подчиненных подразделений в центральную БД происходит в пакетном режиме, т.е. сетевое соединение отсутствует - среда реализации клиентской програмы C#, VS2008 Особенности и требования : - Объем базы в центральной БД - миллионы записей, ежемесячно пополняется на 5-10 тысяч записей (это информация, собранная со всех подчиненных подразделений) - очень сильно вероятны возможности изменений в структуре БД - добавление новых полей, новых справочников - Уровень пользователей в подчиненных подразделениях оставляет желать много лучшего, поэтому при выборе СУБД для подчиненных подразделениях необходимо учитывать следующие требования : простота установки, возможность запихать все в инсталятор, неконфликтность с другим ПО, антивирусами и всем-всем, что может вызвать какие-то ненужные вопросы у пользователя... Вопросы, по которым хотелось бы услышать советы и комментарии : 1) по организации структуры БД. Есть мысль уйти от плоских таблиц, отражающих напрямую суть представления и логической организации информации и реализовать гибкую структуру, которая позволит безболезненно конфигурировать и добавлять поля хранения информации. пример для лучшего понимания мысли : плоская таблица : (таблица ЧЕЛОВЕК) ------------------------------------- Фамилия |Имя | Отчество | возраст ------------------------------------- Иванов |Иван | Иванович | 25 Петров |Петр | Петрович | 15 Сидоров |Сидор | Сидорович | 29 Гибкая структура : (таблица ПАРАМЕТР) ----------------------------------- id | параметр | тип данных ----------------------------------- 1 | Фамилия | nvarchar 2 | Имя | nvarchar 3 | Отчество | nvarchar 4 | Возраст | int (таблица ДАННЫЕ) -------------------------------------------- id | id_param | nvarchar_value | int_value | -------------------------------------------- 25 | 1 | Иванов | | 26 | 2 | Иван | | 27 | 3 | иванович | | 28 | 4 | | 25 | 29 | 1 | Петров | | 30 | 2 | Петр | | 31 | 3 | Петрович | | 32 | 4 | | 15 | 33 | 1 | Сидоров | | 34 | 2 | Сидор | | 35 | 3 | Сидорович | | 36 | 4 | | 29 | Вопрос - как такая организация БД отразится на быстродействии? Если отразиться, то насколько принципиально? 2) Какую СУБД выбрать для БД административного центра. Варианты MSSQL 2005 и Oracle 3) Какую СУБД выбрать для БД подчиненных подразделений. (XML, SQL Expres, Access, ваш вариант) 4) какой механизм выгрузки данных из подчиненных подразделений в административный центр посоветуете (сериализованный DataSet, XML, сериализованная объектная модель, отражающая стуктуру БД, ваш вариант) 5) Какие механизмы посоветуете использовать при разработке клиентской части (Linq, ADO, ваш вариант) Буду очень благодарен за высказанные мысли ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 09:47 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
mrakk... Вопрос - как такая организация БД отразится на быстродействии? Если отразиться, то насколько принципиально? ... Есть у меня опыт работы с такими БД (Я надеюсь, что Вы упростили все-таки идею). Смотря как будет использоваться БД. Если основное её назначение просто накапливать данные, то не очень сильно это на производительности скажется. А вот доставать данные из такой БД это кошмар реальный. Т.е. если планируется, что кто-то в режиме реального времени будет эти данные просматривать, анализировать и т.п., то рассчитывайте на очень серьёзные, вплоть до полного провала, проблемы с производительностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 10:02 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
Мысли вслух: 1. Так называемая "гибкая" будет иметь большой провал с внешними ключами Кстати, а гибрида сделать не хочешь - т.е. все основа - в "плоских" таблицах, а редковстречающиеся (и новые) - в "гибких". Хотя опять же ключи нужно делать в "плоских" - тут никуда не денешься Также может быть смысл отслеживать структуру и обновлять в автомате... но это череповато :) 2.)3.) Postgree ? (MSSQL) Толку разбрасываться на две субд ради низкого уровня пользователей не вижу... Гораздо проще сконфигурить установщик / написать свой / сделать скрипты которые сделают именно нужные действия. 4)5) Зависит от выбранной субд... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 10:19 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
joker 79Кстати, а гибрида сделать не хочешь - т.е. все основа - в "плоских" таблицах, а редковстречающиеся (и новые) - в "гибких". Хотя опять же ключи нужно делать в "плоских" - тут никуда не денешься Гибрид сильно не поможет при селектах - все равно будет куча запросов к "аморфной" таблице. А если по этим дополнительным атрибутам еще и фильтры или что-то такое, то мы опять на том же месте в тот же час. Хотя, конечно, можно организовать и как-то по-другому. Типа основные всегда выбираются, а остальное в индивидуальном порядке по требованию. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 10:40 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
Есть у меня опыт работы с такими БД (Я надеюсь, что Вы упростили все-таки идею). Вы про таблицу в примере? Смотря как будет использоваться БД. Если основное её назначение просто накапливать данные, то не очень сильно это на производительности скажется. В том и дело, что с базой будут работать - доставать информацию, делать отчеты... А вот доставать данные из такой БД это кошмар реальный. Т.е. если планируется, что кто-то в режиме реального времени будет эти данные просматривать, анализировать и т.п., то рассчитывайте на очень серьёзные, вплоть до полного провала, проблемы с производительностью. Спасибо за высказанное мнение, но хотелось бы понять причину возможного провала. По идее там будет одна здоровеннейшая таблица на миллионы записей (грубо говоря - одну информационную сущность умножить на количество полей в плоских таблицах при том что информационных сущностей уже миллион с лишним). Но с другой стороны в этой таблице будет всего 4 поля по которым будет осуществляться поиск (дата/время, строка, число, указатель на справочники). и если эти всего четыре поля будут индексироваться, то может не так все плохо? или я все-таки ошибаюсь? PS опишу словами структуру базы - есть сущность как просто "поступившая информация" (одна таблица), она обладает своими постоянными реквизитами и уже к этой "поступевшей информации" привязано множество таблиц, уточняющих это информацию. И вот как раз это количество таблиц и их поля, могут меняться ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 10:47 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
mrakk, Причины... Так в двух словах и не опишу. Я, скорее, просто из опыта. Это увидеть надо. Давайте так, шажками, - вот у Вас есть эта полиморфная таблица. Вам надо из неё сделать select ну пусть, например, людей, у которых возраст находится в каком-то диапазоне. Как SQL будет выглядеть примерно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 10:56 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
Дополню на всякий случай. Результат этого селекта еще надо в каком-то приличном види, наверное, клиенту вернуть - в виде рекордсета что ли, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 11:02 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
mrakkПо идее там будет одна здоровеннейшая таблица на миллионы записей (грубо говоря - одну информационную сущность умножить на количество полей в плоских таблицах при том что информационных сущностей уже миллион с лишним). Но с другой стороны в этой таблице будет всего 4 поля по которым будет осуществляться поиск (дата/время, строка, число, указатель на справочники). и если эти всего четыре поля будут индексироваться, то может не так все плохо? или я все-таки ошибаюсь? Ошибаешься, это будет очень медленно. Но давай отставим в сторону производительность. Давай подумаем над целесообразностью. 1. Что ты этим хочешь добиться? Упростить себе автоматическую настройку БД? А чем это проще, скажем, вызова alter table, когда нужно? 2. А теперь подумай, как по этому строить запросы на выборку данных? 3. А сложные запросы, с объединением нескольких сущностей? Ты изобретаешь велосипед, через такую идею многие проходили. И все уже убедились, что она нежизнеспособна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 11:04 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
ДжекНепотрошитель2. А теперь подумай, как по этому строить запросы на выборку данных? 3. А сложные запросы, с объединением нескольких сущностей? Я первый, я первый - телепатия, понимашь. ДжекНепотрошительТы изобретаешь велосипед, через такую идею многие проходили. И все уже убедились, что она нежизнеспособна. Ну я бы не сказал, что она совсем нежизнеспособна, но круг задач, для которых эта идея (хотя и не в таком брутальном виде) подходит, очень узок. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 11:08 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
Hauermrakk, Причины... Так в двух словах и не опишу. Я, скорее, просто из опыта. Это увидеть надо. Давайте так, шажками, - вот у Вас есть эта полиморфная таблица. Вам надо из неё сделать select ну пусть, например, людей, у которых возраст находится в каком-то диапазоне. Как SQL будет выглядеть примерно? шаг 1: SELECT id_info FROM data_table WHERE int_data ляля AND id_param = 99 где id_info - идентификатор, по которому объеденена вся единица "поступившей информации" 99 - идентификатор параметра "возраст" список id_info c в datatable или еще в чем-нибудь поступает в клиент шаг 2: в клиенте тыкаем по нужной информации и получаем уже все что по ней есть : SELECT * from data_table WHERE id_info = ляляля ----- очень грубо говоря - я так себе примерно представлял... пока вы меня не расстроили ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 11:39 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
ДжекНепотрошитель Ты изобретаешь велосипед, через такую идею многие проходили. И все уже убедились, что она нежизнеспособна. вот ту не могу не согласиться с предыдущим оратором. Универсиализация она зачастую хороша в "лабораторных" условиях. но если очень хочется иметь "атрибуты про запас", то на мой взгляд в лучше добавить в плоские таблицы 10..20 наборов из трех полей (char, int, double) и разбираться с ними логикой в бизнес-слое. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 13:20 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
mrakkшаг 1: SELECT id_info FROM data_table WHERE int_data ляля AND id_param = 99 где id_info - идентификатор, по которому объеденена вся единица "поступившей информации" 99 - идентификатор параметра "возраст" список id_info c в datatable или еще в чем-нибудь поступает в клиент шаг 2: в клиенте тыкаем по нужной информации и получаем уже все что по ней есть : SELECT * from data_table WHERE id_info = ляляля ----- очень грубо говоря - я так себе примерно представлял... пока вы меня не расстроили ))))) Не, давайте чуть поточнее - вот жирный текст, нужная информация это id? Я как-то представлял себе пользовательский интерфейс это как список с хотя бы минимальным набором полей типа "ФИО", "дата рождения",... Даже, возможно, с сортировкой по этим полям. И давайте сразу дальше вопрос (следующий шажок) - у Вас (логически) ведь не одна сущность? И они, наверное, между собой связи имеют. Вот, например - адрес человека, ну или там место работы (отдел). Эти связи Вы как селектировать планируете? И сразу еще один вопрос - а что мы планируем делать с ссылочной целостностью? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 13:35 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
mrakk Вопросы, по которым хотелось бы услышать советы и комментарии : 1) по организации структуры БД. Есть мысль уйти от плоских таблиц, отражающих напрямую суть представления и логической организации информации и реализовать гибкую структуру, которая позволит безболезненно конфигурировать и добавлять поля хранения информации. Вопрос - как такая организация БД отразится на быстродействии? Если отразиться, то насколько принципиально? 2) Какую СУБД выбрать для БД административного центра. Варианты MSSQL 2005 и Oracle 3) Какую СУБД выбрать для БД подчиненных подразделений. (XML, SQL Expres, Access, ваш вариант) 4) какой механизм выгрузки данных из подчиненных подразделений в административный центр посоветуете (сериализованный DataSet, XML, сериализованная объектная модель, отражающая стуктуру БД, ваш вариант) 5) Какие механизмы посоветуете использовать при разработке клиентской части (Linq, ADO, ваш вариант) Буду очень благодарен за высказанные мысли 1. Смотря что Вы делать дальше планируете. На производительности-то оно конечно скажется, вот только насколько ... 2. ИМХО Oracle (чисто не очень я к MS отношусь, ни к чему себя искусствено ограничивать) 3. Если в подчиненных подразделениях вся работа будет производиться на одной машине - ИМХО и Firefox пойдет. Если клиент серверная архитектура все-таки планируется - PostgreSQL, ЛИНТЕР 4. В первоначальном видении и XML замечательный вариант 5. Пожалуй это зависит исключительно от разработчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 13:46 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
rodenmrakk3) Какую СУБД выбрать для БД подчиненных подразделений. (XML, SQL Expres, Access, ваш вариант) 3. Если в подчиненных подразделениях вся работа будет производиться на одной машине - ИМХО и Firefox пойдет. а какое отношение Firefox имеет к СУБД? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 13:58 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
iscrafmrodenпропущено... 3. Если в подчиненных подразделениях вся работа будет производиться на одной машине - ИМХО и Firefox пойдет. а какое отношение Firefox имеет к СУБД? Куда смотрю, то и пишу :D Извиняюсь! rodenFirefox Читать: Firebird ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 14:18 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
iscrafmrodenпропущено... 3. Если в подчиненных подразделениях вся работа будет производиться на одной машине - ИМХО и Firefox пойдет. а какое отношение Firefox имеет к СУБД? Это СУБД такая есть. Открой броузер Mozilla Firebird и зайди на сайт firefoxsql.org, посмотри ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 14:20 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
HauerНе, давайте чуть поточнее - вот жирный текст, нужная информация это id? Я как-то представлял себе пользовательский интерфейс это как список с хотя бы минимальным набором полей типа "ФИО", "дата рождения",... Даже, возможно, с сортировкой по этим полям. Ну да... как-то я сумбурно описал Если допустить, что главная (объединяющая другие) сущность это "человек" с атрибутами типа ФИО, год рождения, а все остальные сущности к ней привязаны - сведения о месте работы, сведения о домашнем адресе и т.д, то : 1) по атрибутам, по которым осуществляется поиск (а осуществляться он должен по любым из них) селектируем список идентификаторов главной сущности 2) селектируем уже по этим идентификаторам список атрибутов, необходимых для отображения в клиенте (для каждого из полученных идентификаторов в п.1) 3) по запросу из клиента - селектируем все остальные атрибуты всех сущностей, имеющиеся в нашей большей таблице для одного, выбранного в клиенте, идентификатора если при таком подходе все будет очень медленно - то со структурой вопрос снимается. будем делать плоскую структуру И давайте сразу дальше вопрос (следующий шажок) - у Вас (логически) ведь не одна сущность? И они, наверное, между собой связи имеют. Вот, например - адрес человека, ну или там место работы (отдел). Эти связи Вы как селектировать планируете? И сразу еще один вопрос - а что мы планируем делать с ссылочной целостностью?[/quot] наверное, все-таки убедили ))) и спасли от горькой ошибки ) спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 20:15 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
mrakkнаверное, все-таки убедили ))) и спасли от горькой ошибки ) спасибо Не за что. Для меня радость, если Вам есть польза от моих постов:-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 21:17 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
undefinedпочему хоть это говно всплывает???? Валерий, все эти мрп, срп и т.д. фигня. Смотри задачу- Иваныч хочет изготовить к хххх году изделие с параметрами какими то ннн штук, если одна штука будет обходится дддд р., ммм штук, если бббб р., если воще не плучится, то лучше изготовить макетов этой фигни ллл штук за ррр р. и пару настоящих, ну может с другими параметрами, конечно все это будет ясно по ходу и т.д. Задачи - 1. Найти ближайшего аналога. 2. Получить экспертную оценку неопределеенности 3. Оценить уровень имеющихся технологий. 4. Выррать технологии. 5. Оценить имеющихся изготовитлей. 6. Оценит рекомендовать инвестиции в реструктуризацию. 7. Предлагать места и сроки постройки новых изготовителей. 8. Построить ситуационые мультипроекты по всей этой фигне с учетом рисков. 9. Управлять всей этой фигней, постепенно убирая неопределенности. .... нн. Синхронизация пула мобильных процессоров, стационарных процессоров, материальных и финансовых потоков, сглаживание потоков и т.д. и т.п Во где есть разгуляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 22:45 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
mrakkнаверное, все-таки убедили ))) и спасли от горькой ошибки ) спасибо Во, блин опять из кеша что то грохнуло!! Ошибки никакой нет, сложновато просто.И ссылочная целосность там есть и все остальное. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2010, 22:47 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
> Смотри задачу Интересно. Знаете, как решать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2010, 00:58 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
> И ссылочная целосность там есть и все остальное. Поправка: может появиться ссылочная целостность. ;) Сахават, с правилами хранения правил за выходные ничего не придумалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2010, 01:01 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
guest_20040621, Пытаемся, что то решаем, что то в планах. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2010, 01:02 |
|
Прошу совета. Одна голова хорошо - много голов лучше
|
|||
---|---|---|---|
#18+
guest_20040621> И ссылочная целосность там есть и все остальное. Поправка: может появиться ссылочная целостность. ;) Сахават, с правилами хранения правил за выходные ничего не придумалось? Делаю. Прямо счас. Ну у меня получается просто. Пока что :) Каждое свойство типа может быть привязано к генератору значений. Генераторов одного типа много. Думаю будут генераторы разных типов, хотя для моих задач пока не актуально. Указывается формула для генерации "Управляющего сбросом параметра". При изменении совйств входящих в "Управляющего сбросом параметра" запускается нужный генератор и возвращается значение для свойства. Схема такова. Генератор( ИД, Наименование,Формула, Начальное значение, Шаг) ЗначениеГенератора(ИД, ГенераторИД, Управляющий параметр, Счетчик, Значение) По изменении "Управляющий параметр" "Счетчик" сбрасывается. Из значений "Управляющий параметр" и "Счетчик" получаем по "Формуле" "Значение" и возвращаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2010, 01:10 |
|
|
start [/forum/topic.php?fid=33&fpage=29&tid=1548161]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 154ms |
0 / 0 |