Skip to content

Replace tarantool's plan cache with our rust impl

Текущая реализация работы с кэшом байткода через прокси файбер не идеальна.

  1. Прокси корректно работает только при условии, что если два поддерева IR отличаются, то и байткод sqlite у них тоже будет отличаться. Чаще всего это так, но учитывая особенности выведения типов в тарантуле, у нас возможны коллизии. Эту проблему коллизий можно было бы решить, если дать коду в пикодате доступ к счетчику ссылок кэша байткода (сейчас это скрыто в глубине тарантула).
  2. Переключение на прокси файбер при каждом добавлении или удалении байткода из кэша увеличивает время выполнения запроса (приходится ждать, пока планировщик переключится с одного файбера на другой и обратно).
  3. Отсутствие прямого доступа к кэшу байткода мешает нам построить LRU с политикой вытеснения, основанной на оставшемся свободном месте в памяти кэша (нужны размеры откомпилированных выражений, количество ссылок на каждое из них и прямые доступы к statement, чтобы избежать двойной компиляции - см. #1246).
  4. Опкоды для транзакций не генерируются сейчас через локальный SQL и не понятно как помещать сгененрированный для них байткод в кэш тарантула (текущее C API позволяет взаимодействовать с кэшом только через локальный SQL или statement id). TODO: cc @funbringer - проверь, что я корректно описал проблему.
Edited by Denis Smirnov
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information