Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.07.2011, 09:27
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Восклицание Упрощение взаимодействия с БД

Здравствуйте!
Есть крупный проект с СУБД Firebird. Неудобство в том, что слишком длинный и замороченный путь данных - что замедляет разработку и сильно усложняет поиск ошибок. Схема такая:

Firebird БД (data,tables,domains,generators,triggers,procedure s,etc) -> все выборки формируются прямо в СУБД при помощи Procedures -> из Delphi к БД обращение идёт из компоненты FIBPlus TFIBDataSet (InsertSQL,UpdateSQL,etc) -> затем сразу же передают данные в объект TDataSource -> затем в графических элементах форм назначается привязка к объектам TFIBDataSet или как правило TDataSource -> затем к каждой колонке визуальной таблицы нужно привязывать данные из выборки процедуры БД вручную указывая и настраивая каждое значение (DIRECTOR если в БД boolean то в интерфейсе это checkbox, если в БД DATE, то в интерфейсе тоже тип колонки Дата, итд)... ну и к тому же довольно много кода обработок и проверок в программе.

1. Цепочка длинная и много времени уходит между "созданием процедуры выборки в БД" и "привязкой всего в интерфейсе". Можно ли как-то упростить эту жуткую цепочку?
2. Ещё неприятность в том, что всё притормаживает на уже небольших выборках. Например если в БД 1000 записей, нужно отобрать из них 300 - длится это ~3секунды на новейших Core-i5... имхо это уже многовато и дальше будет только тормознее.

а) можно ли обойтись без компонент FIBPlus или DataSource? Что КОНКРЕТНО делают эти компоненты? Опишите механизм их работы подробно, пожалуйста.
б) бывают ли компоненты графического интерфейса которые самостоятельно напрямую взаимодействуют с СУБД без необходимости в TFIBDataSet или DataSource ?
в) или по крайней мере графические компоненты, которые при назначении некой группы данных (процедуры СУБД или TFIBDataSet или DataSource) способны самостоятельно разобрать какие будут данные и оптимизировать под них таблицу сразу назначив все переменные и типы полей?
г) один добрый человек с этого форума сделал пример взаимодействия Delphi-Firebird, но опять таки использовал некие нестандартные компоненты IBC, кто сможет сделать небольшой пример САМОГО КОРОТКОГО (простого, удобного) взаимодействия "визуальное редактируемое поле в Delphi <-> процедура в Firebird" с использованием желательно только СТАНДАРТНЫХ компонент Delphi XE.
Ответить с цитированием
  #2  
Старый 15.07.2011, 12:17
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
можно ли обойтись без компонент FIBPlus или DataSource? Что КОНКРЕТНО делают эти компоненты? Опишите механизм их работы подробно, пожалуйста.

http://www.devrace.com/ru/fibplus/download/ самому погуглить слабо

DataSource стандартный компонент, без него никак, а ФИБы можно заменить другими

Цитата:
бывают ли компоненты графического интерфейса которые самостоятельно напрямую взаимодействуют с СУБД без необходимости в TFIBDataSet или DataSource ?
С вашими познаниями я бы не лез вообще что либо менять, а притормаживать может ещё и из-за неправильной настройки сервера.

Последний раз редактировалось Viajero, 15.07.2011 в 12:21.
Ответить с цитированием
  #3  
Старый 15.07.2011, 18:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Убери процки для выборки данных - читай прямо запросом из таблиц.
2. Грамотное использование индексов тоже может убыстрить выборку данных.

3. Использование ограничений (constraint) БД поможет избежать написания большого кол-ва кода предв. проверки данных.
4. Архитектура доступа к данным в Delphi основана на многослойной схеме. Есть компоненты, обеспечивающие непосредственно работу с данными (в твоем случае FIB). Есть визуальные компоненты. Ну и некоторый промежуточный слой (TDataSource), обеспечиваюший связь первых со вторыми. У меня на настройку визуальных компонентов обычно уходит минут 10 (по типам данных и указание соотв полей). Так что учите мат.часть.
Ответить с цитированием
  #4  
Старый 16.07.2011, 18:47
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

1. Вот я тоже думаю нахрен они нужны? Попробую.
2. Проблема скорости не в СУБД-БД, а в программе - перекидывании данных из одного компонента-объекта к другому. Индексация в БД есть.
4. Ну так вот проще было бы вместо TFIBDatabase+TFIBDataSet+DataSource+InterfaceCompo nent использовать только два TFIBDatabase + InterfaceComponent (включающий в себя DataSource и частично TFIBDataSet). Смысла в DataSource вообще никакого.
Ответить с цитированием
  #5  
Старый 16.07.2011, 21:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

2&4. Нет там никакого перекидывания. Реально данные из БД попадают сразу в TFIBDataSet и потом он обменивается ими с интерфейсными компонентами. а остальные компоненты (TFIBDatabase, TDataSource и т.д) просто хранят необходимые линки и обеспечивают подписку на разного рода события.
Ответить с цитированием
  #6  
Старый 17.07.2011, 12:59
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Сложно с такой заморчоенной архитектурой сразу оптимизировать. Попозже видимо займусь. Спасибо за ответы!

PS И всё же было бы интересно посмотреть на пункт "г" - небольшой пример САМОГО КОРОТКОГО (простого, удобного) взаимодействия "визуальное редактируемое поле в Delphi <-> хранимая процедура в Firebird" с использованием желательно только СТАНДАРТНЫХ компонент Delphi XE.

Последний раз редактировалось delphicoding, 17.07.2011 в 13:02.
Ответить с цитированием
  #7  
Старый 17.07.2011, 16:55
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Ну кто вам сказал, что тормозят, именно компоненты, для тормозов может быть полно причин, неправильно настроенный сервер, несовпадение версий сервера и базы, несовпадение размера страницы базы и кластера системы, коряво сделанная база в конце концов. Например на скорость очень влияют лишние индексы, особенно низкоселективные.
Вообще есть хорошая книга:
Хелен Борри Firebird. руководство разработчика баз данных
http://www.brain2life.com/firebird/4...ika-baz-dannyh
там все эти вопросы описаны.
Компоненты тоже могут влиять, если неправильно настроены. FIB + на сегодня считаются самыми лучшими компонентами, разработаны они на основе FIB, на которой же сделаны и стандартные, только возможностей и настроек больше, так что не думаю, что замена что нибудь даст, кроме геморроя.
Документация и примеры есть в инсталяционнике, и у них на сайте
http://www.devrace.com/ru/fibplus/download/
Визуальные же компоненты напрямую взаимодействать с сервером не могут, только через БД компоненты либо сторониие либо стандартые, для этого и созданы эти цепочки. Можно, правда, не использовать TDataSet, а загонять данные через SQL предложения например через метод Execute компонента TDatabase (TFIBDatabase) компонента, непосредственно самому их конструировать, в определённых случаях, бывает чуть быстрее, хотя и тут компонент используется.

Последний раз редактировалось Viajero, 17.07.2011 в 16:58.
Ответить с цитированием
  #8  
Старый 18.07.2011, 09:52
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Цитата:
Сообщение от Viajero
а) Ну кто вам сказал, что тормозят, именно компоненты, для тормозов может быть полно причин, неправильно настроенный сервер, несовпадение версий сервера и базы, несовпадение размера страницы базы и кластера системы, коряво сделанная база в конце концов. Например на скорость очень влияют лишние индексы, особенно низкоселективные.

б) Визуальные же компоненты напрямую взаимодействать с сервером не могут, только через БД компоненты либо сторониие либо стандартые, для этого и созданы эти цепочки.
а) слишком малый размер базы, чтобы что-то тормозило со стороны СУБД, да и по структуре БД небольшая, особенно для Core-i5.
б) только связь обратная - из-за архитектуры созданных цепочек в Delphi, визуальные компоненты нихрена напрямую не могут... можно было и сократить убрав DataSet и DataSource расположив их функционал частично в визуальной компоненте, а частично в Database.

Спасибо за ссылки на книги!
Ответить с цитированием
  #9  
Старый 18.07.2011, 13:22
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Визуальные, конечно не могут, они предназначены, прежде всего, для отображения данных, а вынимать данные с сервера SQL запросами, создавать нужные структуры, буфера и тп , для этого предназначены компоненты доступа, причем есть как универсальные (bde, dbexpress), так и и специальные для конкретного сервера ibx, fibplus для interbase/firebird, есть и для других серверов которые намного эффективнее. Но FIB+ нужается в тонкой настройке для того, например, чтобы не генерировать лишние запросы (настройки обычно в виде свойств, но есть и глобальные).

Последний раз редактировалось Viajero, 18.07.2011 в 13:37.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter