Top.Mail.Ru
Tarantool 1.7 | Tarantool
 

Tarantool 1.7

Tarantool 1.7

Версия 1.7.6

Тип версии: стабильная. Дата выхода: 2017-11-07. Тег: 1.7.6-0-g7b2945d6c.

Объявление о выходе: https://groups.google.com/forum/#!topic/tarantool/hzc7O2YDZUc.

Данная сборка представляет собой очередную стабильную версию в серии 1.7. Это обновление содержит более 75 исправлений по сравнению с версией 1.7.5.

Что нового в Tarantool 1.7.6?

Добавлены новые опции:

  • net_box (время ожидания),
  • функции string,
  • форматы для спейса (имена и типы полей, задаваемые пользователем),
  • base64 (опция urlsafe), а также
  • создание индекса (сортировка, is-nullable (возможность допустить неопределенное значение), имена полей).

Несовместимые изменения:

  • Расширенная структура box.space._index поддерживает функции is_nullable и collation (сортировка). Все новые индексы, созданные по столбцам со свойствами is_nullable или collation получат новый формат определения. Обновите клиентские библиотеки, если планируете использовать новые возможности. Проблема 2802
  • fiber_name() теперь выдает ошибку вместо усечения длинных имен файберов. Мы обнаружили, что некоторые Lua-модули, такие как expirationd, используют fiber.name() для определения фоновых задач. Если же имя усечено, они упускают файбер из вида. Обновление позволит обнаружить ошибки, вызванные усечением имени файбера fiber.name(). Используйте fiber.name(name, { truncate = true }) для моделирования старого поведения системы. Проблема 2622
  • space:format() is now validated on DML operations. Previously space:format() was only used by client libraries, but starting from Tarantool 1.7.6, field types in space:format() are validated on the server side on every DML operation, and field names can be used in indexes and Lua code. If you used space:format() in a non-standard way, please update layout and type names according to the official documentation for space formats.

Изменения или добавления функциональности:

  • Гибридная модель данных без схемы + со схемой. Раньше версии Tarantool позволяли хранить произвольный набор документов в формате MessagePack в спейсах. Начиная с версии Tarantool 1.7.6, можно использовать space:format() для определения условий и ограничений схемы для кортежей в спейсах. Определенные типы полей автоматически проверяются при каждой DML-операции, а определенные имена полей могут использоваться вместо номеров полей в Lua-коде. Добавлена новая функция tuple:tomap() для конвертации кортежа в Lua-словарь пар ключ-значение.
  • Поддержка сортировки и Юникода. По умолчанию, когда Tarantool сопоставляет строки, он берет во внимание только числовое значение каждого байта в строке. Чтобы задействовать такое распределение, как в телефонных справочниках и словарях, в Tarantool’е версии 1.7.6 впервые поддерживается сортировка по Таблице сортировки символов Юникода по умолчанию (Default Unicode Collation Element Table (DUCET)) и в соответствии с правилами, описанными в Техническом стандарте Юникода №10 – Алгоритм сортировки по Юникоду (Unicode® Technical Standard #10 Unicode Collation Algorithm (UTS #10 UCA)). См. сортировку.
  • Значения NULL в уникальных и неуникальных индексах. По умолчанию, все поля в Tarantool’е «НЕ NULL». Начиная с версии Tarantool 1.7.6, можно использовать опцию is_nullable (возможность допустить неопределенное значение) в space:format() или в определении части индекса, чтобы разрешить хранение значения NULL в индексах. Tarantool частично реализует троичную логику из стандарта SQL и позволяет хранить несколько значений NULL в уникальных индексах. Проблема 1557.
  • Последовательности и внедрение автоматического увеличения auto_increment(). В версии Tarantool 1.7.6 впервые реализованы генераторы порядковых номеров (как CREATE SEQUENCE – создание последовательности – в SQL). Эта функция используется для внедрения нового персистентного автоматического увеличения в спейсах. Проблема 389.
  • Vinyl: появляется блокировка разрывов в менеджере транзакций Vinyl’а. Новый блокирующий механизм в менеджере Vinyl TX снижает количество конфликтов в транзакциях. Проблема 2671.
  • net.box: триггеры on_connect и on_disconnect (по подключению/отключению). Проблема 2858.
  • Структурированная запись в журнал в формате JSON. Проблема 2795.
  • (Lua) Lua: string.strip() Проблема 2785.
  • (Lua) добавлен API base64_urlsafe_encode() для модуля digest. Проблема 2777.
  • Запись конфликтов в ключах в журнал в рамках репликации мастер-мастер. Проблема 2779.
  • Возможность отключить обратную трассировку в fiber.info(). Проблема 2878.
  • Реализована возможность создания сторонних библиотек tarantoolctl rocks make *.spec. Проблема 2846.
  • Новая функция загрузчика, используемого по умолчанию, позволяет искать модули .rocks в родительской иерархии. Проблема 2676.
  • Поддержка опций SOL_TCP в socket:setsockopt(). Проблема 598.
  • Частичное моделирование LuaSocket поверх Tarantool Socket. Проблема 2727.

Инструменты разработчика:

  • Интеграция с IntelliJ IDEA с поддержкой отладки. Появилась возможность использовать IntelliJ IDEA в качестве IDE для разработки и отладки Lua-приложений для Tarantool’а. См. Использование IDE.
  • Интеграция с удаленным Lua-отладчиком MobDebug. Проблема 2728.
  • Настройка /usr/bin/tarantool в качестве альтернативного Lua-интерпретатора для Debian/Ubuntu. Проблема 2730.

Новые сторонние библиотеки:

  • smtp.client – поддержка SMTP по libcurl.

Версия 1.7.5

Тип версии: стабильная. Дата выхода: 2017-08-22. Тег: 1.7.5.

Объявление о выходе: https://github.com/tarantool/doc/issues/289.

Данная сборка представляет собой стабильную версию в серии 1.7. Это обновление содержит более 160 исправлений по сравнению с версией 1.7.4.

Изменения или добавления функциональности:

  • (Vinyl) новый режим принудительного восставовления force_recovery для восстановления поврежденных файлов на диске. Используйте box.cfg{force_recovery=true} для восстановления файлов с данными, поврежденными в результате проблем с оборудованием или отключения электроэнергии. Проблема 2253.
  • (Vinyl) параметры индекса можно менять на лету без необходимости пересборки. Появилась возможность динамически изменять параметры page_size, run_size_ratio, run_count_per_level и bloom_fpr с помощью index:alter(). Изменения вступают в силу только для вновь созданных файлов. Проблема 2109.
  • (Vinyl) улучшен вывод box.info.vinyl() и index:info(). Проблема 1662.
  • (Vinyl) появляется опция box.cfg.vinyl_timeout для управления загрузкой на основе квот. Проблема 2014.
  • Memtx: стабильные итераторы index:pairs() для TREE-индекса. TREE-итераторы автоматически восстанавливаются в правильном положении после изменений индекса. Проблема 1796.
  • (Memtx) предсказуемый порядок для неуникальных TREE-индексов. Неуникальные TREE-индексы сохраняют порядок сортировки для дублирующихся записей. Проблема 2476.
  • (Memtx+Vinyl) динамическая настройка максимального размера кортежа. Впервые конфигурационные параметры box.cfg.memtx_max_tuple_size и box.cfg.vinyl_max_tuple_size можно изменять на лету без необходимости перезагрузки сервера. Проблема 2667.
  • (Memtx+Vinyl) новая реализация. Усечение спейса больше не вызывает повторное создание всех индексов. Проблема 618.
  • Максимальная длина всех идентификаторов расширена с 32 до 65 тысяч символов. Имена спейса, пользователя и функции больше не ограничены 32 символами. Проблема 944.
  • Сообщения контрольного сигнала для репликации. Репликационный клиент теперь выборочно отправляет подтверждение обработки записей и автоматически переподключается в случае замедления. Также в рамках этого изменения box.info.replication[replica_id].vclock будет отображать определенный vclock удаленной реплики. Проблема 2484.
  • Отслеживание удаленных реплик во время обслуживания WAL. Мастер репликации будет автоматически сохранять xlog-файлы, необходимые для удаленных реплик. Проблема 748.
  • Enabled box.tuple.new() to work without box.cfg(). Issue 2047.
  • Надстройка box.atomic(fun, …) будет выполнять функции в транзакции. Проблема 818.
  • Вспомогательная функция box.session.type() будет определять тип сессии. Проблема 2642.
  • Горячая перезагрузка кода для хранимых процедур на языке C. Используйте box.schema.func.reload('modulename.function') для перезагрузки библиотек общего пользования на лету. Проблема 910.
  • API для Lua: string.hex() и str:hex(). Проблема 2522.
  • Менеджер пакетов на основе LuaRocks. Используйте tarantoolctl rocks install MODULENAME для установки Lua-модуля MODULENAME (имя модуля) из https://rocks.tarantool.org/. Проблема 2067.
  • Опции командной строки в Lua 5.1. Бинарный протокол Tarantool’а поддерживает опции командной строки: „-i“, „-e“, „-m“ и „-l“. Проблема 1265.
  • Экспериментальный режим GC64 для LuaJIT. Режим GC64 позволяет работать со спейсами с полным адресом на 64-битных хостах. Включить настройку можно с помощью -DLUAJIT_ENABLE_GC64=ON compile-time. Проблема 2643.
  • Регистратор журнала syslog поддерживает неблокирующий режим. box.cfg{log_nonblock=true} также работает для регистратора syslog. Проблема 2466.
  • Добавлен уровень записи в журнал VERBOSE выше INFO. Проблема 2467.
  • Tarantool now automatically makes snapshots every hour. Please set box.cfg{checkpoint_interval=0 to restore pre-1.7.5 behavior. Issue 2496.
  • Increase precision for percentage ratios provided by box.slab.info(). Issue 2082.
  • Трассировка стека будет содержать имена символов на всех поддерживаемых платформах. В предыдущих версиях Tarantool не отображал значимые имена функций в fiber.info() на платформах не-x86. Проблема 2103.
  • Появилась возможность создания файбера с заданным размером стека из API для языка C. Проблема 2438.
  • В API для языка C добавлена функция ipc_cond. Проблема 1451.

Новые сторонние библиотеки:

  • http.client (встроенная) - HTTP-клиент на основе libcurl с поддержкой SSL/TLS. Проблема 2083.
  • iconv (встроенная) - привязки для iconv. Проблема 2587.
  • authman - API для регистрации пользователя и входа в систему с использованием email и социальных сетей.
  • document - хранит вложенные документы в Tarantool’е.
  • synchronized - критические секции для Lua.

Версия 1.7.4

Тип версии: предварительная версия. Дата выхода: 2017-05-12. Тег версии: 1.7.4.

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/1.7.4 или https://groups.google.com/forum/#!topic/tarantool/3x88ATX9YbY

Данная сборка представляет собой предварительную версию перед выпуском нового релиза в серии 1.7. Движок vinyl, ключевой компонент 1.7.x, обладает полностью реализованной заявленной функциональностью.

Несовместимые изменения

  • Для поддержки vinyl были внесены следующие изменения в параметры box.cfg():

    • переименование snap_dir в memtx_dir
    • переименование slab_alloc_arena (гигабайты) в memtx_memory (байты), значение, используемое по умолчанию, изменилось с 1 Гб на 256 МБ
    • переименование slab_alloc_minimal в memtx_min_tuple_size
    • переименование slab_alloc_maximal в memtx_max_tuple_size
    • slab_alloc_factor больше не используется, не применимо в 1.7.x
    • переименование snapshot_count в checkpoint_count
    • переименование snapshot_period в checkpoint_interval
    • переименование logger в log
    • переименование logger_nonblock в log_nonblock
    • переименование logger_level в log_level
    • переименование replication_source в replication
    • panic_on_snap_error = true и panic_on_wal_error = true заменены force_recovery = false

    В версиях Tarantool’а до 1.8 можно использовать устаревшие параметры как для начальной, так и для рабочей конфигурации, но в таком случае система запишет сообщение предупреждения в журнал сервера. Проблемы 1927 и 2042.

  • Режим hot standby (горячее резервирование) по умолчанию будет отключен. Tarantool автоматически находит еще один запущенный экземпляр в той же директории wal_dir и откажется запускаться. Используйте box.cfg {hot_standby = true} для включения режима hot standby. Проблема 775.

  • Операция UPSERT по вторичному ключу запрещена во избежание неопределенности семантики. Проблема 2226.

  • В формат box.info и box.info.replication для отображения информации о подключениях к upstream и downstream внесены следующие изменения (Проблема 723):

    • Добавление box.info.replication[instance_id].downstream.vclock для отображения последней строки, отправленной на удаленную реплику.
    • Добавление box.info.replication[instance_id].id.
    • Добавление box.info.replication[instance_id].lsn.
    • Перемещение box.info.replication[instance_id].{vclock,status,error} в box.info.replication[instance_id].upstream.{vclock,status,error}.
    • Включение всех зарегистрированных реплик из box.space._cluster в вывод box.info.replication.
    • Переименование box.info.server.id в box.info.id
    • Переименование box.info.server.lsn в box.info.lsn
    • Переименование box.info.server.uuid в box.info.uuid
    • Переименование box.info.cluster.signature в box.info.signature
    • Возврат значения nil вместо -1 функциями box.info.id и box.info.lsn во время начальной настройки кластера.
  • net.box: добавление запрошенные параметров во все запросы:

    • изменение conn.call(func_name, arg1, arg2,...) на conn.call(func_name, {arg1, arg2, ...}, opts)
    • изменение conn.eval(func_name, arg1, arg2,...) на conn.eval(func_name, {arg1, arg2, ...}, opts)
  • Все запросы поддерживают параметры timeout = <seconds>``(время задержки в секундах), ``buffer = <ibuf> (буфер).

  • Добавление опции connect_timeout в netbox.connect().

  • netbox:timeout() и conn:timeout() объявлены устаревшими. Используйте netbox.connect(host, port, { call_16 = true }), чтобы получить поведение как в 1.6.x. Проблема 2195.

  • Конфигурация systemd будет поддерживать Type=Notify / sd_notify(). systemctl start tarantool@ЭКЗЕМПЛЯР будет ожидать, пока Tarantool не запустится и не восстановится из xlog-файлов. Статус восстановления передается в systemctl status tarantool@ЭКЗЕМПЛЯР. Проблема 1923.

  • Модуль log не будет присоединять ко всем сообщениям полный путь к бинарному файлу при использовании без box.cfg(). Проблема 1876.

  • Переименование require('log').logger_pid() в require('log').pid(). Проблема 2917.

  • Удаленные определения и функции, совместимые с Lua 5.0 (Проблема 2396):

    • luaL_Reg заменяет удаленный luaL_reg
    • lua_objlen(L, i) заменяет удаленный luaL_getn(L, i)
    • Удаление luaL_setn(L, i, j) (пустая операция)
    • luaL_ref(L, lock) заменяет удаленный lua_ref(L, lock)
    • lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) заменяет удаленный lua_getref(L,ref)
    • luaL_unref(L, ref) заменяет удаленный lua_unref(L, ref).
    • math.fmod() заменяет удаленный math.mod()
    • string.gmatch() заменяет удаленный string.gfind()

Изменения или добавления функциональности:

  • (Vinyl) многоуровневое слияние. Планировщик слияния будет группировать забеги одного диапазона в уровни, чтобы снизить «паразитную» запись во время слияния. Новая функция позволит Vinyl’у поддерживать сценарии 1:100+ оперативная память:диск. Проблема 1821.

  • (Vinyl) Фильтры Блума для упорядоченных файлов. Фильтр Блума – это вероятностная структура данных, которую можно использовать для проверки наличия необходимого ключа в файле без считывания самого файла с диска. Фильтр Блума может выдавать ложноположительное срабатывание (элемента в множестве нет, но структура данных сообщает, что он есть), но не ложноотрицательное. Данная функция уменьшает объем поиска, необходимый для случайного просмотра, и ускоряет операции REPLACE/DELETE со вторичными ключами. Проблема 1919.

  • (Vinyl) кэш на уровне ключей для поиска точек и запросов по диапазону. Движок базы данных Vinyl кэширует выбранные ключи и диапазоны ключей вместо страниц диска полностью, как в традиционных базах данных. Такой подход более эффективен, поскольку кэш не заполнен сырыми данными. Проблема 1692.

  • (Vinyl) внедрение уровня общей памяти для in-memory индексов. Все in-memory индексы спейса будут хранить указатели на одни и те же кортежи, вместо закэшированных данных вторичного индекса. Данная функция значительно уменьшает объем необходимой памяти в случае вторичных ключей. Проблема 1908.

  • (Vinyl) новая реализация передачи начального состояния JOIN-команды в протоколе репликации. Новый протокол репликации исправляет проблемы с согласованностью и вторичными ключами. Мы внедрили специальный вид просмотра по всей базе данных с небольшой нагрузкой, чтобы избежать неподтвержденного чтения в JOIN-процедуре. В традиционных базах данных на основе B-Tree такое не представляется возможным. Проблема 2001.

  • (Vinyl) забеги по всему индексу. Удалены диапазоны из оперативной памяти и уровень LSM-дерева на диске. Проблема 2209.

  • (Vinyl) объединение небольших диапазонов. Перед созданием дампа или слиянием диапазона рассмотрите возможность объединения его с соседними диапазонами. Проблема 1735.

  • (Vinyl) внедрен многосторонний журнал для метаданных. Информация о всех Vinyl-файлах будет записываться в специальный .vylog-файл. Проблема 1967.

  • (Vinyl) появились постоянные вторичные ключи. Проблема 2410.

  • (Memtx+Vinyl) внедрен низкоуровневый API для Lua в целях создания согласованных резервных копий данных Memtx + Vinyl. Новая функциональность обеспечивает создание резервных копий всех спейсов с помощью функций box.backup.start()/stop(). box.backup.start() останавливает работу сборщика мусора Tarantool’а и возвращает список файлов для копирования. Затем эти файлы можно скопировать с помощью любого стороннего средства, например, cp, ln, tar, rsync и т.д. box.backup.stop() возобновляет работу сборщика мусора. Чтобы немедленно восстановить данные, скопируйте созданные резервные копии в новую директорию, а затем запустите новый экземпляр Tarantool’а. Нет необходимости в дополнительной подготовке, преобразовании или распаковывании. Проблема 1916.

  • (Vinyl) добавлена статистика для фоновых рабочих процессов в box.info.vinyl(). Проблема 2005.

  • (Memtx+Vinyl) уменьшен объем необходимой памяти для индексов с последовательными ключами, которые начинаются с первого поля. Такая оптимизация была необходима для вторичных ключей в Vinyl’е, но мы также оптимизировали Memtx. Проблема 2046.

  • LuaJIT получил все изменения с последней версии 2.1.0b3 с нашими патчами (Проблема 2396):

    • Добавлен бэкенд для JIT-компилятора для архитектуры ARM64
    • Добавлен бэкенд и интерпретатор для JIT-компилятора для архитектуры MIPS64
    • Добавлены некоторые расширения для Lua 5.2 и Lua 5.3
    • Исправление нескольких ошибок
    • Удалены устаревшие функции Lua 5.0 (см. несовместимые изменения выше).
  • Запущен новый умный алгоритм хеширования строк в LuaJIT, чтобы избежать замедления работы в случае множества коллизий. Разработали Юрий Соколов (@funny-falcon) и Ник Заварицкий (@mejedi). См. https://github.com/tarantool/luajit/pull/2.

  • box.snapshot() теперь обновляет время mtime в файле снимка, если не было изменений в базе данных с момента последнего снимка. Проблема 2045.

  • Внедрена функция space:bsize() для возврата объема памяти, занятого всеми кортежами спейса. Разработал Роман Токарев (@rtokarev). Проблема 2043.

  • Новые функции Lua/C вынесены в общедоступный API:

    • luaT_pushtuple, luaT_istuple (проблема 1878)
    • luaT_error, luaT_call, luaT_cpcall (проблема 2291)
    • luaT_state (проблема 2416)
  • Новые функции Box/C вынесены в общедоступный API: box_key_def, box_tuple_format, tuple_compare(), tuple_compare_with_key(). Проблема 2225.

  • Можно осуществлять ротацию xlog-файлов на основе размера (wal_max_size), а также количества записанных строк (rows_per_wal). Проблема 173.

  • Добавлены следующие API: string.split(), string.startswith(), string.endswith(), string.ljust(), string.rjust(), string.center(). Проблемы 2211, 2214, 2415.

  • Добавлены функции table.copy() и table.deepcopy(). Проблема 2212.

  • Добавлен модуль pwd для работы с пользователями и группами в UNIX. Проблема 2213.

  • Удалены неуместные сообщения «client unix/: connected» из журналов. Используйте вместо них триггеры box.session.on_connect()/on_disconnect() (на подключение / отключение). Проблема 1938.

    Триггеры box.session.on_connect()/on_disconnect()/on_auth() также срабатывают для подключений административной консоли.

  • tarantoolctl: следующие команды: eval, enter, connect – теперь поддерживают конвейеры UNIX. Проблема 672.

  • tarantoolctl: более точные сообщения об ошибке; добавлена новая страница справочника. Проблема 1488.

  • tarantoolctl: добавлен фильтр по replica_id для команд cat и play. Проблема 2301.

  • tarantoolctl: Команды start, stop и restart перенаправляют на systemctl start/stop/restart, когда запущен systemd. Проблема 2254.

  • net.box: по запросу добавлена опция buffer = <buffer> для хранения исходных ответов MessagePack в буфер C. Проблема 2195.

  • net.box: добавлена опция connect_timeout. Проблема 2054.

  • net.box: добавлена ловушка on_schema_reload(). Проблема 2021.

  • net.box: conn.schema_version и space.connection дополнены API. Проблема 2412.

  • log: debug()/info()/warn()/error() не выдают сбой при ошибках форматирования. Проблема 889.

  • crypto: добавлена поддержка HMAC. Разработал Андрей Куликов (@amdei). Проблема 725.

Версия 1.7.3

Тип версии: бета. Дата выхода: 2016-12-24. Тег версии: 1.7.3-0-gf0c92aa.

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/1.7.3

Данная сборка представляет собой вторую бета-версию в серии 1.7.

Несовместимые изменения:

  • Удалена поврежденная Lua-функция coredump(). Используйте вместо нее gdb -batch -ex "generate-core-file" -p $PID. Проблема 1886.
  • Структура диска Vinyl изменилась с версии 1.7.2: добавлен механизм компрессии ZStandard и улучшена производительность вторичных ключей. Используйте механизм репликации для обновления с бета-версии 1.7.2. Проблема 1656.

Изменения или добавления функциональности:

  • Значительный прогресс в стабилизации движка базы данных Vinyl:
    • Исправлены большинство известных отказов системы и ошибок, выдающих плохие результаты.
    • Замена формата всех файлов с данными на XLOG/SNAP.
    • Использование механизма компрессии ZStandard для всех файлов с данными.
    • Сжатие операций UPSERT на лету и объединение горячих клавиш с помощью фонового файбера.
    • Значительное улучшение производительности index:pairs() и index:count().
    • Удаление ненужных конфликтов из транзакций.
    • Уровень In-memory по большей части заменен структурами данных memtx.
    • В большинстве случаев используются специализированные распределители ресурсов.
  • Мы все еще активно работаем над Vinyl’ом и планируем добавить многоуровневое слияние и улучшить производительность в работе со вторичными ключами в версии 1.7.4. Это подразумевает изменение формата данных.
  • Поддержка DML-запросов для триггеров space:on_replace(). Проблема 587.
  • UPSERT можно использовать с пустым списком операций. Проблема 1854.
  • Lua-функции будут управлять переменными окружения. Проблема 1718.
  • Lua-библиотека будет считывать снимки Tarantool’а и xlog-файлы. Проблема 1782.
  • Новые команды в tarantoolctl: play и``cat``. Проблема 1861.
  • Улучшена поддержка большого количества активных сетевых клиентов. Проблема #5#1892.
  • Поддержка синтаксиса space:pairs(key, iterator-type). Проблема 1875.
  • Автоматическая настройка кластера будет работать и без авторизации. Проблема 1589.
  • При репликации попытки повторного подключения к мастеру бесконечны. Проблема 1511.
  • Временные спейсы будут работать с box.cfg { read_only = true }. Проблема 1378.
  • Максимальная длина имени спейса увеличена до 64 байтов (ранее 32). Проблема 2008.

Версия 1.7.2

Тип версии: бета. Дата выхода: 2016-09-29. Тег версии: 1.7.2-1-g92ed6c4.

Объявление о выходе: https://groups.google.com/forum/#!topic/tarantool-ru/qUYUesEhRQg

Данная сборка представляет собой версию в серии 1.7.

Несовместимые изменения:

  • Команда нового бинарного протокола для вызова CALL больше не ограничивает функцию в возврате массива кортежей и позволяет возвращать произвольный результат в формате MsgPack/JSON, включая scalar (скалярные значения), nil (нулевые значения) и void (пусто). Старый метод CALL оставлен нетронутым для обратной совместимости. В следующей основной версии он будет удален. Все драйверы для языков программирования будут постепенно переведены на использование нового метода CALL. Проблема 1296.

Изменения или добавления функциональности:

  • Разработка движка базы данных Vinyl, наконец, перешла в бета-стадию. В данной версии исправлены более 90 ошибок в Vinyl’е, в частности, удаление непредсказуемых скачков задержки отклика, все известные отказы системы и ошибки, выдающие плохие результаты или их отсутствие.
    • новая архитектура на основе кооперативной многозадачности для устранения скачков задержки отклика,
    • поддержка непоследовательных составных ключей,
    • поддержка вторичных ключей,
    • поддержка auto_increment(),
    • типы полей в индексах: number (число), integer (целое число), scalar (скаляр),
    • операции INSERT, REPLACE и UPDATE возвращают новый кортеж, как в memtx’е.
  • Мы все еще активно работаем над Vinyl’ом и планируем добавить механизм компрессии zstd и новый распределитель ресурсов для Vinyl’а в версии 1.7.3. Это подразумевает изменение формата данных, который планируется внедрить до того, как версия 1.7 станет общедоступной.
  • Автодополнение по Tab в интерактивной консоли, команды require(„console“).connect()`, tarantoolctl enter и tarantoolctl connect. Проблемы 86 и 1790. Используйте клавишу TAB для автодополнения имен переменных, функций и метаметодов в Lua.
  • Новая реализация net.box с улучшенной производительностью и решением проблем, когда сборщик мусора в Lua работает с недоступными соединениями. Проблемы 799, 800, 1138 и 1750.
  • Появилась компрессия снимков memtx и xlog-файлов на лету с использованием быстрого алгоритма компрессии ZStandard. Компрессия настраивается автоматически для получения оптимального соотношения между использованием ЦП и пропускной способностью диска.
  • fiber.cond() – новый механизм синхронизации для кооперативной многозадачности. Проблема 1731.
  • Tarantool теперь можно устанавливать из универсальных Snappy-пакетов (http://snapcraft.io/) с помощью команды snap install tarantool --channel=beta.

Новые модули и пакеты:

  • curl - неблокирующие привязки для libcurl
  • prometheus - сборщик метрик Prometheus для Tarantool’а
  • gis - полнофункциональное геопространственное расширение для Tarantool’а
  • mqtt - клиент MQTT-протокола для Tarantool’а
  • luaossl - самый полноценный OpenSSL-модуль во вселенной Lua

Устаревшие, удаленные и несовместимые функции:

  • Имена типов полей num и str объявлены устаревшими, используйте вместо них unsigned и string. Проблема 1534.

  • Удалены space:inc() и space:dec() (объявлены устаревшими в версии 1.6.x). Проблема 1289.

  • Функция fiber:cancel() теперь является асинхронной и не ждет завершения работы файбера. Проблема 1732.

  • Склонная к ошибкам функция tostring() была удалена из API digest. Проблема 1591.

  • Поддержка SHA-0 (digest.sha()) прекращается по причине обновления OpenSSL.

  • net.box будет использовать индексы, начинающиеся с 1, для space.name.index[x].parts. Проблемы 1729.

  • Бинарный файл Tarantool’а будет динамически связываться с libssl.so во время компиляции вместо загрузки во время выполнения.

  • Пакеты Debian и Ubuntu будут использовать встроенную конфигурацию systemd вместе с вышедшими из употребления скриптами sysvinit.

    В systemd появляется возможность управления несколькими экземплярами. Чтобы обновить, выполните следующие действия:

    1. Установите новые пакеты версии 1.7.2.
    2. Убедитесь в наличии файла ИМЯ_ЭКЗЕМПЛЯРА.lua в директории /etc/tarantool/instances.enabled.
    3. Остановите ЭКЗЕМПЛЯР с помощью tarantoolctl stop ИМЯ_ЭКЗЕМПЛЯРА.
    4. Запустите ЭКЗЕМПЛЯР с помощью systemctl start tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    5. Включите ЭКЗЕМПЛЯР во время загрузки системы с помощью systemctl enable tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    6. Введите команду systemctl disable tarantool; update-rc.d tarantool remove, чтобы отключить надстройки, совместимые с sysvinit.

    Для получения дополнительной информации см. комментарии к проблеме 1291 и главу по администрированию серверной части.

  • Debian and Ubuntu packages start a ready-to-use example.lua instance on a clean installation of the package. The default instance grants universe permissions for guest user and listens on «localhost:3313».

  • Пакеты для Fedora 22 объявлены устаревшими (прекращение поддержки).

Версия 1.7.1

Тип версии: альфа. Дата выхода: 2016-07-11.

Объявление о выходе: https://groups.google.com/forum/#!topic/tarantool/KGYj3VKJKb8

Данная сборка представляет собой первую альфа-версию в серии 1.7. Основной функцией данной версии является новый движок базы данных под названием «vinyl». Vinyl представляет собой оптимизированный для записи движок базы данных, который позволяет сохранять объем сохраняемых данных, превышающий объем доступной памяти в 10-100 раз. Vinyl является продолжением движка Sophia из версии 1.6, а именно ответвлением и дальним родственником Sophia Дмитрия Симоненко. Новый Vinyl заменяет Sophia. Он реализован в виде журнально-структурированного дерева со слиянием (log-structured merge tree – LSM-tree). Однако усовершенствование таких традиционных недостатков журнально-структурированных хранилищ, как низкая производительность при чтении и непредсказуемая задержка во времени при записи, стоит больших усилий. Отдельный индекс секционирован по диапазонам между многими структурами данных LSM, в каждой из который находятся собственные буферы оперативной памяти регулируемого размера. Секционирование по диапазонам позволяет осуществить слияние LSM-уровней, чтобы добиться большей детализации, а также отдать приоритет горячим диапазонам по отношению к холодным в том, что касается доступа к ресурсам, таким как оперативная память и ввод-вывод. Планировщик слияний предназначен для сведения времени задержки записи к минимуму, а также для поддержания производительности при чтении в приемлемых пределах. На сегодняшний день Vinyl поддерживает только первичные индексы. Индекс может состоять из 256 частей, как в MemTX’е, по сравнению с 8 в Sophia. Поддерживает чтение по компонентам ключа. Вскоре ожидается поддержка непоследовательных составных ключей, а также вторичных ключей. Наше намерение заключается в том, чтобы убрать любые ограничения, которые есть сейчас в Vinyl’е, чтобы сделать его полноценным компонентом Tarantool’а.

Изменения или добавления функциональности:

  • Дисковый движок, который в более ранних версиях Tarantool’а назывался sophia или phia, заменен новым движком под названием vinyl.
  • Добавлены новые типы индексируемых полей.
  • Обновлена версия LuaJIT.
  • Поддерживается автоматическая настройка набора реплик, что существенно упрощает настройку нового набора реплик.
  • Функция space_object:inc() объявлена устаревшей.
  • Функция space_object:dec() объявлена устаревшей.
  • Добавлена функция space_object:bsize().
  • Удалена функция box.coredump(), аналог см. в главе Создание дампов памяти.
  • Добавлена опция настройки hot_standby (горячий резерв).
  • Исправленные или переименованные конфигурационные параметры:
    • slab_alloc_arena (в гигабайтах) в memtx_memory (в байтах),
    • slab_alloc_minimal в memtx_min_tuple_size,
    • slab_alloc_maximal в memtx_max_tuple_size,
    • replication_source в replication,
    • snap_dir в memtx_dir,
    • logger в log,
    • logger_nonblock в log_nonblock,
    • snapshot_count в checkpoint_count,
    • snapshot_period в checkpoint_interval,
    • panic_on_wal_error и panic_on_snap_error объединены в force_recovery.
  • В версиях Tarantool’а до 1.8 можно использовать устаревшие параметры как для начальной, так и для рабочей конфигурации, но в таком случае Tarantool выдаст предупреждение. Также можно указывать как устаревшие, так и новые параметры при условии, что их значения согласованы. В противном случае, Tarantool выдаст ошибку.
  • У кластера репликации появилась возможность автоматической настройки, что существенно упрощает настройку нового кластера.
  • Новые индексируемые типы данных: INTEGER (целое число) и SCALAR (скаляр).
  • Рефакторинг кода и улучшение производительности.
  • LuaJIT обновлен до версии 2.1-beta116.