|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Симонов Денис, Ну select from select не такой уж и старый, в IB и даже наверное первых FB его не было. Я его использую довольно редко. Ну ладно... уже все понаписывали не так как надо, пока я ситуацию не контролировал. :) Так как мне погасить повторные вызовы? Только прятать подзапрос в процедуру? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 12:54 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
barryhvlad, Влад, в свое время я поднимал вопрос поводу того, что измененный генератор при откате транзакции не откатывается назад. Меня вроде как убедили, что генератор мол особый объект, живущий вне транзакции. Хотя это тоже определенные данные в БД. Ну ладно... пусть будет так.Это не "ну ладно". Это показывает на твой уровень владения предметом, увы не высокий. barryНу а здесь... Я же ведь значения полей беру из внутреннего подзапроса. Ну надо мне повторное срабатывание функции - я явно укажу вызов функции. Я не мог даже предполагать, что оно живое и динамичное.В SQL пользователь указывает ЧТО делать, а не КАК делать. Это новость ? Есть разные стратегии работы с выражениями, можно запоминать результат (это требует доп. памяти), можно вычислять их заново (это требует CPU). В Interbase 100 лет назад выбрали второй подход и изменить его не так просто, как кому-то хочется. Это не значит, что так будет всегда. Но пока что - вот так. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 12:57 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
WildSeryДегтярев Евгений, А кого надо напрягать? Сеть, передавая все 100? раз дергаем 100 и мешаем как угодно, не напрягая ни сеть не сервер ) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 12:58 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5.
В таблице 1000 записей. Сколько раз вызовется функция Func1? Сколько раз вызовется функция Func2? Как количество вызовов зависит от значений возвращаемых функциями Func1 и Func2? Код: sql 1. 2. 3. 4.
Func1 вызвана 2000 раз, всё ожидаемо, без вывертов движка. Дописываем sum: Код: sql 1. 2. 3. 4.
Func1 вызвана 1000 раз. Вот как так? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:03 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
HommerВ таблице 1000 записей. Сколько раз вызовется функция Func1? Сколько раз вызовется функция Func2?Почему тебя это интересует ? Из-за побочных эффектов этих ф-ций ? Избавься от побочных эффектов. Или перепиши вызывающий код. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:14 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Симонов Денисну ты прям пишешь будто для тебя это открытие. Все уже давно знают, что такую ересь писать нельзя. Вроде не первый год на форуме Для меня это не открытие. Хочешь я статью на Хабре напишу и мы узнаем кто знает а кто нет? :) Я не первый год. Но что мне теперь, несуразности перестать замечать? Или не говорить о них? Всем же понятно что баги и несуразности не должны утаиваться ни от пользователей ни от самих себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:16 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Дегтярев Евгенийраз дергаем 100 и мешаем как угодно, не напрягая ни сеть не сервер )В условии не описано, что надо получить 100 фоток утром и весь день 20 случайных из них показывать, время от времени перетасовывая. И что-то мне подсказывает, что так задача не стоит. Получение свежих данных в 5 раз эффективнее на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:24 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
hvladHommerВ таблице 1000 записей. Сколько раз вызовется функция Func1? Сколько раз вызовется функция Func2?Почему тебя это интересует ? Из-за побочных эффектов этих ф-ций ? Избавься от побочных эффектов. Или перепиши вызывающий код. Понял что старый код от Intebase, неправильный, менять на правильный не понятно когда, кому и зачем. А вот это: Hommer Код: sql 1. 2. 3. 4.
Func1 вызвана 2000 раз Код: sql 1. 2. 3. 4.
Func1 вызвана 1000 раз ? Тоже наследие Interbase? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:25 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Hommer, давай отличать баги и "неоптимальное" выполнение. Если что-то работает и возвращает правильный результат, то это уже не баг. А неправильный результат запрос может вернуть только если эти функции недетерминированные или с побочными эффектами (это уже клиника). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:29 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Hommer Код: sql 1. 2. 3. 4. 5.
Подскажете как переписать чтобы вызывалось по одному разу? Симонов Денис, пусть Func1 и Func2 - функции, которые для расчётов используют MatLab (что очень не быстро) или 10000 процессоров в aws (что ещё и дорого). И пожалуйста, смотрите на задачу не как на конкретную, а как на пространство возможных. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 14:11 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
HommerТоже наследие Interbase?За 500$ в час я объясню тебе все эффекты. Минимум - 3 часа. Начинаем ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 14:36 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Симонов ДенисHommer, давай отличать баги и "неоптимальное" выполнение. Если что-то работает и возвращает правильный результат, то это уже не баг. А неправильный результат запрос может вернуть только если эти функции недетерминированные или с побочными эффектами (это уже клиника). Код: sql 1. 2. 3.
TransferPayment возвращает True если отработала успешно и False если не успешно, т.е: TransferPayment(100, 1, 2, 1000000) вернёт True, а следующий такой же TransferPayment(100, 1, 2, 1000000) вернёт False, т.к. это попытка провести уже проведённое. Это простой и понятный пример недетерминированной функции: деньги уже заплачены, второй раз платить нельзя. Далее: в PaymentsToTransfer 1000 записей. Вас удивит, если обнаружите что после окончания работы этого sql в TransferPaymentsLog появятся 1000 записей с TransferResult = False, хотя все платежи были успешно проведены? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 14:39 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Hommer, недетерминированные функции - они такие. Особенно прикалывает, как по таким функциям пытаются индекс строить. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 14:46 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Hommer, Ну написал же Влад hvlad Есть разные стратегии работы с выражениями, можно запоминать результат (это требует доп. памяти), можно вычислять их заново (это требует CPU). В Interbase 100 лет назад выбрали второй подход и изменить его не так просто, как кому-то хочется. Это не значит, что так будет всегда. Но пока что - вот так. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 14:53 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
hvladHommerТоже наследие Interbase?За 500$ в час я объясню тебе все эффекты. Минимум - 3 часа. Начинаем ? Я за слушать отговорки беру $1000 в час :) Но если там будет про то почему за 18 лет с начала вашего первого срока так и не получилось побороть коррупцию и слезть с нефтяной иглы сделать хорошо, то скину половину :) Начинаем? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 14:55 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
18.04.2018 12:41, barry пишет: > в свое время я поднимал вопрос поводу того, что измененный генератор при откате транзакции не откатывается назад. СЕГОДНЯ ПРОСТО ПРАЗДНИК КАКОЙ-ТО! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 15:10 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
HommerTransferPayment возвращает True если отработала успешно и False если не успешно, т.е: TransferPayment(100, 1, 2, 1000000) вернёт True, а следующий такой же TransferPayment(100, 1, 2, 1000000) вернёт False, т.к. это попытка провести уже проведённое. Это простой и понятный пример недетерминированной функции: деньги уже заплачены, второй раз платить нельзя. если проектировщик ССЗБ, то да. Сколько раз повторять ни селективные процедуры, ни PSQL функции не должны внутри себя что-то модифицировать. По крайней мере если они используются в SELECT запросе, да ещё с JOIN к другим таблицам. Как говорится пути оптимизатора неисповедимы. То что работает в одном порядке сейчас завтра может начать работать совсем иначе. Да Firebird это позволяет, но надо же ещё здравый смысл включать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 15:10 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Hommer, вот тебе контр пример. В таблице T содержится 100000000 записей. Делаем вот такой простой запрос Код: sql 1. 2. 3. 4. 5. 6. 7.
Внимание вопрос сколько раз должен дёрнутся генератор? Тут ведь кто-то жаждил материализовать результат выражений. На самом деле это можно делать, но далеко не всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 15:23 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
barry, я всё таки решил твою задачу Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 15:46 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Мимопроходящий, > СЕГОДНЯ ПРОСТО ПРАЗДНИК КАКОЙ-ТО! А почему бы не праздник, кто еще может устроить настоящий праздник? :) Я так интерпретирую транзакцию. Попробуй мне доказать обратное. Даже если генератор рассматривать без привязки к таблице (к полю ID). А просто как некую внутреннюю переменную. Это данные базы данных. Такое же, как и содержимое таблиц, просто неструктурированное. Почему на него не должны воздействовать правила транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 16:25 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Симонов Денис, Спасибо Денис! Занятие достойное уважающих себя мужчин. Весь вопрос ведь в том - почему нужно извращаться пол-дня чтобы получить очевидное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 16:30 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
18.04.2018 16:25, barry пишет: > Я так интерпретирую транзакцию. Попробуй мне доказать обратное ты не обижайся, но пашол ты на (в хорошем смысле, конечно) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 16:33 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
barry, генераторы есть стандарте и называются там последовательностями. Можешь почитать там о том как они должны работать. В Interbase генераторы придуманы задолго до появления их в стандарте. И их поведение сделано таковым чтобы обеспечить уникальные суррогатные ПК. Во всех СУБД где есть последовательности они ведут себя аналогично Firebird. Сам подумай что будет при конкурентом доступе с ключами, если бы генераторы вели себя так как ты хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 16:40 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Симонов ДенисHommer, вот тебе контр пример. В таблице T содержится 100000000 записей. Делаем вот такой простой запрос Код: sql 1. 2. 3. 4. 5. 6. 7.
Внимание вопрос сколько раз должен дёрнутся генератор? Мне, как пользователю, важно чтобы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
не возвращало: "3, 5, 7, 9, 11" вместо положенных "2, 4, 6, 8, 10" Довольно необычно увидеть такое, согласитесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 16:54 |
|
Сортировка по RAND()
|
|||
---|---|---|---|
#18+
Мимопроходящий, Я могу ходить где угодно и сколько угодно и даже понимать инерцию наследования кода от IB, сам писатель. Но от этого народ не перестанет набивать шишки на побочных эффектах от функций. Можем закрывать тему, я свой ответ получил. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 17:00 |
|
|
start [/forum/topic.php?fid=40&msg=39632591&tid=1561151]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 459ms |
0 / 0 |