Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Работа с коллекциями в T-SQL  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
SergSuper

То, что вы предложили укладывается только в одну фразу None0 - "Сгружаю дерево иерархическим запросом" и делается в Oracle одним запросом, вообще без процедурного кода. А вот, как же там дальше None0 использует коллекции надеюсь он наконец подумает и объяснит.

Я так понимаю задача у него была не сформировать дерево как таковое, а обработать потом как то полученные результаты, да и получить похоже не одно дерево, а несколько, вернее несколько веток. Чтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :). Или сразу скачать большой кусок дерева в структуры, по которым потом можно проводить эффективную навигацию. Впрочем мне нехочется выдумывать за None0 чего он там хотел сделать.

Gluk (Kazan)
Вам стоит обновить свои знания по коллекциям, вы похоже опять путаетесь.
В "forll, bulk collect" можно использовать как ассоциативные массивы, так и вложенные таблицы. Рзница между в ними скорее в способах инициализации и
возможности использовать вложенные таблицы в SQL выражениях.
20 фев 04, 15:08    [545617]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
По себе могу сказать, что, работая с оракловыми pl/sql-таблицами, достаточно часто хочелось обрабатывать их при помощи операторов SQL, что к сожалению, невозможно. И вопрос "как сделать выборку из pl/sql-таблицами" один из распространеных по Oracle. Объектные таблицы уже предоставляют такую возможность, наряду со всеми остальными своими свойствами. Осталось совсем немного - научить объектные таблицы изменять свое содержимое через UPDATE, DELETE. Пока взамен этого можно "перебрасывать" значения массивов между двумя переменными, с требуемыми выборками.

Конечно в T-SQL от MS мне много чего не нравится, но массивы там нахрен не нужны


String Tokenizer? Я думаю, что обмен "массивами" между процедурами в MSSQL все-таки возможен, но не по ссылке, а по значению: процедура принимает resultset, заполняем им временную таблицу, производит требуемые операции и возвращает resultset как запрос из временной таблицы. Громоздко, но работать будет.

2tygra
4. Переменные - нет, временные - да, но не посредством переменной процедуры, а саму по себе.

То есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу?
20 фев 04, 15:20    [545667]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
None0
Guest
>>Я так понимаю задача у него была не сформировать дерево как таковое, а обработать потом как то полученные результаты, да и получить похоже не одно дерево, а несколько, вернее несколько веток. Чтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :). Или сразу скачать большой кусок дерева в структуры, по которым потом можно проводить эффективную навигацию. Впрочем мне нехочется выдумывать за None0 чего он там хотел сделать.

Глас народа - глас божий. Не зря же в народе ходит "Это даже ёжику ясно". Вы точно разобрались в проблеме.

>>но массивы там нахрен не нужны.
Я тоже так думал до некоторого времени. А таки понадобились.

Поговорите на досуге с май-эскуэлистами, им тоже много чего не нужно: ни процедурных расширений, ни триггеров, ни транзакций. И ведь правы по своему.
20 фев 04, 15:20    [545671]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
автор
То есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу?


Угу

-- Tygra's --
20 фев 04, 15:40    [545725]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
2 ежик

Да пожалуй, ассоциативные таблицы с forall я не проверял, но возвращать их в качестве результата функции сто пудов нельзя. Впрчем, все это не относится к теме обсуждения.
20 фев 04, 15:56    [545766]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32169
2Я и ёжик, None0
ёжик
Чтобы получить каждую ветку можно или каждый раз запускать ваш алгоритм ( ну или в Oracle запускать иерархический запрос), для n веток n - запусков, или даже для m -веток m запусков :)


В Оракле, может, и n или даже m запусков, а данный алгоритм позволяет за один запуск взять все ветки. К-во выполнений блока в цикле - максимальный уровень вложенности среди всех веток. Я об этом выше тоже писал.

ёжик
То есть временная таблица видна для всех процедур, вызываемых из создавшей эту самую временную таблицу?

Да. Если обычная временная таблица, не таблица-переменная. К сожалению, при этом подходе происходит перекомпиляция процедур :-( Если процедуры сложные, это замедляет работу.
20 фев 04, 16:30    [545845]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32169
Вторая цитата и ответ к Denis Popov
20 фев 04, 16:31    [545848]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
автор
В Оракле, может, и n или даже m запусков, а данный алгоритм позволяет за один запуск взять все ветки. К-во выполнений блока в цикле - максимальный уровень вложенности среди всех веток. Я об этом выше тоже писал.

Ещё раз, вопрос не в том чтобы построить дерево, в Oracle ваш текст заменяется ОДНИМ select-ом, коллекции используются не для построения дерева, а для сохранения результатов этого построения в удобной для ДАЛЬНЕЙШЕЙ навигации форме. Результаты человеку потом еще надо интерпретировать, побегать по каким то веткам и подветкам и выполнить на этой основе еще какие то действия.
"n или m запусков" относилось к варианту алгоритма когда каждая нужная ветвь достается по отдельности.
20 фев 04, 16:49    [545883]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
2 Я и ёжик
Цитирую:
[iЗадача: От каждого листа построить до корня путь в виде строки идентификаторов. Чегото типа того: '567,1223,4343,189'. Элементов в дереве порятка 500.
Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей.
Что сделал я - сделал таблицу-переменную и записал туда путь(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как). Дальше можно как угодно работать с этой таблицей-переменной, в том числе использовать для ДАЛЬНЕЙШЕЙ навигации и совершенно не нужно n веток n запусков.
ОБЪЯСНИТЕ МНЕ ЗАЧЕМ МНЕ НУЖНЫ ЭТИ КОЛЛЕКЦИИ! Как они могут мне помочь? Мне это действительно интересно, хотя бы чтоб синтаксис посмотреть.
Или Вы что-то особенное подразумеваете под дальнейшей навигацией?
В ответ я вижу только ничем не аргументированные (и на мой взгляд спорные) фразы:
...Вариант работы с коллекцией по циклам в разы бастрее
...Каждый более менее развитый язык обязан иметь одномерные массивы
...Я тоже так(что массивы не нужны) думал до некоторого времени. А таки понадобились.
...Поговорите на досуге с май-эскуэлистами

Последнее особенно умиляет - от себя значит сказать нечего
20 фев 04, 17:29    [545971]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
None0
Guest
>>Что сделал я - сделал таблицу-переменную и записал туда путь(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как)

А как это делается на MSSQL одним запросом? (Может моя проблема в том, что я ничего не знаю об аналитических функциях?).

Сделайте мне один запрос на pure-MSSQL чтобы 5 строк этой таблицы:
ParentID ChildID

116 889
889 628
628 924
924 629
629 946


первратились в одну: '116,889,628,924,629,946'
20 фев 04, 18:22    [546087]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
А при чём тут коллекции?
20 фев 04, 18:25    [546091]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
автор
Цитирую:
[iЗадача: От каждого листа построить до корня путь в виде строки идентификаторов. Чегото типа того: '567,1223,4343,189'. Элементов в дереве порятка 500.
Чего я делаю. Сгружаю дерево иерархическим запросом в коллекцию. И начинаю по ней активно шуровать циклами для постоения нужных путей.
Упссс.... действительно шуршать для построения нужных путей не надо, не вчитался в то, что человек написал, думал дело пишет....

автор
(я кстати так и не увидел как это можно сделать на Оракле одним запросом, хотя примерно представляю как)

SELECT id, level, SYS_CONNECT_BY_PATH(id, ',') "Path"
FROM table
START WITH parent = 0
CONNECT BY PRIOR id = parent;

автор
Дальше можно как угодно работать с этой таблицей-переменной, в том числе использовать для ДАЛЬНЕЙШЕЙ навигации и совершенно не нужно n веток n запусков.

Вы действительно считаете , что нет разницы между упорядоченными структурами данных в памяти и реляционными таблицами (пусть и временными)? Последние предназначены для работы с ними как со множествами и в этом виде и должны использоваться, навигация по ним очень мало эффективна, хранение в куче. Помочь колекции вам могут ускорив доступ к данным однажды уже выбранным, иногда это существенно.
автор
ОБЪЯСНИТЕ МНЕ ЗАЧЕМ МНЕ НУЖНЫ ЭТИ КОЛЛЕКЦИИ! Как они могут мне помочь?
Например для создания в памяти хэш-таблиц и работы с ними.
Для кэширования нужной информации в рамках сессии, и опять же быстрого доступа по числовому ключу. (запрос из временной таблицы будет медленней) .
Для приема данных из массивов Host-а (ну не по одному значению вам передает клиентская программа а сразу массив, из C++ например.)
Если в общих словах то они могут помочь в построении эффективных структур данных для реализации эффективных алгоритмов. Обработка данных не всегда заканчивается их выборкой.
Список литературы для желающих понять для чего нужны массивы, списки и.т.п:
1. Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман "Структуры данных и алгоритмы"
2. Д. Кнут "Искуство программирования" том кажется 1-й. 2-й и 3-й тоже не помешают.
20 фев 04, 18:49    [546123]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
2 None0
Я написал как это можно сделать на MS SQL
Я нигде не писал что это можно сделать на MS SQL одним запросом (если не использовать Юкон)
Да, на Оракле можно, но будет это не сильно короче
20 фев 04, 18:50    [546125]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Вы хотите данные на сервере построчно обрабатывать? И действительно считаете, что ваши циклы на PL/SQL будут эффективнее циклов, написанных разработчиком СУБД?
20 фев 04, 18:58    [546137]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
^
2 ёжик.
20 фев 04, 18:58    [546138]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
None0
Guest
>>SYS_CONNECT_BY_PATH
Ежики, а это что???

Сервер 8.1.7, на всякий случай.
20 фев 04, 19:00    [546141]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
None0
Guest
www.fun4me.narod.ru
А словосочетание "Переключение контекстов" вам чтото говорит? В данном случае между PL/SQL engine и SQL engine???
20 фев 04, 19:03    [546144]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
tygra
Member

Откуда: Тверь (Иркутск, Край)
Сообщений: 9997
В общем, без примера того, что автор вопроса делает с коллекциями и с их помощью нифига у нас не получится - на его пример можно было бы предоставить пример для MS SQL. А так только передиваем из пустого в порожнее

-- Tygra's --
20 фев 04, 19:16    [546154]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Все эти эффективные алгоритмы, реализуемые с помощью эффективных наборов данных эффективны, тогда и только тогда, когда данных у вас с гулькин нос. А когда данных немного - тогда любой алгоритм эффективен. А если у вас запросы тормозят уже на 1500000 строк - то это проблеммы проектирования базы данных, запросов и организации индексов.

Хорошо сделанная база на MSSQL будет работать всегда. И маштабируется проще. А хорошо выполненная оракловая база с использованием объектных заморочек и построчной обработки данных на PL/SQL будет работать до некторого предела (пока памяти хватит). И масштабироваться потом будет гораздо тяжелее.
20 фев 04, 19:18    [546159]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
А отсюда мораль - если Вам нужны какие-то свои супер-пупер навороченные эффективные алгоритмы обработки данных - их надо выносить на бизнес-сервер. А СУБД должна работать с наборами данных. И желательно, через хранимые процедуры. Вы даете её запрос - дай мне то-то и то-то. И она возвращает набор данных. Или делает изменения в наборе данных. И всё. И внутри хранимки тоже желательно использовать наборы данных, то есть писать её таким образом, чтобы количество обращений к SQL engine не зависило от размера обрабатываемого массива.
Только когда количество взаимодействий между всеми компонентами системы не зависит от размерности данных, возможна эффективная работа с растущими объёмами данных, как мне кажется /imho/.
20 фев 04, 19:36    [546173]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
И что даёт использование таблиц T-SQL?
Я всегда работаю с набором данных. Используя для этого запросы. Если работает медленно - я оптимизирую один конкретный запрос. Мне не надо менять структуру хранения информации, мне не надо перестраивать циклы. Я просто смотрю план выполнения запроса, перестраиваю индексы, смотрю загруженность сервера. И всё работает быстро. Это потому, что я сумел свой алгортим, который вначале казался эффективным и был записан на языке обработки отдельных записей перевести на язык обработки множеств.
И всё это - благодаря T-SQL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
T-SQL Rulez!!!!!!!!!!!!!!!!!
20 фев 04, 19:43    [546177]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
None0
Guest
>>реализуемые с помощью эффективных наборов данных эффективны, тогда и только тогда, когда данных у вас с гулькин нос.

А говорят, что с миру по нитке, можно на рубашку собрать. Поэтому пишем эффективно всегда и везде. Если разработчик думает что в данном случае использование loop thorough collections эфективнее чем pure-sql используем коллекции не смотря на то, что большой бядька из Oracle или MS считает иначе.
И потом. Об эффективных наборах данных. Есть ТЗ. Разрабатываются структуры данных под ДАННОЕ ТЗ. Все сделали. Сдали. Обмыли. Мир юн и зелен. А потом приходит заказчик и говорит - хочу сюда такую приблуду, сюда такую, а сюда такую рюшечку. У-у-у-пс. И ваша эффективна структура в свете этих рюшечек становится неэффективной. И че делать? Лопатить 50К строк кода?
К чему бы это я? А просто, дефки из соседнего отдела уже наливают за 23 февраля. Удачи, мужики!!!
20 фев 04, 20:25    [546198]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
Gt.
Guest
А отсюда мораль - если Вам нужны какие-то свои супер-пупер навороченные эффективные алгоритмы обработки данных - их надо выносить на бизнес-сервер.

зря вы имхо написали маленькими буквами, не видно ...

1. при суровых объемах и нагрузках MS рекомендует переносить логику в субд на T-SQL (как и Оракл) - см msdn, там же говорится что MS например участвуя в тестах tpc-с складывает в T-SQL ...
2. ущербность T-SQL MS признает в соседнем топике по Юконе, где рассказывает как круто будет CLI в субд ...
3. не понял что вы пытаетесь доказать - эти (оракловые) навороты в субд не нужны ? кому не нужны ? аналогию с mysql уловили ?
20 фев 04, 20:30    [546203]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Мне не нужны. Никому не нужны. Данные _не должны_ построчно обрабатываться. Вы вот напишите обработку данных коллекциями, сдадите заказчику, а через три-четыре года, когда всё тормозить будет - кто нормально всё будет переписывать? Опять я, что ли? А почему бы сразу по-человечески не писать? Я, понимаю, конечно, разделение труда, то-сё.... Кто-то криво пишет, кому то потом исправлять всё приходится, чтобы работало быстро. Я напишу большими буквами - БАЗА РАСТЁТ. И это надо учитывать, и не увлекаться коллекциями.
20 фев 04, 20:43    [546209]     Ответить | Цитировать Сообщить модератору
 Re: Работа с коллекциями в T-SQL  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Перенос логики в СУБД, imho, это не значит взять паскалевскую программу и переписать её на PL/SQL. Наверное это означает и необходимость переписать алгоритмы обработки данных таким образом, чтобы они с множествами рабтали, а не со строками.
20 фев 04, 20:56    [546221]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить