LINUX.ORG.RU

Декларативность SQL, как от нее избавиться.

 ,


0

3

Задача: есть таблица с данными (много),

table {
  id,
  category
  value,
  time
}

время не упорядоченно, т.е. возможны ситуации когда [N+1].time < [N].time

данные нужно:

1 отфильтровать в виде «category in (1...N)» и в диапазоне времени

2 найти пары записей между которыми значение value пересекает некую границу.

3 сгруппировать данные по категориям и отсортировать по времени

Внимание, фокус! Оптимальный алгоритм работы на sql не реализуем, а у планировщиков запросов субд свое мнение на этот счет (особенно отсортировать в середине раз десять), а ведь задача решается в один проход + сортировка резульатата

И тут все в белом NoSQL системы где mapreduce и тупые империативные или функциональные запросы 8(

Deleted
Ответ на: комментарий от Apple-ch

В частности, откуда ты высосал условие для time в своём примере?

это очевидно из условия, без этой заковырки задача была бы тривиальной.

Deleted
()
Ответ на: комментарий от Deleted

Не, неочевидно. Собственно, после сцепления таблицы саму на себя, добавить условие для value совсем не сложно.

Покажи теперь, плиз, императивное решение в один проход. Можно на псевдокоде. Может я и впрямь не догоняю чего…

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

добавь а потом поканять на тестовой базе из пары лямов, или представь план выполнения

Покажи теперь, плиз, императивное решение в один проход. Можно на псевдокоде. Может я и впрямь не догоняю чего…

Декларативность SQL, как от нее избавиться. (комментарий)

Deleted
()
Ответ на: комментарий от Deleted

Ай яй яй, b-tree оптимизируется для минимизации обращений к диску, создавая кучу распухших индексов которые используются одновременно ты породишь то самое от чего пытались избавиться, причем что характерно обращения будут непоследовательные.

прочитав пару-тройку индексов b-tree, ты узнаешь, что большую часть БД читать не нужно.

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

да. Может. Особенно, если индексы спроектированы неграмотно. Но что-бы их грамотно спроектировать, нужно чётко представлять, какие у тебя будут запросы (и какие ответы).

drBatty ★★
()
Ответ на: комментарий от Deleted

Это шизофрения, а корректная только 2-3, попробуй догадаться почему.

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

А что там твоя шизофрения нашептывает о том что правильная пара только и только 2-3 - увы не интересно.

anonymous
()
Ответ на: комментарий от Deleted

О.. я смотрю у тебя в запросе чудесным образом появилось доп условие по времени.

Ну и где ты увидел в моем примере что у id=1 время меньше чем у id=2, раз так уверенно настоял на шизофрении с только одной истинной парой (2-3), при условии что сам же заявил что время у записей неупорядоченно.

Бугога.

anonymous
()

Похоже NoSQL означает «я не осилил SQL».

Legioner ★★★★★
()
Ответ на: комментарий от drBatty

Но что-бы их грамотно спроектировать, нужно чётко представлять, какие у тебя будут запросы (и какие ответы).

И какие у тебя структуры данных, смею заметить.

А наш поспел, с манием разделения логики и данных, похоже сначала нафигачил как бог на душу положит 10Гб кривых ненармализованных данных, а потом ищет серебряную пулю что бы их обработать.

anonymous
()
Ответ на: комментарий от Apple-ch

Покажи теперь, плиз, императивное решение в один проход.

Он походу думает что FULLSCAN 10-и Гбайт для каждого запроса это легко, просто, быстро и правильно.

anonymous
()
Ответ на: комментарий от anonymous

Но что-бы их грамотно спроектировать, нужно чётко представлять, какие у тебя будут запросы (и какие ответы).

И какие у тебя структуры данных, смею заметить.

я тут причём? УМВР.

А наш поспел, с манием разделения логики и данных, похоже сначала нафигачил как бог на душу положит 10Гб кривых ненармализованных данных, а потом ищет серебряную пулю что бы их обработать.

о том и речь - с такими невнятными условиями, действительно проще записать всё в один файл, и обрабатывать одним циклом. А СУБД тут не нужна.

drBatty ★★
()
Ответ на: комментарий от Deleted

это очевидно из условия, без этой заковырки задача была бы тривиальной.

Ну тогда нужно добавить еще НЕтривиальности - пусть время мало того что не упорядоченно но еще НЕуникально.

Это же очевидно из «ТЗ». LOL

anonymous
()
Ответ на: комментарий от anonymous

Ну тогда нужно добавить еще НЕтривиальности - пусть время мало того что не упорядоченно но еще НЕуникально.

Это же очевидно из «ТЗ». LOL

Истину глаголишь - не уникально, иначе бы вместо id использовалось время, это очевидно.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.