Версия:

Release Notes
Release Notes

Release Notes

Release Notes

The Release Notes are summaries of significant changes introduced in Tarantool 2.1.0, 2.0.4, 1.10.2, 1.9.0, 1.8.1, 1.7.6, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.7.1, 1.6.9, 1.6.8, and 1.6.6.

Более мелкие изменения и исправления дефектов указаны в отчетах о выпущенных стабильных релизах (milestone = closed) на GitHub.

Version 2.x

Tarantool 2.x is backward compatible with Tarantool 1.10.x in binary data layout, client-server protocol and replication protocol.

Release 2.1.0

Release type: beta. Release date: 2018-11-14.

Announcement: https://github.com/tarantool/tarantool/releases/tag/2.1.0.

This release resolves all major bugs since 2.0.4 alpha and extends Tarantool’s SQL feature set.

Release 2.0.4

Release type: alpha. Release date: 2018-02-15.

Announcement: https://github.com/tarantool/tarantool/releases/tag/2.0.4.

This is a successor of the 1.8.x releases. It improves the overall stability of the SQL engine and has some new features.

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

  • Added support for SQL collations by incorporating libICU character set and collation library.
  • IPROTO interface was extended to support SQL queries.
  • net.box subsystem was extended to support SQL queries.
  • Enabled ANALYZE statement to produce correct results, necessary for efficient query plans.
  • Enabled savepoints functionality. SAVEPOINT statement works w/o issues.
  • Enabled ALTER TABLE ... RENAME statement.
  • Improved rules for identifier names: now fully consistent with Lua frontend.
  • Enabled support for triggers; trigger bodies now persist in Tarantool snapshots and survive server restart.
  • Significant performance improvements.

Версия 1.10

Release 1.10.2

Release type: stable (lts). Release date: 2018-10-13. Tag: 1-10-2.

Announcement: https://github.com/tarantool/tarantool/releases/tag/1.10.2.

This is the first stable (lts) release in the 1.10 series. Also, Tarantool 1.10.2 is a major release that deprecates Tarantool 1.9.2. It resolves 95 issues since 1.9.2.

Tarantool 1.10.x is backward compatible with Tarantool 1.9.x in binary data layout, client-server protocol and replication protocol. You can upgrade using the box.schema.upgrade() procedure.

The goal of this release is to significantly increase vinyl stability and introduce automatic rebootstrap of a Tarantool replica set.

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

  • (Engines) support ALTER for non-empty vinyl spaces. Issue 1653.
  • (Engines) tuples stored in the vinyl cache are not shared among the indexes of the same space. Issue 3478.
  • (Engines) keep a stack of UPSERTS in vy_read_iterator. Issue 1833.
  • (Engines) box.ctl.reset_stat(), a function to reset vinyl statistics. Issue 3198.
  • (Server) configurable syslog destination. Issue 3487.
  • (Server) allow different nullability in indexes and format. Issue 3430.
  • (Server) allow to back up any checkpoint, not just the last one. Issue 3410.
  • (Server) a way to detect that a Tarantool process was started / restarted by tarantoolctl (TARANTOOLCTL and TARANTOOL_RESTARTED env vars). Issues 3384, 3215.
  • (Server) net_msg_max configuration parameter to restrict the number of allocated fibers. Issue 3320.
  • (Replication) display the connection status if the downstream gets disconnected from the upstream (box.info.replication.downstream.status = disconnected). Issue 3365.
  • (Replication) replica-local spaces Issue 3443.
  • (Replication) replication_skip_conflict, a new option in box.cfg{} to skip conflicting rows in replication. Issue 3270.
  • (Replication) remove old snapshots which are not needed by replicas. Issue 3444.
  • (Replication) log records which tried to commit twice. Issue 3105.
  • (Lua) new function fiber.join(). Issue 1397.
  • (Lua) new option names_only to tuple:tomap(). Issue 3280.
  • (Lua) support custom rock servers (server and only-server options for tarantoolctl rocks command). Issue 2640.
  • (Lua) expose on_commit/on_rollback triggers to Lua; Issue 857.
  • (Lua) new function box.is_in_txn() to check if a transaction is open; Issue 3518.
  • (Lua) tuple field access via a json path (by number, name, and path); Issue 1285.
  • (Lua) new function space:frommap(); Issue 3282.
  • (Lua) new module utf8 that implements libicu’s bindings for use in Lua; Issues 3290, 3385.

Версия 1.9

Release 1.9.0

Release type: stable. Release date: 2018-02-26. Tag: 1.9.0-4-g195d446.

Announcement: https://github.com/tarantool/tarantool/releases/tag/1.9.0.

This is the successor of the 1.7.6 stable release. The goal of this release is increased maturity of vinyl and master-master replication, and it contributes a number of features to this cause. Please follow the download instructions at https://tarantool.io/en/download/download.html to download and install a package for your operating system.

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

  • (Security) it is now possible to block/unblock users. Issue 2898.
  • (Security) new function box.session.euid() to return effective user. Effective user can be different from authenticated user in case of setuid functions or box.session.su. Issue 2994.
  • (Security) new super role, with superuser access. Grant „super“ to guest to disable access control. Issue 3022.
  • (Security) on_auth trigger is now fired in case of both successful and failed authentication. Issue 3039.
  • (Replication/recovery) new replication configuration algorithm: if replication doesn’t connect to replication_quorum peers in replication_connect_timeout seconds, the server start continues but the server enters the new orphan status, which is basically read-only, until the replicas connect to each other. Issues 3151 and 2958.
  • (Replication/recovery) after replication connect at startup, the server does not start processing write requests before syncing up syncing up with all connected peers.
  • (Replication/recovery) it is now possible to explicitly set instance_uuid and replica set uuid as configuration parameters. Issue 2967.
  • (Replication/recovery) box.once() no longer fails on a read-only replica but waits. Issue 2537.
  • (Replication/recovery) force_recovery can now skip a corrupted xlog file. Issue 3076.
  • (Replication/recovery) improved replication monitoring: box.info.replication shows peer ip:port and correct replication lag even for idle peers. Issues 2753 and 2689.
  • (Application server) new before triggers which can be used for conflict resolution in master-master replication. Issue 2993.
  • (Application server) http client now correctly parses cookies and supports http+unix:// paths. Issues 3040 and 2801.
  • (Application server) fio rock now supports file_exists(), rename() works across filesystems, and read() without arguments reads the whole file. Issues 2924, 2751 and 2925.
  • (Application server) fio rock errors now follow Tarantool function call conventions and always return an error message in addition to the error flag.
  • (Application server) digest rock now supports pbkdf2 password hashing algorithm, useful in PCI/DSS compliant applications. Issue 2874.
  • (Application server) box.info.memory() provides a high-level overview of server memory usage, including networking, Lua, transaction and index memory. Issue 934.
  • (Database) it is now possible to add missing tuple fields to an index, which is very useful when adding an index along with the evolution of the database schema. Issue 2988.
  • (Database) lots of improvements in field type support when creating or altering spaces and indexes. Issues 2893, 3011 and 3008.
  • (Database) it is now possible to turn on is_nullable property on a field even if the space is not empty, the change is instantaneous. Issue 2973.
  • (Database) logging has been improved in many respects: individual messages (issues 1972, 2743, 2900), more logging in cases when it was useful (issues 3096, 2871).
  • (Vinyl storage engine) it is now possible to make a unique vinyl index non-unique without index rebuild. Issue 2449.
  • (Vinyl storage engine) improved UPDATE, REPLACE and recovery performance in presence of secondary keys. Issues 2289, 2875 and 3154.
  • (Vinyl storage engine) space:len() and space:bsize() now work for vinyl (although they are still not exact). Issue 3056.
  • (Vinyl storage engine) recovery speed has improved in presence of secondary keys. Issue 2099.
  • (Builds) Alpine Linux support. Issue 3067.

Version 1.8

Release 1.8.1

Release type: alpha. Release date: 2017-05-17. Tag: 1.8.1.

Announcement: https://groups.google.com/forum/#!msg/tarantool-ru/XYaoqJpc544/mSvKrYwNAgAJ.

This is an alpha release which delivers support for a substantial subset of the ISO/IEC 9075:2011 SQL standard, including joins, subqueries and views. SQL is a major feature of the 1.8 release series, in which we plan to add support for ODBC and JDBC connectors, SQL triggers, prepared statements, security and roles, and generally ensure SQL is a first class query language in Tarantool.

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

  • A new function box.sql.execute() was added to query Tarantool databases using SQL statements, e.g.:

    tarantool> box.sql.execute([[SELECT * FROM _schema]]);
    
  • SQL and Lua are fully interoperable.

  • New meta-commands introduced to Tarantool’s console.

    You can now set input language to either SQL or Lua, e.g.:

    tarantool> \set language sql
    tarantool> SELECT * FROM _schema;
    tarantool> \set language lua
    tarantool> print("Hello, world!")
    
  • Most SQL statements are supported:

    • CREATE/DROP TABLE/INDEX/VIEW

      tarantool> CREATE TABLE table1 (column1 INTEGER PRIMARY KEY, column2 VARCHAR(100));
      
    • INSERT/UPDATE/DELETE statements e.g.:

      tarantool> INSERT INTO table1 VALUES (1, 'A');
      ...
      tarantool> UPDATE table1 SET column2 = 'B';
      
    • SELECT statements, including complex complicated variants which include multiple JOINs, nested SELECTs etc. e.g.:

      tarantool> SELECT sum(column1) FROM table1 WHERE column2 LIKE '_B' GROUP BY column2;
      
    • WITH statements e.g.

      tarantool> WITH cte AS ( SELECT SUBSTR(column2,1,2), column1 FROM table1 WHERE column1 >= 0) SELECT * FROM cte;
      
    • SQL schema is persistent, so it is able to survive snapshot()/restore() sequence.

    • SQL features are described in a tutorial.

Версия 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 (возможность допустить неопределенное значение), имена полей).

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

  • Layout of box.space._index has been extended to support is_nullable and collation features. All new indexes created on columns with is_nullable or collation properties will have the new definition format. Please update your client libraries if you plan to use these new features. Issue 2802
  • fiber_name() now raises an exception instead of truncating long fiber names. We found that some Lua modules such as expirationd use fiber.name() as a key to identify background tasks. If a name is truncated, this fact was silently missed. The new behavior allows to detect bugs caused by fiber.name() truncation. Please use fiber.name(name, { truncate = true }) to emulate the old behavior. Issue 2622
  • space:format() is now validated on DML operations. Previously space:format() was only used by client libraries, but starting from Tarantoool 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.

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

  • Hybrid schema-less + schemaful data model. Earlier Tarantool versions allowed to store arbitrary MessagePack documents in spaces. Starting from Tarantool 1.7.6, you can use space:format() to define schema restrictions and constraints for tuples in spaces. Defined field types are automatically validated on every DML operation, and defined field names can be used instead of field numbers in Lua code. A new function tuple:tomap() was added to convert a tuple into a key-value Lua dictionary.
  • Collation and Unicode support. By default, when Tarantool compares strings, it takes into consideration only the numeric value of each byte in the string. To allow the ordering that you see in phone books and dictionaries, Tarantool 1.7.6 introduces support for collations based on the Default Unicode Collation Element Table (DUCET) and the rules described in Unicode® Technical Standard #10 Unicode Collation Algorithm (UTS #10 UCA) See collations.
  • NULL values in unique and non-unique indexes. By default, all fields in Tarantool are «NOT NULL». Starting from Tarantool 1.7.6, you can use is_nullable option in space:format() or inside an index part definition to allow storing NULL in indexes. Tarantool partially implements three-valued logic from the SQL standard and allows storing multiple NULL values in unique indexes. Issue 1557.
  • Sequences and a new implementation of auto_increment(). Tarantool 1.7.6 introduces new sequence number generators (like CREATE SEQUENCE in SQL). This feature is used to implement new persistent auto increment in spaces. Issue 389.
  • Vinyl: появляется блокировка разрывов в менеджере транзакций Vinyl’а. Новый блокирующий механизм в менеджере Vinyl TX снижает количестве конфликтов в транзакциях. Проблема 2671.
  • net.box: on_connect and on_disconnect triggers. Issue 2858.
  • Structured logging in JSON format. Issue 2795.
  • (Lua) Lua: string.strip() Issue 2785.
  • (Lua) added base64_urlsafe_encode() to digest module. Issue 2777.
  • Запись конфликтов в ключах в журнал в рамках репликации мастер-мастер. Проблема 2779.
  • Allow to disable backtrace in fiber.info(). Issue 2878.
  • Имплементирована возможность создания сторонних библиотек tarantoolctl rocks make *.spec. Проблема 2846 <https://github.com/tarantool/tarantool/issues/2846>`_.
  • Новая функция загрузчика, используемого по умолчанию, позволяет искать модули .rocks в родительской иерархии. Проблема 2676.
  • SOL_TCP options support in socket:setsockopt(). Issue 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) a new force_recovery mode to recover broken disk files. Use box.cfg{force_recovery=true} to recover corrupted data files after hardware issues or power outages. Issue 2253.
  • (Vinyl) index options can be changed on the fly without rebuild. Now page_size, run_size_ratio, run_count_per_level and bloom_fpr index options can be dynamically changed via index:alter(). The changes take effect in newly created data files only. Issue 2109.
  • (Vinyl) improve box.info.vinyl() and index:info() output. Issue 1662.
  • (Vinyl) introduce box.cfg.vinyl_timeout option to control quota throttling. Issue 2014.
  • Memtx: stable index:pairs() iterators for the TREE index. TREE iterators are automatically restored to a proper position after index’s modifications. Issue 1796.
  • (Memtx) predictable order for non-unique TREE indexes. Non-unique TREE indexes preserve the sort order for duplicate entries. Issue 2476.
  • (Memtx+Vinyl) dynamic configuration of max tuple size. Now box.cfg.memtx_max_tuple_size and box.cfg.vinyl_max_tuple_size configuration options can be changed on the fly without need to restart the server. Issue 2667.
  • (Memtx+Vinyl) new implementation. Space truncation doesn’t cause re-creation of all indexes any more. Issue 618.
  • Extended the maximal length of all identifiers from 32 to 65k characters. Space, user and function names are not limited by 32 characters anymore. Issue 944.
  • Heartbeat messages for replication. Replication client now sends the selective acknowledgments for processed records and automatically re-establish stalled connections. This feature also changes box.info.replication[replica_id].vclock. to display committed vclock of remote replica. Issue 2484.
  • Отслеживание удаленных реплик во время обслуживания WAL. Мастер репликации будет автоматически сохранять xlog-файлы, необходимые для удаленных реплик. Проблема 748.
  • Enabled box.tuple.new() to work without box.cfg(). Issue 2047.
  • box.atomic(fun, …) wrapper to execute function in a transaction. Issue 818.
  • box.session.type() helper to determine session type. Issue 2642.
  • Hot code reload for stored C stored procedures. Use box.schema.func.reload('modulename.function') to reload dynamic shared libraries on the fly. Issue 910.
  • string.hex() and str:hex() Lua API. Issue 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 logger now support non-blocking mode. box.cfg{log_nonblock=true} now also works for syslog logger. Issue 2466.
  • Added a VERBOSE log level beyond INFO. Issue 2467.
  • Tarantool now automatically makes snapshots every hour. Please set box.cfg{checkpoint_interval=0 to restore pre-1.7.5 behaviour. Issue 2496.
  • Increase precision for percentage ratios provoded by box.slab.info(). Issue 2082.
  • Stack traces now contain symbols names on all supported platforms. Previous versions of Tarantool didn’t display meaningful function names in fiber.info() on non-x86 platforms. Issue 2103.
  • Появилась возможность создания файбера с заданным размером стека из API для языка C. Проблема 2438.
  • В API для языка C добавлена функция ipc_cond. Проблема 1451.

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

  • http.client (built-in) - libcurl-based HTTP client with SSL/TLS support. Issue 2083.
  • iconv (built-in) - bindings for iconv. Issue 2587.
  • authman - API для регистрации пользователя и входа в систему с использованием email и социальных сетей.
  • document - store nested documents in Tarantool.
  • synchronized - критические секции для Lua.

Версия 1.7.4

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

Объявление о выходе: https://github.com/tarantool/tarantool/releases/tag/1.7.4 or 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 and box.info.replication format was changed to display information about upstream and downstream connections (Issue 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.

  • Removed Lua 5.0 compatible defines and functions (Issue 2396):

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

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

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

  • (Vinyl) Фильтры Блума для отсортированных забегов. Фильтр Блума — это вероятностная структура данных, которую можно использовать для проверки наличия необходимого ключа в файле забега без считывания самого файла с диска. Фильтр Блума может выдавать ложноположительное срабатывание (элемента в множестве нет, но структура данных сообщает, что он есть), но не ложноотрицательное. Данная функция уменьшает объем поиска, необходимый для случайного просмотра, и ускоряет операции REPLACE/DELETE with enabled secondary keys. Проблема 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) implemented low-level Lua API to create consistent backups. of Memtx + Vinyl data. The new feature provides box.backup.start()/stop() functions to create backups of all spaces. box.backup.start() pauses the Tarantool garbage collector and returns the list of files to copy. These files then can be copied be any third-party tool, like cp, ln, tar, rsync, etc. box.backup.stop() lets the garbage collector continue. Created backups can be restored instantly by copying into a new directory and starting a new Tarantool instance. No special preparation, conversion or unpacking is needed. Issue 1916.

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

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

  • LuaJIT was rebased on the latest 2.1.0b3 with out patches (Issue 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.

  • xlogs now can be rotated based on size (wal_max_size) as well as the number of written rows (rows_per_wal). Issue 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.

  • Removed noisy «client unix/: connected» messages from logs. Use box.session.on_connect()/on_disconnect() triggers instead. Issue 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.
  • A new implementation of net.box improving performance and solving problems when the Lua garbage collector handles dead connections. Issues 799, 800, 1138 and 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/instace.enabled.
    3. Остановите ЭКЗЕМПЛЯР с помощью tarantoolctl stop ИМЯ_ЭКЗЕМПЛЯРА.
    4. Запустите ЭКЗЕМПЛЯР с помощью systemctl start tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    5. Включите ЭКЗЕМПЛЯР во время загрузки системы с помощью systemctl enable tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    6. Введите команду systemctl disable tarantool; update-rc.d tarantool remove, чтобы отключить надстройки, совместимые с sysvinit.

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

  • Пакеты для Debian и Ubuntu запускают готовый к использованию экземпляр example.lua при чистой установке пакета. В экземпляре, используемом по умолчанию, предоставлены права на universe для пользователя guest и настроено прослушивание по «locahost: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.

Версия 1.6

Версия 1.6.9

Тип версии: обновленная. Дата выхода: 2016-09-27. Тег версии: 1.6.9-4-gcc9ddd7.

С 15 февраля 2017 года вследствие проблемы № 2040 Удалить движок sophia из версии 1.6, движок базы данных под названием sophia отсутствует. В версии 1.7 его заменит движок базы данных vinyl.

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

  • Поддержка SHA-0 (digest.sha()) прекращается по причине обновления OpenSSL.
  • Бинарный файл Tarantool’а будет динамически связываться с libssl.so во время компиляции вместо загрузки во время выполнения.
  • Пакеты для Fedora 22 объявлены устаревшими (прекращение поддержки).

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

  • Автозаполнение по Tab в интерактивной консоли. Проблема 86
  • Принимаются во внимание переменные окружения LUA_PATH и LUA_CPATH, как в PUC-RIO Lua. Проблема 1428
  • Поиск по библиотекам .dylib, а также .so в OS X. Проблема 810.
  • Новая опция box.cfg { read_only = true } для моделирования поведения главный-ведомый. Проблема 246
  • Опция if_not_exists = true добавлена в box.schema.user.grant. Проблема 1683
  • Функции clock_realtime()/monotonic() добавлены в общедоступный API для языка C. Проблема 1455
  • Появляется space:count(key, opts) в качестве псевдонима для space.index.primary:count(key, opts). Проблема 1391
  • Обновление скрипта для 1.6.4 -> 1.6.8 -> 1.6.9. Проблема 1281
  • Поддержка OpenSSL 1.1. Проблема 1722

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

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

Версия 1.6.8

Тип версии: обновленная. Дата выхода: 2016-02-25. Тег версии: 1.6.8-525-ga571ac0.

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

  • RPM-пакеты для CentOS 7 / RHEL 7 Fedora 22+ будут использовать встроенную конфигурацию systemd без устаревших скриптов sysvinit. В systemd появляется возможность управления несколькими экземплярами. Чтобы обновить, выполните следующие действия:

    1. Убедитесь в наличии файла ИМЯ_ЭКЗЕМПЛЯРА.lua в директории /etc/tarantool/instace.available.
    2. Остановите ЭКЗЕМПЛЯР с помощью tarantoolctl stop ИМЯ_ЭКЗЕМПЛЯРА.
    3. Запустите ЭКЗЕМПЛЯР с помощью systemctl start tarantool@ИМЯ_ЭКЗЕМПЛЯРА.
    4. Включите ЭКЗЕМПЛЯР во время загрузки системы с помощью systemctl enable tarantool@ИМЯ_ЭКЗЕМПЛЯРА.

    Директория /etc/tarantool/instance.enabled больше не используется для платформ, запускаемых по systemd.

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

  • Движок Sophia был обновлен до версии 2.1 для исправления ошибок upsert, нарушения целостности данных в памяти и других ошибок. Sophia версии 2.1 не поддерживает старый формат данных версии 1.1. Используйте репликацию в Tarantool’е для обновления. Проблема 1222

  • Ubuntu Vivid, Fedora 20, Fedora 21 объявлены устаревшими по причине прекращения поддержки.

  • i686-пакеты объявлены устаревшими. Используйте наши спецификации по RPM и DEB для сборки на своей инфраструктуре.

  • Обновите yum.repos.d и/или apt sources.list.d в соответствии с инструкциями по ссылке http://tarantool.org/download.html

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

  • Tarantool в версии 1.6.8 полностью поддерживает процессоры ARMv7 и ARMv8 (aarch64). Теперь можно будет использовать Tarantool на самых разных пользовательских устройствах от популярного Raspberry PI 2 и до плат размером с монету и безымянных мини-микро-нано-компьютеров. Проблема 1153. (На qemu также работает хорошо, но у нас нет оборудования, чтобы проверить.)

  • Функции компаратора кортежей были оптимизированы, чтобы обеспечить повышение производительности на 30%, когда индексный ключ состоит из 2, 3 и более частей. Проблема 969.

  • Изменения распределителя кортежей дают улучшение производительности еще на 15%. Проблема 1298

  • Производительность передачи данных репликации была улучшена путем уменьшения объема данных в повторном сканировании. Проблема 11150

  • В демоне создания снимков появилась произвольная задержка, что снижает возможность того, что несколько экземпляров будут делать снимки одновременно. Проблема 732.

  • Движок базы данных Sophia был обновлен до версии 2.1:

    • изоляция сериализуемых снимков (SSI — Serializable Snapshot Isolation),
    • режим хранения в оперативной памяти,
    • режим хранения без кэша,
    • режим хранения в кэше с подключением к базе данных,
    • внедренный AMQ-фильтр,
    • режим LRU (удаление страниц, которые дольше всего не использовались),
    • отдельная компрессия горячих и холодных данных,
    • внедрение снимков для быстрого восстановления,
    • реорганизация и исправление ошибок в upsert,
    • новые метрики производительности.

    Обратите внимание на «Несовместимые изменения» выше.

  • Возможно удаление серверов с ненулевым LSN из спейса _cluster. Проблема 1219.

  • net.box теперь автоматически перезагружает схемы спейса и индексов. Проблема 1183.

  • Максимальное количество индексов в спейсе было увеличено до 128. Проблема 1311.

  • Новая встроенная конфигурацию systemd с поддержкой управления экземплярами и контролем демонов (только CentOS 7 и Fedora 22+). См. «Несовместимые изменения» выше. Проблема 1264.

  • Пакет Tarantool’а принят в официальный репозиторий Fedora (https://apps.fedoraproject.org/packages/tarantool).

  • Пакет Tarantool’а (OS X) принят в официальный репозиторий Homebrew (http://brewformulas.org/tarantool).

  • Поддержка компилятора Clang добавлена в FreeBSD. Проблема 786.

  • Добавлена поддержка библиотеки musl libc, используемой образами Alpine Linux и Docker. Проблема 1249.

  • Добавлена поддержка GCC 6.0.

  • Получили поддержку Ubuntu Wily, Xenial и Fedora 22, 23 и 24, для которых мы создаем официальные пакеты.

  • box.info.cluster.uuid можно использовать для получения UUID кластера. Проблема 1117.

  • Многочисленные исправления в документации, добавлена документация по пакетам syslog, clock, fiber.storage, встроенное практическое задание получило обновление.

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

  • Tarantool перешел на новую облачную инфраструктуру на основе Docker. Новый инструмент интеграции разработки buildbot значительно уменьшает время передачи коммитов в пакеты. Официальные репозитории по ссылке http://tarantool.org теперь содержат последнюю версию сервера, модулей и коннекторов. См. http://github.com/tarantool/build
  • Репозитории по ссылке http://tarantool.org/download.html were был перенесены в облачное хранилище http://packagecloud.io (при поддержке Amazon AWS). Благодарим packagecloud.io за поддержку свободного ПО!
  • memcached — внедрение текстового и бинарного протокола memcached для Tarantool’а. Превращает Tarantool в memcached с доступом к базе данных с репликацией по схеме мастер-мастер. См. https://github.com/tarantool/memcached
  • migrate — модуль Tarantool’а для миграции с версии 1.5 на версию 1.6. См. https://github.com/bigbes/migrate
  • cqueues — асинхронный Lua-каркас для работы по сети с потоками и уведомлениями (разработал @daurnimator). Проблема 1204.

Версия 1.6.7

Тип версии: обновленная. Дата выхода: 2015-11-17.

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

  • Изменился синтаксис команды upsert, и из нее был удален дополнительный аргумент key. Первичный ключ для поиска всегда берется из кортежа, который является вторым аргументом в upsert. upsert() добавили довольно поздно в рабочем цикле, и в проекте была очевидная ошибка, которую нам пришлось исправлять. Извините.
  • Функцию fiber.channel.broadcast() удалили, потому что ее никто не использовал, и она работала некорректно.
  • Команда reload утилиты tarantoolctl переименована в``eval``.

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

  • Опция logger допускает синтаксис для вывода syslog. Используйте синтаксис URI для места назначения журнала файла, конвейера или syslog.
  • replication_source принимает массив URI, так что в каждой реплике может быть до 30 узлов.
  • RTREE-индекс принимает два типа функций distance: euclid и manhattan.
  • fio.abspath() — новая функция в модуле fio для ковертации относительного пути в абсолютный.
  • Название процесса теперь можно определить с помощью встроенного модуля title.
  • В данной версии используется LuaJIT 2.1.

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

  • memcached помогает Tarantool’у понимать бинарный протокол Memcached. Поддержка текстового протокола находится в процессе разработки и будет добавлена в отдельный модуль без изменений основных компонентов.

Версия 1.6.6

Тип версии: обновленная. Дата выхода: 2015-08-28.

Tarantool версии 1.6 больше не получает значимых новых функций, но продолжает поддерживаться. Разработчики сосредоточили свои усилия на версии 1.9.

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

  • Появляется новая схема системного спейса _index для размещения многомерных RTREE-индексов. Tarantool 1.6.6 нормально работает со старыми снимками и системными спейсами, но нельзя будет запустить Tarantool версии 1.6.5 с директорий, созданной в Tarantool’е версии 1.6.6, как нельзя будет ввести запрос в Tarantool 1.6.6 с net.box версии 1.6.5.
  • Переименование box.info.snapshot_pid в box.info.snapshot_in_progress

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

  • Потоковая архитектура для работы по сети. Сетевой ввод-вывод окончательно переведен на отдельный поток, что увеличит производительность отдельного экземпляра до 50%.
  • Потоковая архитектура для создания контрольных точек. Tarantool больше не делает ответвлений для создания снимка, а использует отдельный поток, получая доступ к данным с помощью вида постоянного просмотра. Это помогает устранить скачки задержки времени во время создания снимков.
  • Хранимые процедуры на языках C/C++. Хранимые процедуры на языках C/C++ дают скорость (в 3-4 раза больше по сравнению с Lua-версией по нашим подсчетам), а также возможность неограниченного расширения. Поскольку процедуры C/C++ выполняются там же, где располагается база данных, они могут с легкостью повредить базу данных. См. API для языка C.
  • Многомерный RTREE-индекс. RTREE-индекс теперь поддерживает большое количество измерений (до 32). Cтруктура данных RTREE была оптимизирована так, чтобы действительно использовать R*-TREE. Мы работаем над дальнейшим улучшением индекса, в частности, над функцией конфигурации расстояния. См. https://github.com/tarantool/tarantool/wiki/R-tree-index-quick-start-and-usage
  • Sophia 2.1.1 с поддержкой компрессии и составных первичных ключей. См. https://groups.google.com/forum/#!topic/sophia-database/GfcbEC7ksRg
  • В бинарном протоколе и в хранимых функциях доступна новая команда upsert. Ключевое преимущество команды upsert в том, что она работает намного быстрее с хранилищами, оптимизированными для чтения (движок базы данных sophia), однако есть также некоторые оговорки. Для получения дополнительной информации см. проблему 905. И хотя преимущество производительности upsert наиболее очевидно с движком sophia, команда работает со всеми движками базы данных.
  • Более точная информация диагностики памяти для файберов, кортежей и индексов. Используйте новую команду box.slab.stats() для получения подробной информация о кортежах/индексах, команда fiber.info() отобразит информацию о памяти, занятой файбером.
  • Операции update и delete работают с использованием вторичного индекса, если индекс уникальный.
  • Триггеры для аутентификации. Установите триггеры box.session.on_auth для отслеживания событий аутентификации. API для триггеров улучшили, чтобы он отображал все заданные триггеры, старые триггеры легко удалить.
  • Разнообразные улучшения производительности встроенного модуля net.box.
  • Оптимизация производительности BITSET-индекса.
  • panic_on_wal_error представляет собой динамический параметр конфигурации.
  • Поле iproto sync доступно в Lua как session.sync().
  • box.once() - a new method to invoke code once in an instance and replica set lifetime. Use once() to set up spaces and uses, as well as do schema upgrade in production.
  • box.error.last() возвращает последнюю ошибку в сессии.

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

  • Следующие модули LuaJIT 2.0 теперь являются встроенными: jit.*, jit.dump, jit.util, jit.vmdef. См. http://luajit.org/ext_jit.html
  • strict — встроеный пакет, который запрещает использование необъявленных переменных в Lua. Работа ведется в таком режиме, когда Tarantool компилируется с отладкой. Чтобы включить/отключить этот режим, используйте require('strict').on()/require('strict').off() соответственно.
  • pg и mysql — модули, доступные по ссылке http://rocks.tarantool.org — работают с MySQL и PostgreSQL из Tarantool’а.
  • gperftools — модуль, доступный по ссылке http://rocks.tarantool.org — получает данные о производительности с помощью Google gperf из Tarantool’а.
  • csv — встроенный модуль для разбора и загрузки данных в формате CSV (значения, разделенные запятыми).

Поддержка новой платформы:

  • Fedora 22, Ubuntu Vivid