
Terminator
19.09.2018
20:25:10
@zmirkaz будет жить. Поприветствуем!
Anatoliy будет жить. Поприветствуем!

Dmitry
20.09.2018
08:12:19

Yaroslav
20.09.2018
08:13:30

Google

Dmitry
20.09.2018
08:14:15

Yaroslav
20.09.2018
08:15:35
Так вот для той цели, про которую спрашивали, видимо, требуется DO ALSO.
И вот:
All non-trivial rules are incorrect.
I define “non-trivial” as follows:
<skip>
. Any rule using DO ALSO is non-trivial.

Daniil
20.09.2018
08:21:45

Yaroslav
20.09.2018
08:23:43

Dmitry
20.09.2018
08:34:39


Yaroslav
20.09.2018
08:50:27
> Но в ряде случаев, правила оказываются гораздо эффективнее.
Эффективность "решения", которое на самом деле не решает задачу, равна нулю. ;)
> Кому нужен безопасный питончик, если его использование в конкретной задаче снизит производительность на 3 порядка против C или C++? Никому.
Ну-ну. Что ж мы все в машинном коде-то не пишем? ;) (А дело-то всё во времени (деньгах), разве нет?)
> Разве что таким же медленным по жизни (есть одно подходящее слово в этом случае) ?
И это слово "профессионалы"? ;) ;)
Интересный у Вас взгляд, вообще говоря... Базы данных гораздо "дороже" (в плане производительности) других подходов, которые вроде как решают ту же задачу (ну, в 99.99% случаев). И, тем не менее, многие пользуются...


Dmitry
20.09.2018
10:17:40
> Но в ряде случаев, правила оказываются гораздо эффективнее.
Эффективность "решения", которое на самом деле не решает задачу, равна нулю. ;)
> Кому нужен безопасный питончик, если его использование в конкретной задаче снизит производительность на 3 порядка против C или C++? Никому.
Ну-ну. Что ж мы все в машинном коде-то не пишем? ;) (А дело-то всё во времени (деньгах), разве нет?)
> Разве что таким же медленным по жизни (есть одно подходящее слово в этом случае) ?
И это слово "профессионалы"? ;) ;)
Интересный у Вас взгляд, вообще говоря... Базы данных гораздо "дороже" (в плане производительности) других подходов, которые вроде как решают ту же задачу (ну, в 99.99% случаев). И, тем не менее, многие пользуются...
В машинном коде не пишут, потому что это: a) неоправданно сложно; b) абсолютно непереносимо. Дело в деньгах и времени, да. Поэтому создали давно уже кросс-платформенный ассемблер, назвали его C. Компиляторы C научились генерить крайне эффективный машкод. Поэтому смысла писать в машкоде сейчас уже нет. Зато есть смысл писать на C или C++, когда речь заходит про эффективность. Да, это сложные инструменты. Но никто от них отказываться не будет, потому что по эффективности и возможностям ничего другого на горизонте не видно. Так же и с правилами из PostgreSQL. Кому нужна мощная и точная "пушка", тому чихать на какие-то там потенциальные проблемы. Речь об эффективности, т.е. о времени, т.е. о деньгах. С денег начали, ими и закончим. ?


Mike Chuguniy
20.09.2018
10:33:55
А вроде бы и не пятница...

Nort
20.09.2018
10:34:12
Ага, а уже понеслось


Yaroslav
20.09.2018
10:34:37
> Поэтому создали давно уже кросс-платформенный ассемблер, назвали его C. Компиляторы C научились генерить крайне эффективный машкод. Поэтому смысла писать в машкоде сейчас уже нет.
Отчасти это верно. На уровне "отдельных элементов" код довольно эффективен. Тем не менее, есть приёмы, на которые "кросс-платформенный ассемблер" просто неспособен (самомодифицирующийся код, например, или хранение доп. информации в указателях (есть случаи, когда это безопасно, да)). К счастью, алгоритмов, эффективность которых зависит от этих приёмов, немного, к тому же, кое-что решает JIT.
> Но никто от них отказываться не будет, потому что по эффективности и возможностям ничего другого на горизонте не видно.
Никто — это сильное преувеличение. Опять-таки, зависит от того, что выгодно (чаще всего можно просто решить "железом"). Какие у них там уникальные возможности, кстати?
> Так же и с правилами из PostgreSQL. Кому нужна мощная и точная "пушка", тому чихать на какие-то там потенциальные проблемы.
Не вижу логики... Как Вы это вычисляете? Допустим, в какой то ситуации rules чуть производительнее триггеров, так что можно взять "железо" на 1000$ дешевле... а цена любой ошибки, к примеру, 10000$. Всё ещё стоит использовать?
> С денег начали, ими и закончим.
Непохоже как-то. :(


Dmitry
20.09.2018
10:51:58
> Поэтому создали давно уже кросс-платформенный ассемблер, назвали его C. Компиляторы C научились генерить крайне эффективный машкод. Поэтому смысла писать в машкоде сейчас уже нет.
Отчасти это верно. На уровне "отдельных элементов" код довольно эффективен. Тем не менее, есть приёмы, на которые "кросс-платформенный ассемблер" просто неспособен (самомодифицирующийся код, например, или хранение доп. информации в указателях (есть случаи, когда это безопасно, да)). К счастью, алгоритмов, эффективность которых зависит от этих приёмов, немного, к тому же, кое-что решает JIT.
> Но никто от них отказываться не будет, потому что по эффективности и возможностям ничего другого на горизонте не видно.
Никто — это сильное преувеличение. Опять-таки, зависит от того, что выгодно (чаще всего можно просто решить "железом"). Какие у них там уникальные возможности, кстати?
> Так же и с правилами из PostgreSQL. Кому нужна мощная и точная "пушка", тому чихать на какие-то там потенциальные проблемы.
Не вижу логики... Как Вы это вычисляете? Допустим, в какой то ситуации rules чуть производительнее триггеров, так что можно взять "железо" на 1000$ дешевле... а цена любой ошибки, к примеру, 10000$. Всё ещё стоит использовать?
> С денег начали, ими и закончим.
Непохоже как-то. :(
Самомодифицирующийся код - это красивая легенда, от которой отказались даже в PostgreSQL. Изначально эта СУБД была написана на Lisp, в котором уж "самомодифицирующийся код" во все поля. Потом перешли на "кросс-платформенный ассемблер" и вздохнули с облегчением, потому как только на C удалось работать на низком уровне. Все расширения, требующие производительности (а это все официльные расширения и большинство неофициальных расширений) пишутся на C. Прекрасно обходятся без самомодифицирующихся возможностей. (От которых всё равно одни тормоза.)
А как Вы вычисляете цену ошибки? Что это у Вас вдруг за величины $1000 vs $10000?


Yaroslav
20.09.2018
11:00:41
> Самомодифицирующийся код - это красивая легенда, от которой отказались даже в PostgreSQL.
Какая ещё легенда!? ;) Есть алгоритмы, эффективная реализация которых без него невозможна (и их есть даже в TAOCP, не говоря уже о прочих областях).
> Прекрасно обходятся без самомодифицирующихся возможностей. (От которых всё равно одни тормоза.)
А JIT в v11 зачем добавляют, в таком случае? ;)
> А как Вы вычисляете цену ошибки? Что это у Вас вдруг за величины $1000 vs $10000?
Как-то вычисляю. :) Это же был пример... Стоимость "железа" вычислить более-менее несложно, а вот с ценой ошибки да, бывает по-разному (можно и "на все деньги" влететь, а может и повезти).
Просто дело в том, что когда в одном месте (организации, продукте) начинают накапливаться "решения", работающие в 99.99% случаев... всё зачастую (и довольно быстро) становится грустно.

Google


Roman
20.09.2018
11:04:35
> Самомодифицирующийся код - это красивая легенда, от которой отказались даже в PostgreSQL.
Какая ещё легенда!? ;) Есть алгоритмы, эффективная реализация которых без него невозможна (и их есть даже в TAOCP, не говоря уже о прочих областях).
> Прекрасно обходятся без самомодифицирующихся возможностей. (От которых всё равно одни тормоза.)
А JIT в v11 зачем добавляют, в таком случае? ;)
> А как Вы вычисляете цену ошибки? Что это у Вас вдруг за величины $1000 vs $10000?
Как-то вычисляю. :) Это же был пример... Стоимость "железа" вычислить более-менее несложно, а вот с ценой ошибки да, бывает по-разному (можно и "на все деньги" влететь, а может и повезти).
Просто дело в том, что когда в одном месте (организации, продукте) начинают накапливаться "решения", работающие в 99.99% случаев... всё зачастую (и довольно быстро) становится грустно.
JIT в C# есть, в Java, даже в JS. Означает ли это что они самомодифицируются на лету? Нет (хотя возможности есть в каждом из перечисленных языков, но к JIT'у это относится примерно никак).


Yaroslav
20.09.2018
11:07:56

Roman
20.09.2018
11:11:22
Но да, можно написать само-модифицирующийся код через генерацию байт-кода в рантайме/eval в js

Yaroslav
20.09.2018
11:16:46
> Но это скорее про портируемость кода, чем про самомодифицирующийся код.
Ну это уже вопрос терминологии, IMHO...
Чем кардинально самомодифицирующийся код от этого отличается?
Только совпадением "языка", его генерирующего (или модифицирующего), с генерируемым (т.е. это машинный код)?

Dmitry
20.09.2018
11:28:17
Если уж тут пошла речь про самомодифицирующийся код, то как раз таки rules в PostgreSQL - это яркий пример этого.
Как раз именно этим система правил и занимается - переписывает запросы в соответствии с правилами.

Ivan
20.09.2018
11:33:09
у меня есть две таблицы Students и Groups возможно ли накинуть индекс на колонку students.id и groups.subject_id ? или впринципе такого нельзя сделать?

Yaroslav
20.09.2018
11:34:32

Ivan
20.09.2018
11:35:35
спасибо

Dmitry
20.09.2018
12:53:08

Yaroslav
20.09.2018
12:54:21
Суть-то в том, что RULE здесь невозможно написать так, чтобы оно работало во всех ситуациях (в отличие от триггера)!

Dmitry
20.09.2018
12:56:50
Я не возражаю. Конечно надо смотреть по ситуации. Просто мне показалось, что Вы категорический противник использания правил в принципе.
Правила - это мощное средство. Не стоит их боятся. Ими стоит уметь пользоваться.

Yaroslav
20.09.2018
12:58:04

Dmitry
20.09.2018
13:04:30
Я не в курсе, Ярослав, что ими нельзя пользоваться. Лично пользуюсь и очень доволен. Видимо, другие пользователи (кто умеет пользоваться, конечно) тоже довольны, раз система правил в Постгресе почти с самого начала и по сей день.

Yaroslav
20.09.2018
13:07:58

Google

Yaroslav
20.09.2018
13:08:19
Резюме оттуда:
> When should you?
Never. While the rewriter is an implementation detail of VIEWs, there is no reason to pry up this cover plate directly.

Anatoly
20.09.2018
13:08:52
я туплю или рулы используются в 9.х для партиционирования?

Yaroslav
20.09.2018
13:09:53

Dmitry
20.09.2018
13:11:46
Если почти всё чуть более дельное пишется на C или C++ по сей день. Включая Постгрес.

Yaroslav
20.09.2018
13:14:27

Anatoly
20.09.2018
13:15:06

vlade11115
20.09.2018
13:15:28

Dmitry
20.09.2018
13:16:04

Anatoly
20.09.2018
13:16:36
A rule has significantly more overhead than a trigger, but the overhead is paid once per query rather than once per row, so this method might be advantageous for bulk-insert situations. In most cases, however, the trigger method will offer better performance.
https://www.postgresql.org/docs/9.6/static/ddl-partitioning.html отсюда

Yaroslav
20.09.2018
13:17:25

Dmitry
20.09.2018
13:17:28
Триггеры на VIEW появились относительно недавно.
Раньше правила были необходимыми, чтобы модифицировать таблицы через виды.
Я согласен что в большинстве случаев триггеры: проще, быстрее, понятнее.

Yaroslav
20.09.2018
13:23:41

Dmitry
20.09.2018
14:11:57

Google

elfiki
20.09.2018
14:12:37
обратная совместимость, например

Dmitry
20.09.2018
14:13:32
Время умопомрачительных открытий.

Yaroslav
20.09.2018
14:14:07

Dmitry
20.09.2018
14:15:53
Вы, видимо, далеки от разработки софта. Если какая-то фича признаётся разработчиком плохо спроектированной, то она обяъвляется устаревшей (deprecated) или через 1-2 релиза выпилывается. RULES в Постгресе со времен его создания - никто об этом даже не думает.

Yaroslav
20.09.2018
14:19:40

elfiki
20.09.2018
14:20:24
ну и которым 20 лет, да

Yaroslav
20.09.2018
14:25:27

Dmitry
20.09.2018
14:45:38


Vladimir
20.09.2018
14:48:38
Ой, холи вар ещё идёт))

Dmitry
20.09.2018
14:49:44

Yaroslav
20.09.2018
14:49:46

Dmitry
20.09.2018
14:50:17

Yaroslav
20.09.2018
14:50:25

Dmitry
20.09.2018
14:51:37
Вики - это не документация. И совершенно неважно кто её может править.
Хоть сам Стоунбрейкер.

Google

Yaroslav
20.09.2018
14:52:11

Dmitry
20.09.2018
14:52:44

vlade11115
20.09.2018
14:53:04

Yaroslav
20.09.2018
14:53:48

Dmitry
20.09.2018
14:54:07
Лол.

Yaroslav
20.09.2018
14:54:47

Dmitry
20.09.2018
14:55:22
Том - один из ключевых. Никакой он не основной.

vlade11115
20.09.2018
14:55:23
Спасибо. Вот так бы сразу.

Dmitry
20.09.2018
14:55:39
Сказки рассказываете.
Основной был Стоунбрейкер.
Но Вы умнее, по-ходу ?