powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как выбрать из базы коллекцию объектов?
25 сообщений из 90, страница 3 из 4
Как выбрать из базы коллекцию объектов?
    #34273608
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, ты прав, прибавляется время на выполнение отсортированного запроса по подчинённым объектам. Конечно, загрузка с отсроченной детализацией быстрее первую запись покажет, это пожалуй верно.
А что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273618
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyА что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А?

Конечно лучше. Только если пользователь дождётся, когда ему в гриде пощёлкать разрешат.

Лучше (в разумных пределах) увеличить время ожидания реакции на один клик (пользователь и не заметит, что программа дёрнула БД), и быстро выполнить основной запрос, чем регулярно зависать на выполнении всего запроса.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273625
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273666
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyВот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются.

Сделай так, чтобы детали без задержки отображались иначе и твой мегазапрос будет работать очень долго. Задержку в 0.5 сек на клик пользователь не заметит. Задержка в 5 сек на все 10 записей будет слегка раздражать. На задержку 50 сек пользователь скажет, что программа не работает.
Хотя выход и тут есть. Запусти фоновую нить, которая, пока пользователь втыкает на результат запроса, доберёт из БД детали.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273856
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажем, на mssql можно было бы выполнить один запрос for xml explicit и получить в xml обьекты с вложенными коллекциями, а на клиенте только распарсить полученный xml.
Не факт, что будет быстрее - но наверняка будет прозрачнее и универсальнее.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273901
Фотография smeh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сделано так, в гриде лежат те поля по которым чаще всего пользователь ищет запись, и только они и загружаются из базы. При выборе записи все остальное подгружается - вполне быстро работает. Если появляются поля, которые тоже нужны в гриде - они туда добавляются.
А поиск записи путем открытия каждой - это неправильный метод и если пользователь так делает - пусть ждет.
ИМХО.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34274394
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В варианте, который я описал, в 99,99999% пользователю информация о деталировке не нужна.Это дополнительная опция.Если не доходить до маразма,как в случае с загрузкой по одному полю(интересно узнать какой размер пакетов у них использовался для передачи!), то в большинстве случаев пользователь не заметит отдельной загрузки.
Кроме допустимого времени реакции, существует еще такое понятие, как надежность системы.
Для всех любителей абстрактных рассуждений вопрос.
Что может произойти в блокировочнике, если одновременно выполняются два запроса:
первый на выборку,второй на апдейт по полю с некластерным индексом?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276562
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тишина........Как быстро страсти улеглись.Ответ простой-мертвая блокировка.Думаю, когда выше ее вероятность любители показывать все и сразу сообразят сами.Заказчика больше устроит неторопливая система, чем не работающая совсем.
Одно дело, когда Access применяется для работы с зоопарком из нескольких разнородных источников данных, и совсем другое, при работе нескольких сотен пользователей одновременно.
Другой аспект-это разработка и дальнейшее применение объектов.Какой вариант вы выбирите, если их тоже будет несколько сотен:генерация в несколько кликов простых объектов с последующей их композицией или ручное конструирование монстров с вылизыванием микросекунд?
Объект должен содержать и выполнять только то для чего он предназначен.
В шаблононе MVP, который мы применяем,рекомендуется использовать раздельные объекты, что
позволяет конструировать интерфейс из готовых блоков, выделить отдельно логику бизнес процессов, автоматизировать тестирование и прочие. Пример. Компании, отделы, физ.лица имеют много общих сущностей-адреса, контакты, телекомы, комментарии и тд.В каких случаях нужна вся эта информация сразу?
Посмотрите msdn в разделе патерны.Какие там рекомендации на основе решений, которые применяются не один год.
Оптимизация нужна только в очень крайних случаях.Если будут провалены сроки никого не будет интересовать маленький кусок, где все оптимизировано до блеска.
PS. В Axapte еще более "идиотский" способ-открытие курсора с чтением по одной записи.Вариант не очень идеальный, но это работает.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276613
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, ты сейчас с кем разговариваешь? :)
В теме был поднят вопрос, как алгоритмически выбрать из базы коллекцию объектов, каждый из которых в свою очередь содержит ("ссылается на") коллекцию объектов.
А зачем это вообще нужно, и можно ли так делать -- это уже другой вопрос.

К сожалению, ничего нового я для себя из темы не узнал, что кажется мне очень странным. Неужели никто не может прояснить работу того же гибернейта в таких случаях?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276693
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276731
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaПравильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все.

Объясни другим. Я делал ORM для решения определённой задачи и меня интересуют другие решения.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277005
Oleg Martynenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Fuzzy

Напрасно не слушаешь людей, которые дают тебе хорошие советы. SeVa не зря говорил тебе про CSLA. Книга, которая описывает эту библиотеку, содержит помимо прочего очень неплохой материал по проектированию бизнес объектов (приложения вцелом). И хотя и не даст тебе готовый ответ на твой вопрос, но поможет тебе избежать таких вопросов в будущем ("Лучше полчаса потерять, зато, потом за 5 мин. долететь.").

А пытаться заменить нехватку общих навыков проектирования/программирования (и, насколько я могу судить, незнание принципов работы с БД) такими вопросами (да ещё потом говорить, что ничего нового не узнал из ответов) пустая трата времени (причем, не твоего).
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277190
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, Oleg Martynenko -- я с вас тащусь просто. Вы нереально крутые. Вы напоминаете мне мастера кун-фу, который на вопрос ученика "как мне освободиться от такого-то захвата" отвечает "главное -- гармония" :))
Не обижайтесь насчёт "ничего нового" -- просто о том, что если есть возможность чего-то не делать, то лучше этого не делать, я знаю и сам. Спасибо за то, что напомнили мне об этом. Вопрос был о другом.

Да, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос. Поэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277801
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyДа, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос.
А зря..., прочитайте хотябы Фаулера "Архитектура корпоративных программных приложений".

FuzzyПоэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо
Вот она благодарность за хорошие советы... :)
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277909
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277988
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник
но, имхо, это трудоемко и создает множества проблем в "гибком проектировании".

А почему, кстати? Обоснуйте плз.
Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос,
получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет.
И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278061
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник 2 Fuzzy
Отвечая на вопрос, кратко опишу один из вариантов.
...поскипано...
Хочется без Lazy Load - получаем весь граф объекта в виде xml с помощью for xml запроса и десериализуем в объект
...поскипано...
Спасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278085
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинА почему, кстати? Обоснуйте плз.
Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос,
получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет.
И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента.

Запросы for xml шлепаются как блины только for xml auto. Для десериализации xml в объект чаще требуется for xml explicit или собственная десериализация на стороне клиента, а это уже не как блины (что собственная сериализация, что for xml explicit). Потом, модель от цикла к циклу разработки имеет свойтво меняться - расширяться, дополняться... что неизбежно вызовет переделку либо сериализации, либо for xml explicit для измененных сущностей, в отличии от простых sp-CRUD, которые намного легче автоматом генерится по модели.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278136
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyСпасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз?

В таком случае, решение может быть таким:
Возвращайте несколько выборок (select-ов) из хп, заполняйте таблицы DataSet-а на основе этих выборок, связывайте эти DataTable relation-ми. Далее смотрите сами - использование DataSet/типизированного DataSet как бизнес-объекта, либо DataSet.GetXml() и десериализация в бизнес-объекты.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278912
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ, Роман Дынник, правда, я с сишарпом не очень-то знаком. Мне бы лучше примеры на java.
Но, тем не менее, правильно ли я понял:
1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте.
2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте.
3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом.
Так?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279026
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyНо, тем не менее, правильно ли я понял:
1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте.
2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте.
3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом.
Так?
Исходя из ваших условий, примерно так. Я проецировал ситуацию для .net-а.
Исходя из используемых технологий можно найти другие, более оптимальные решения.
Например, в oracle - можно xml-запросы выполнять, если брать oracle+java - можно java stored procedure использовать и J-SQL и на стороне БД-сервера POJO-объект создавать и возвращать.
Какие средства и технологии вы используете?

P/S/
Но все же лучше Lazy Load загрузка.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279079
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279252
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyРоман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)?
Ничем. Единственное, если получится сразу легко получить xml нужного для десериализации вида, то автоматически пропадает необходимость реализации маппинга xml->to object или record->to object.
Правда модель активной записи (опять же по Фаулеру), которую вы описали, будет всегда каждый раз при необходимости повторного использовании объекта мапить запись на объект, что может весьма сказаться на производительности в случае некоторых алгоритмов (например, длительные расчеты, использующие объекты как источник информации).
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279349
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, у Фаулера действительно полезная книга. Скажите, пожалуйста, в ней жёстко си-шарп рассматривается, или в общем? А есть где-нибудь на сети, чтоб скачать?

Роман, а зачем я должен буду повторно мапить записи на объекты? Можно пример, чтоб я понял?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279395
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опа, уже нашёл, и скачал. Буду читать, спасибо, Роман!
...
Рейтинг: 0 / 0
25 сообщений из 90, страница 3 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как выбрать из базы коллекцию объектов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]