yacc> Формально можно один раз прогнать генерацию плана, а потом из этого плана составить функцию на том же С++ - по запросу.
Так а зачем? Что ты на этом выиграешь?
План и есть компиляция, по сути. Того, что имеет смысл компилировать и предобрабатывать. Что ты можешь сэкономить, переведя интерпретации внутренного формата в исполнимый код, если у тебя вся работа - происходит в выборке?
Это гулькины слёзы в океане. Сотни-тысячи инструкций на фоне затрат в миллиарды-триллионы при непосредственной обработке запроса.
Точно имеет смысл помнить планы и кеши для конкретных частых случаев, но наверняка эти, кто жрут на SQL собак оптом, уже подумали о чём-то таком.
...
Я о другом вот думал.
Интересно было бы вогнать SQL-ускорители в хардвару, в те же СХД, чтобы исключить лишнюю беготню данных. Ну, с диска физически так или иначе читать... но пусть он прямо там вот, в кеше винта и сравнивает, оставляя только выбраное по where, допустим. Ессно, при этом ни о какой ФС ОС речи уже не идёт, таблицы хранятся на уровне физики, в своей спец-ФС.
SQL-винчестер, своего рода.
Ему, процессору на винте, не нужно быть ОЧЕНЬ мощным и нести в себе весь функционал SQL, ему нужно только выполнять операции предфильтра, и тут вполне справится контроллер, который сейчас поддерживает кеширование на винте. То есть, всё сводится не к железному, а чисто софтовому проекту. Ну, разве что кое-какой функционал (типа сравнения строк) опционально можно загнать в ПЛИС или ASIC.
Выгоды - очевидны. Внутренняя скорость диска используется более полно, его кэш используется на многие порядки более эффективно, часть вычислений халявно (потому что проц на винте почти не получает дополнительной нагрузки) выносится с ЦПУ сервера, высвобождаются шины и IO, память и контроллер памяти сервера, кеш его ЦПУ. Огромные выгоды в том, что винчестер знает о своей физической структуре: он может минимизировать самую затратную по энергии и времени операцию - перемещение головок (за 5мс перемещения головки можно прочитать и обработать несколько мегабайт данных).
Снимается целый пласт абстракций (и связаных с ними вычислений) в ФС ОС.
В перспективе готовность софта SQL и вообще серверной стороне к работе с такими интерфейсами при более полном переходе СХД на флеш даёт вообще потрясающие возможности работы умной памяти. Ну, то есть, запрос может обрабатываться массивно-параллельно прямо в микросхеме флеш или сборке с ней (и уж там аппаратное ускорение типичных операций само собой напрашивается).
Потенциально это даёт огромный выигрыш производительности, частично расшивает ЦПУ как узкое место с SQL и даёт просто фантастическую энергоэффективность.
И всё это, в принципе, можно сделать, просто написав соотвествующий софт для контроллера винта. Ессно, необходимо организовать поддержку для начала в ПостгресСиквеле и МайСиквеле (хардварный лейер можно проигнорировать для начала, пустив запросы поверх всех традиционных уровней, инкапсулировав в обычные запросы записи-чтения). Да, проект сложный и трудоёмкий. Но это вполне проект масштаба стартапа в десяток человек.
Это сообщение редактировалось 05.02.2022 в 21:14