|
|
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab, ты прав, прибавляется время на выполнение отсортированного запроса по подчинённым объектам. Конечно, загрузка с отсроченной детализацией быстрее первую запись покажет, это пожалуй верно. А что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:23 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyА что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А? Конечно лучше. Только если пользователь дождётся, когда ему в гриде пощёлкать разрешат. Лучше (в разумных пределах) увеличить время ожидания реакции на один клик (пользователь и не заметит, что программа дёрнула БД), и быстро выполнить основной запрос, чем регулярно зависать на выполнении всего запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:34 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Вот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:41 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyВот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются. Сделай так, чтобы детали без задержки отображались иначе и твой мегазапрос будет работать очень долго. Задержку в 0.5 сек на клик пользователь не заметит. Задержка в 5 сек на все 10 записей будет слегка раздражать. На задержку 50 сек пользователь скажет, что программа не работает. Хотя выход и тут есть. Запусти фоновую нить, которая, пока пользователь втыкает на результат запроса, доберёт из БД детали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 23:18 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Скажем, на mssql можно было бы выполнить один запрос for xml explicit и получить в xml обьекты с вложенными коллекциями, а на клиенте только распарсить полученный xml. Не факт, что будет быстрее - но наверняка будет прозрачнее и универсальнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 04:53 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
У меня сделано так, в гриде лежат те поля по которым чаще всего пользователь ищет запись, и только они и загружаются из базы. При выборе записи все остальное подгружается - вполне быстро работает. Если появляются поля, которые тоже нужны в гриде - они туда добавляются. А поиск записи путем открытия каждой - это неправильный метод и если пользователь так делает - пусть ждет. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 07:41 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
В варианте, который я описал, в 99,99999% пользователю информация о деталировке не нужна.Это дополнительная опция.Если не доходить до маразма,как в случае с загрузкой по одному полю(интересно узнать какой размер пакетов у них использовался для передачи!), то в большинстве случаев пользователь не заметит отдельной загрузки. Кроме допустимого времени реакции, существует еще такое понятие, как надежность системы. Для всех любителей абстрактных рассуждений вопрос. Что может произойти в блокировочнике, если одновременно выполняются два запроса: первый на выборку,второй на апдейт по полю с некластерным индексом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 11:11 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
И тишина........Как быстро страсти улеглись.Ответ простой-мертвая блокировка.Думаю, когда выше ее вероятность любители показывать все и сразу сообразят сами.Заказчика больше устроит неторопливая система, чем не работающая совсем. Одно дело, когда Access применяется для работы с зоопарком из нескольких разнородных источников данных, и совсем другое, при работе нескольких сотен пользователей одновременно. Другой аспект-это разработка и дальнейшее применение объектов.Какой вариант вы выбирите, если их тоже будет несколько сотен:генерация в несколько кликов простых объектов с последующей их композицией или ручное конструирование монстров с вылизыванием микросекунд? Объект должен содержать и выполнять только то для чего он предназначен. В шаблононе MVP, который мы применяем,рекомендуется использовать раздельные объекты, что позволяет конструировать интерфейс из готовых блоков, выделить отдельно логику бизнес процессов, автоматизировать тестирование и прочие. Пример. Компании, отделы, физ.лица имеют много общих сущностей-адреса, контакты, телекомы, комментарии и тд.В каких случаях нужна вся эта информация сразу? Посмотрите msdn в разделе патерны.Какие там рекомендации на основе решений, которые применяются не один год. Оптимизация нужна только в очень крайних случаях.Если будут провалены сроки никого не будет интересовать маленький кусок, где все оптимизировано до блеска. PS. В Axapte еще более "идиотский" способ-открытие курсора с чтением по одной записи.Вариант не очень идеальный, но это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 19:20 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ты сейчас с кем разговариваешь? :) В теме был поднят вопрос, как алгоритмически выбрать из базы коллекцию объектов, каждый из которых в свою очередь содержит ("ссылается на") коллекцию объектов. А зачем это вообще нужно, и можно ли так делать -- это уже другой вопрос. К сожалению, ничего нового я для себя из темы не узнал, что кажется мне очень странным. Неужели никто не может прояснить работу того же гибернейта в таких случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 19:41 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Правильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 20:46 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVaПравильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все. Объясни другим. Я делал ORM для решения определённой задачи и меня интересуют другие решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 21:25 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
2Fuzzy Напрасно не слушаешь людей, которые дают тебе хорошие советы. SeVa не зря говорил тебе про CSLA. Книга, которая описывает эту библиотеку, содержит помимо прочего очень неплохой материал по проектированию бизнес объектов (приложения вцелом). И хотя и не даст тебе готовый ответ на твой вопрос, но поможет тебе избежать таких вопросов в будущем ("Лучше полчаса потерять, зато, потом за 5 мин. долететь."). А пытаться заменить нехватку общих навыков проектирования/программирования (и, насколько я могу судить, незнание принципов работы с БД) такими вопросами (да ещё потом говорить, что ничего нового не узнал из ответов) пустая трата времени (причем, не твоего). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 04:43 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, Oleg Martynenko -- я с вас тащусь просто. Вы нереально крутые. Вы напоминаете мне мастера кун-фу, который на вопрос ученика "как мне освободиться от такого-то захвата" отвечает "главное -- гармония" :)) Не обижайтесь насчёт "ничего нового" -- просто о том, что если есть возможность чего-то не делать, то лучше этого не делать, я знаю и сам. Спасибо за то, что напомнили мне об этом. Вопрос был о другом. Да, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос. Поэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:12 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyДа, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос. А зря..., прочитайте хотябы Фаулера "Архитектура корпоративных программных приложений". FuzzyПоэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо Вот она благодарность за хорошие советы... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 11:18 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
2 Fuzzy Отвечая на вопрос, кратко опишу один из вариантов. По Фаулеру, может существовать глобальная кеш-коллекция объектов или кеш-коллекция на каждый тип/класс. При запросе объекта по ID объект первоначально сканирует в поисках кеш-коллекцию. Если объект не найден в коллекции он создается и загружается в коллекцию из базы. Поисковые запросы в минимальном варианте возвращают список ID, далее происходит опять таки поиск по ID в кеш-коллекции с последующей загрузкой ненайденных из БД. Вложенные(дочерние) коллекции (строки документа) получают техникой Lazy Load. Хочется без Lazy Load - получаем весь граф объекта в виде xml с помощью for xml запроса и десериализуем в объект, но, имхо, это трудоемко и создает множества проблем в "гибком проектировании". Для решения вопросов с параллельными изменениями используется метка последнего изменения (например, поле timestap) и собственная реализация оптимистической блокировки в среднем звене/клиенте. ... Что еще посмотреть кроме Фаулера и Лотки "C# Bussiness Object": Bussiness Logic Toolkit. Это не полноценное ORM-средство, а очень достойный MappingHelper, имхо, на текущий момент лучший. Как раз подходит когда весь CRUD пишется собственноручно и не используется генерацию sql-запросов налету (как в Hibernate, например). http://bltoolkit.net/ http://www.rsdn.ru/article/files/libs/RsdnFrameworkData.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 11:38 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман Дынник но, имхо, это трудоемко и создает множества проблем в "гибком проектировании". А почему, кстати? Обоснуйте плз. Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос, получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет. И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 11:54 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман Дынник 2 Fuzzy Отвечая на вопрос, кратко опишу один из вариантов. ...поскипано... Хочется без Lazy Load - получаем весь граф объекта в виде xml с помощью for xml запроса и десериализуем в объект ...поскипано... Спасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 12:03 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинА почему, кстати? Обоснуйте плз. Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос, получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет. И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента. Запросы for xml шлепаются как блины только for xml auto. Для десериализации xml в объект чаще требуется for xml explicit или собственная десериализация на стороне клиента, а это уже не как блины (что собственная сериализация, что for xml explicit). Потом, модель от цикла к циклу разработки имеет свойтво меняться - расширяться, дополняться... что неизбежно вызовет переделку либо сериализации, либо for xml explicit для измененных сущностей, в отличии от простых sp-CRUD, которые намного легче автоматом генерится по модели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 12:07 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyСпасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз? В таком случае, решение может быть таким: Возвращайте несколько выборок (select-ов) из хп, заполняйте таблицы DataSet-а на основе этих выборок, связывайте эти DataTable relation-ми. Далее смотрите сами - использование DataSet/типизированного DataSet как бизнес-объекта, либо DataSet.GetXml() и десериализация в бизнес-объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 12:14 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ, Роман Дынник, правда, я с сишарпом не очень-то знаком. Мне бы лучше примеры на java. Но, тем не менее, правильно ли я понял: 1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте. 2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте. 3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 14:46 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyНо, тем не менее, правильно ли я понял: 1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте. 2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте. 3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом. Так? Исходя из ваших условий, примерно так. Я проецировал ситуацию для .net-а. Исходя из используемых технологий можно найти другие, более оптимальные решения. Например, в oracle - можно xml-запросы выполнять, если брать oracle+java - можно java stored procedure использовать и J-SQL и на стороне БД-сервера POJO-объект создавать и возвращать. Какие средства и технологии вы используете? P/S/ Но все же лучше Lazy Load загрузка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:10 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:19 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyРоман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)? Ничем. Единственное, если получится сразу легко получить xml нужного для десериализации вида, то автоматически пропадает необходимость реализации маппинга xml->to object или record->to object. Правда модель активной записи (опять же по Фаулеру), которую вы описали, будет всегда каждый раз при необходимости повторного использовании объекта мапить запись на объект, что может весьма сказаться на производительности в случае некоторых алгоритмов (например, длительные расчеты, использующие объекты как источник информации). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:49 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Похоже, у Фаулера действительно полезная книга. Скажите, пожалуйста, в ней жёстко си-шарп рассматривается, или в общем? А есть где-нибудь на сети, чтоб скачать? Роман, а зачем я должен буду повторно мапить записи на объекты? Можно пример, чтоб я понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 16:08 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34273608&tid=1544757]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
199ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 512ms |

| 0 / 0 |
