metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-07-02 02:43 pm

Я в шоке.

Обсуждение одновременного выполнения и чтения двух SQL-запросов в одном коннекте и транзакции (или, упаси Б-г, двух транзакций в одном коннекте) свелось к тому, что НИКТО это не использует. Ну, б-г с ним, что нигде кроме Firebird этого нет, но я всегда считал что операция "ленивым образом перебрать 100500 проводок, параллельно так же ленивым образом вычитывая их детализацию" это самоочевидное действие, такое же как два вложенных цикла, с обработкой списка сущностей в внешнем и списка вложенных сущностей во внутреннем.
Нет, оказывается это не так. Мне предложили все виды извращенной любви с БД - загрузку датасета в память и затем выполнение второго запроса, выполнение джоина и свертку его результатов в граф объектов, и прочая и прочая.
А я тут в святом неведении Олега почитываю на тему fold-like обработки БД и пытаюсь обобщить это на случай доступа к БД из ADO.NET и обработки нескольких вложенных таблиц.

Неудивительно, что NoSQL внезапно оказался настолько популярен. Потому что в умах разработчиков и в большинстве RDBMS аналогов действию "получить сущность и ее подчиненные сущности" просто НЕТ.

[identity profile] zamotivator.livejournal.com 2010-07-02 02:53 pm (UTC)(link)
Кастую крокодила ([livejournal.com profile] plumqqz) в тред.

[identity profile] vromanov.livejournal.com 2010-07-02 03:13 pm (UTC)(link)
В TimesTen аналогично. Возможно это связано с внутреними буферами драйверов.

[identity profile] gds.livejournal.com 2010-07-02 03:51 pm (UTC)(link)
я всегда думал, что можно сколько угодно мультиплексировать выборки. Казалось естественным. Может поэтому я нормально к СУБД отношусь.

У Олега -- iteratees -- не помогут достичь нужного, если драйвера не умеют. Или что вообще хочется?

[identity profile] molnij.livejournal.com 2010-07-02 06:13 pm (UTC)(link)
Разумеется оракл это умеет.. Просто в этом ключе я не думал коментировать )
Кстати, а как тогда в Net делается показ master-child выборок если там нельзя паралельно два запроса запустить?

[identity profile] norguhtar.livejournal.com 2010-07-03 04:27 am (UTC)(link)
А все это от того что с СУБД лучше не работать процедурно. Она по своей сути декларативна. Так что, то что вы предлагаете необходимо только в определенных условиях. К примеру у нас дохлый канал и обработка возможна только строго последовательна и обрабатывается внешним алгоритмом.

[identity profile] enternet.livejournal.com 2010-07-04 07:33 pm (UTC)(link)
Для решения такой задачи:
1) на ib/fb я, помнится, просто денормализовал результат
2) на оракле можно возвращать вложенные курсоры. Как-то пробовал, геморрой это.
3) на MSSQL я возвращаю XML. это просто и удобно в обработке.

[identity profile] ennor.livejournal.com 2010-07-05 12:09 am (UTC)(link)
Это ты, случаем, не про MSDataShape? Они, вроде, на него забили давно.

Вообще, можно на самом деле так вопрос поставить - если тебе надо одновременно более двух датасетов, то зачем выносить их обработку за пределы СУБД? Я сильно сомневаюсь, что хоть один клиент сумеет соединить мастер-деталь в себе быстрее, чем база данных. Ему же еще индексы строить придется, или там хеш-таблицу.

Но это уже потенциальная переработка архитектуры может потребоваться - если изначально все писалось в стиле 1С, а теперь надо все ускорить и вообще сделать по уму, то конечно упс...

И кстати да, XML (там, где он есть) никто не отменял.

[identity profile] blacklion.livejournal.com 2010-07-05 09:11 am (UTC)(link)
Потому что в умах разработчиков и в большинстве RDBMS аналогов действию "получить сущность и ее подчиненные сущности" просто НЕТ.
JOIN'ы, блин! но то это и реляционка!