Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     17 Dec 2002  21:11:19
 To : Andrey Brindeew
 Subject : Re: Strong OO-programming & SQL databases
 -------------------------------------------------------------------------------- 
 
 Здравствуй, Andrey Brindeew.
 
 AB> Как в конструкторе создать несколько экземпляров класса Object::Good
 
 Если их создается несколько, то это уже не конструктор, а factory.
 
 AB> (соответственно и нужное кол-во инстансов Object::Good::Category)
 AB> оптимально с точки зрения базы? При создании объектов в цикле будет столько
 AB> SQL-запросов, сколько объектов создается, что не есть хорошо с точки зрения
 AB> производительности.
 
 Основная идея - factory отбирает нужные записи, а потом зовет конструкторы уже
 не на на основании базы, а на основании готовых данных.
 
 AB> Можно передавать условия WHERE, ORDER BY и т.п., но их как-то нужно
 AB> автоматически обрабатывать при вызове конструкторов дочерних объектов -
 AB> Object::Good::Category в моем примере).
 
 Так надо передавать не WHERE, а внятное с точки зрения твоей конструкции
 условие. Из которого в factory генерировать WHERE.
 
 AB> Если ограничиться только списком передаваемых Id объектов (суть primary
 AB> keys в таблицах), то приходим к изврату: сначала в скрипте нужно сделать
 AB> отбор этих самых Id, потом со списком Id нужно вызвать конструктор
 AB> Object::Good, который оттранслирует переданный список в WHERE id IN (".
 AB> join(",", @{ $id }) .")". И тут наступаем на большие грабли со стороны
 AB> многоуважаемой фирмы Sybase: WHERE может состоять максимум из 255 условий,
 AB> соединенных AND или OR (предложение IN оптимизируется внутри Sybase как id
 AB> = 1 OR ... OR id = k). Другие СУБД насчет этого специально не смотрел, но
 AB> на особые улучшения не надеюсь.
 
 Соответственно, покусать на части. Если подобное встречается часто, то сделать
 свой промежуточный слой, который будет бить список на кусочки, дергать базу
 несколько раз, суммировать результаты и возвращать просуммированное.
 
 Естественно, оный слой должен получать не готовый WHERE clause, а структуру,
 удобную для перловой обработки.
 
 -- 
 Artem Chuprina
 Communiware.net
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Strong OO-programming & SQL databases   Andrey Brindeew   17 Dec 2002 18:59:26 
 Re: Strong OO-programming & SQL databases   Artem Chuprina   17 Dec 2002 21:11:19 
 Re: Strong OO-programming & SQL databases   Andrey Brindeew   18 Dec 2002 15:05:16 
 Re: Strong OO-programming & SQL databases   Artem Chuprina   20 Dec 2002 21:09:21 
Архивное /ru.perl/144542521f1eb.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional