forked from tarantool/tarantool
-
Notifications
You must be signed in to change notification settings - Fork 0
Functional indexes
Konstantin Osipov edited this page Jul 22, 2014
·
1 revision
могут быть двух типов:
- текстовые (STR)
- числовые (NUMBER)
При создании функционального индекса пользователь обязан определить функцию (lua) (идеально, функция должна быть помещена в реплицируемое хранилище).
Функция принимает на вход тапл, на выходе возвращает значение, которое нужно поместить в индекс:
function index(tuple)
return tuple[5] + tuple[6]
end
-
nil
(или ничего), это означает что данный тапл в данный индекс класть не нужно - значение (должно содержать в себе lua_Number либо lua_String) - собственно индексируемое значение
- (TODO) несколько значений - означает что данный тапл должен быть помещен в индекс несколько раз (рассмотреть вариант с таблицей)
- исключение. в этом случае вставка в индекс не производится, ошибка возвращается клиенту
опции конфигурации данного индекса:
- (TODO): возвращаемое значение (значения) есть пути path в тапле. в этом случае можно не аллоцировать память для вычисленного значения
- нужно ли хранить вычисленное значение в индексе. если опция установлена, то вычисленное значение в индексе не хранится (и в этом случае для каждого компаратора производится перевызов хранимой процедуры)
хорошо бы иметь возможность обратиться к функции индекса как к атрибуту индекса. например
local value = box.space.name.index.name.function(box.tuple.new{123})
тогда пользователь сможет строить какую-то свою логику более удобно.
- если данный индекс - главный (PRIMARY), то он должен генерировать исключение при попытке вернуть
nil
из функции - если данный индекс - главный, то он должен генерировать исключение при попытке вернуть несколько значений из функции
Architecture Specifications
- Server architecture
- Feature specifications
- What's in a good specification
- Functional indexes
- Space _index structure
- R tree index quick start and usage
- LuaJIT
- Vinyl
- SQL
- Testing
- Performance
How To ...?
- ... add new fuzzers
- ... build RPM or Deb package using packpack
- ... calculate memory size
- ... debug core dump of stripped tarantool
- ... debug core from different OS
- ... debug Lua state with GDB
- ... generate new bootstrap snapshot
- ... use Address Sanitizer
- ... collect a coredump
Lua modules
Useful links