|
|
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Мутить будешь сам-две процедуры, которые я написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:22 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ещё раз:) Я спросил не про то, что я буду делать, а про то, какие селекты будет сервер выполнять, для этой операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:25 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Процедуры могут быть разные и с любыми параметрами для кажого конкретного случая.Никто не мешает написать и одну общую процедуру, все на усмотрении разработчика.На общие вопросы могут быть только общие ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:26 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Хм, мне казалось, пример вполне конкретный. Ну да ладно. Спасибо за помощь, SeVa! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:30 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyЯ не собираюсь работать с Ораклом, к сожалению. Да и не хочу привязываться к какой-то определённой базе. Хочется универсального решения, шаблонного. Чем тебе не шаблонное решение? Код: plaintext Объектный SQL скоро будет реализован во всех коммерческих СУБД, и твоё шаблонное решение уйдёт в небытие, как худше из всех возможных, поскольку в общем случае API БД никакой оптимизации в твоей задаче не допускает но тебе придётся ориентироваться на него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:31 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenabОбъектный SQL скоро будет реализован во всех коммерческих СУБД, и твоё шаблонное решение уйдёт в небытие, как худше из всех возможных "... а при коммунизме всё будет зае*ись, он наступит скоро, надо только подождать..." (с)ГрОб :)) А щас всё-таки надо работать с API БД как есть. Так что насчёт хранимок, как ими воспользоваться для решения моей задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:36 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
PS. Осталось только угадать твою структуру и выслать тебе готовое решение.Возможный вариант я дал.Рекомендую еще зайти на тамошний форум, дабы посмотреть, как народ общается в подобных местах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:43 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyА щас всё-таки надо работать с API БД как есть. А какой есть? FuzzyТак что насчёт хранимок, как ими воспользоваться для решения моей задачи? Откуда мне знать? Может твоя БД хранимые процедуры не поддерживат? А вообще, с ХП всё точно так же, только SQL запросы храняться на стороне сервера. ХП возвращает массивы записей, которые нужно рассортировать по прикладным объектам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:47 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ну причём тут готовое решение? Хочется просто понять, сколько и каких СЕЛЕКТОВ будет выполнять сервер для того, чтобы выбрать на клиента коллекцию объектов, каждый из которых сам содержит коллекцию объектов. Какие бы ни были там процедуры, SQL сервер всё равно ведь будет выполнять именно запросы. И не получится ли, что запросов будет 1 плюс ещё по запросу на каждый "главный" объект для выборки соответствующих подчинённых? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:50 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab FuzzyТак что насчёт хранимок, как ими воспользоваться для решения моей задачи? Откуда мне знать? Может твоя БД хранимые процедуры не поддерживат? А вообще, с ХП всё точно так же, только SQL запросы храняться на стороне сервера. ХП возвращает массивы записей, которые нужно рассортировать по прикладным объектам. Я понял. Короче говоря, выходит, что нормальный способ будет такой: 1. Зарядить запрос по таблице с главными объектами с нужным фильтром. 2. Зарядить запрос по таблице с подчинёнными объектами, как фильтр использовать запрос с главными объектами. 3. Мчаться циклом по резалтсету главных объектов, для каждой записи: а) создаём новый главный объект б) мчимся циклом по резалтсету подчинённых объектов с текущей позиции, пока ключ бьёт с соответствующим главным объектом, создаём новые подчинённые объекты, пихаем в коллекцию. Типа как-то так, видимо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:57 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzySeVa, ну причём тут готовое решение? Хочется просто понять, сколько и каких СЕЛЕКТОВ будет выполнять сервер для того, чтобы выбрать на клиента коллекцию объектов, каждый из которых сам содержит коллекцию объектов. Какие бы ни были там процедуры, SQL сервер всё равно ведь будет выполнять именно запросы. И не получится ли, что запросов будет 1 плюс ещё по запросу на каждый "главный" объект для выборки соответствующих подчинённых? В лучшем случае для множества объектов с одной вложеной коллекцией нужно выполнить 2 запроса. Один за множеством главных объектов, второй за вложенными коллекциями. В худшем 2x<количество выбираемых объектов>, хуже только по дури можно сделать. Фактическое количество запросов в данном случае зависит от возможностей API СУБД и твоего таланта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:00 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Fuzzy... 3. Мчаться циклом по резалтсету главных объектов, для каждой записи: а) создаём новый главный объект б) мчимся циклом по резалтсету подчинённых объектов с текущей позиции, пока ключ бьёт с соответствующим главным объектом, создаём новые подчинённые объекты, пихаем в коллекцию. Типа как-то так, видимо? Типа того. Пара замечаний. 1. В запрос подчинённых коллекций нет нужды тащить таблицу с главными объектами, если тебе известны их id, а они тебе известны, поскольку ты их выбрал первым запросом. Но в конкретном случае это может быть не важно. Если уж плясать в этом направлении, то можно одним запросом выбрать данные из таблиц с главными и подчинёнными объектами, правда размер выборки в байтах может ощутимо возрасти. 2. Твои циклы подразумевают, что строки в запросах будут предварительно отсортированы по id объекта. Это лишняя трата времени, не проще, но эффективенее сразу создать все главные объекты, а затем рассортировать по ним подчинённые записи, используя, например, хэш таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:10 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Не совсем так, mcureenab, в запрос по подчинённым объектам я собираюсь передавать отнюдь не таблицу, а запрос по главным объектам. И по двум рекордсетам я буду бежать одновременно, и фетчить их тоже одновременно. Поэтому без сортировки по id не обойтись, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:25 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyНе совсем так, mcureenab, в запрос по подчинённым объектам я собираюсь передавать отнюдь не таблицу, а запрос по главным объектам. И по двум рекордсетам я буду бежать одновременно, и фетчить их тоже одновременно. Поэтому без сортировки по id не обойтись, конечно. Дело твоё. Так тоже можно. Не факт, что будет производительнее, но определённо проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:30 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Все зависит от задачи. У меня используется только выборка списка с отложенным чтением деталировки.Например, строиться только список товарно-материальных ценностей, упаковки подгружаются, если пользователь раскрывает вложенный грид(Баловать их не стоит.Пусть выбирает только то, что ему нужно.). Код: public PackageList Packages { get { CanReadProperty("_packages", true); if (_packages == null) _packages = PackageList.GetPackageList(_inventoryItemUid);//вызов проц и построение списка упаковок по Uid ТМЦ return _packages; } } Если нужно все сразу, народ изгаляется как может.Варианты обсуждаются в форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:33 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Отлично, значит, пока имеем два способа: 1) "Идиотский": 1 запрос по главным объектам, и по запросу для каждого главного объекта по подчинённым объектам. 2) "По запросу на коллекцию": 1 запрос по главным объектам, и 1 запрос по подчинённым объектам, бежим по ним одновременно. Ну можно ещё предложить 3) "Денормализованный": 1 общий запрос по главным и подчинённым объектам. Подойдёт в крайнем случае, если подчинённых коллекций одна. Если больше, то это будет смерть. Ещё есть варианты? А как Hibernate делает, кто знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:35 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ты описал "идиотский" способ по моей классификации :) Не всегда можно отложить загрузку подчинённых объектов, иногда хочется всё и сразу. А на каком форуме народ изгаляется на эту тему, подскажи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:37 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Хех. Я тут видал, программа за КАЖДЫМ атрибутом в БД обращалась. Обоснование было - канал медленный, и если нужен только конкретный атрибут, то тянуть весь объект будет накладно. Я сомневаюсь, но, полагаю, автор знал о чём говорит. Сам делал объектный кэш на PL/SQL. Методы и SQL запросы генерились по шаблону автоматически для каждого класса объектов. Чтобы не усложнять шаблон и оставаться в его рамках, атрибуты объектов тянул только по id. Если требовался запрос не по id, то сначала выбирал список id, а потом типовыми методами подружал сами объекты по одному. Благо таких необъектных запросов было совсем чуть и претензий на всеобщность тоже не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:59 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Скучно.Первый раз слышу, что при отложенной выборке одновременно "бегут" и по подчиненным объектам.Я четко оговорился, что все зависит от задачи.Мой вариант, как раз для пользователей идиотов, которым вряд ли нужна деталировка для массы записей, ВЫБОРКА ПРОИСХОДИТ ТОЛЬКО ПО ЗАПРОСУ.При необходимости я сделаю все в одной процедуре.Если тебе нужно насиловать бд и загромождать экран-флаг в руки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:06 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, а я предпочитаю иметь на клиенте полноценный объект, а не полузагруженный. И вообще, мало ли какие бывают расклады. Может, юзер желает в гриде видеть кроме главного объекта ещё и какие-то данные по подчинённым объектам, какое-нибудь текстовое значение через запятую, например. Или агрегат какой-нибудь хитрый. Что тогда? Переходим от объектов к рекордсетам? А масса записей на клиенте по определению не нужна, нужно ровно столько, сколько юзер может просмотреть, и не так уж это много, можно и с деталями дёрнуть с сервака. Хотя, конечно, "случаи разные бывают", и это уже флейм, ПМСМ. Так что насчёт форума, где ещё народ эту тему обсуждает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:13 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
А если ..., а если ..., а если пользователь пива захочет. За твоей фантазией трудно угнаться.На словоблудие может быть много ответов.Задай вопрос в форуме "Просто треп" (есть такой здесь). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:27 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Пользователь -- это бог. Захочет пива -- придётся бежать, ведь мы же работаем за деньги :)) SeVa, ты упоминал форум, где народ обсуждает похожую тему. Это был "Просто трёп"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:36 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzySeVa, а я предпочитаю иметь на клиенте полноценный объект, а не полузагруженный. Нуууу... Есть ещё ленивая инициализация и многие её успешно используют. Иногда запросу может пойти на пользу, ибо пользователь быстро получит первые записи, а не будет ждать, когда пол БД на клиента подгрузится. Опять же ускорение, если большая часть объектов не будет использована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:51 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab, не вижу проблемы -- открыл два или сколько надо запросов, собрал объект, показал клиенту, он его сразу видит. Переходим к следующему объекту. Никто ничего не ждёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:00 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Fuzzymcureenab, не вижу проблемы -- открыл два или сколько надо запросов, собрал объект, показал клиенту, он его сразу видит. Переходим к следующему объекту. Никто ничего не ждёт. Тебе виднее, конечно. Только на открытие запроса с сортировкой время нужно. Если коллекции большие а критерий отбора слабый, пользователю долго ждать придётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:18 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34273496&tid=1544757]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
170ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 493ms |

| 0 / 0 |
