Tarantool Выпуск 1.7.4
Total Page:16
File Type:pdf, Size:1020Kb
Tarantool Выпуск 1.7.4 мар. 14, 2019 Оглавление 1 Что нового в Tarantool 1.7?2 2 What’s new in Tarantool 1.6.9 after February 15, 2017?4 3 What’s new in Tarantool 1.6?5 4 Общие сведения 6 4.1 Сервер приложений + СУБД...................................6 4.2 Возможности СУБД........................................7 5 Руководство пользователя8 5.1 Предисловие.............................................8 5.2 Начало работы...........................................9 5.3 Функционал СУБД......................................... 13 5.4 Сервер приложений........................................ 30 5.5 Администрирование серверной части.............................. 58 5.6 Репликация............................................. 76 5.7 Коннекторы............................................. 96 5.8 Вопросы и ответы......................................... 107 6 Справочники 109 6.1 Built-in modules reference..................................... 109 6.2 Справочник по сторонним библиотекам............................. 244 6.3 Справочник по настройке..................................... 263 6.4 Utility tarantoolctl .......................................... 280 6.5 Tips on Lua syntax......................................... 280 7 Практикум 282 7.1 Практические задания на Lua.................................. 282 7.2 Практическое задание на C.................................... 294 7.3 libslave tutorial........................................... 299 8 Contributor’s Guide 303 8.1 Справочник по C API....................................... 303 8.2 Internals............................................... 325 8.3 Build and contribute........................................ 338 8.4 Guidelines.............................................. 343 i Lua Module Index 382 ii Tarantool, Выпуск 1.7.4 Здесь собрана информация о существенных изменениях, которые произошли в конкретных версиях Tarantool’а. Более мелкие изменения и исправления дефектов указаны в отчетах о выпущенных стабильных рели- зах (milestone = closed) на GitHub. Оглавление 1 ГЛАВА 1 Что нового в Tarantool 1.7? The disk-based storage engine, which was called sophia or phia in earlier versions, is superseded by the vinyl storage engine. Добавлены новые типы индексируемых полей. Обновлена версия LuaJIT. Automatic replica set bootstrap (for easier configuration of a new replica set) is supported. Функция space_object:inc() объявлена устаревшей. Функция space_object:dec() объявлена устаревшей. The space_object:bsize() function is added. The box.coredump() function is removed, for an alternative see Core dumps. The hot_standby configuration option is added. Configuration parameters revised: Parameters renamed: – slab_alloc_arena (in gigabytes) to memtx_memory (in bytes), – slab_alloc_minimal to memtx_min_tuple_size, – slab_alloc_maximal to memtx_max_tuple_size, – replication_source to replication, – snap_dir to memtx_dir, – logger to log, – logger_nonblock to log_nonblock, – snapshot_count to checkpoint_count, – snapshot_period to checkpoint_interval, – panic_on_wal_error and panic_on_snap_error united under force_recovery. 2 Tarantool, Выпуск 1.7.4 Until Tarantool 1.8, you can use deprecated parameters for both initial and runtime configuration, but Tarantool will display a warning. Also, you can specify both deprecated and up-to-date parameters, provided that their values are harmonized. If not, Tarantool will display an error. 3 ГЛАВА 2 What’s new in Tarantool 1.6.9 after February 15, 2017? Due to Tarantool issue#2040 Remove sophia engine from 1.6 there no longer is a storage engine named sophia. It will be superseded in version 1.7 by the vinyl storage engine. 4 ГЛАВА 3 What’s new in Tarantool 1.6? Tarantool 1.6 is no longer getting major new features, although it will be maintained. The developers are concentrating on Tarantool version 1.7. 5 ГЛАВА 4 Общие сведения 4.1 Сервер приложений + СУБД Tarantool is a Lua application server integrated with a database management system. It has a «fiber» model which means that many Tarantool applications can run simultaneously on a single thread, while each instance of the Tarantool server itself can run multiple threads for input-output and background maintenance. It incorporates the LuaJIT – «Just In Time» – Lua compiler, Lua libraries for most common applications, and the Tarantool Database Server which is an established NoSQL DBMS. Thus Tarantool serves all the purposes that have made node.js and Twisted popular, plus it supports data persistence. Tarantool — это open-source проект. Исходный код открыт для всех и распространяется бесплатно согласно лицензии BSD license. Поддерживаемые платформы: GNU / Linux, Mac OS и FreeBSD. Создателем Tarantool’а — а также его основным пользователем — является компания Mail.Ru, круп- нейшая Интернет-компания России (30 млн пользователей, 25 млн электронных писем в день, веб- сайт в списке top 40 международного Alexa-рейтинга). Tarantool используется для обработки самых «горячих» данных Mail.Ru, таких как данные пользовательских онлайн-сессий, настройки онлайн- приложений, кеширование сервисных данных, алгоритмы распределения данных и шардинга, и т.д. Tarantool также используется во всё большем количестве проектов вне стен Mail.Ru. Это, к примеру, онлайн-игры, цифровой маркетинг, социальные сети. Несмотря на то что Mail.Ru спонсирует разработ- ку Tarantool’а, весь процесс разработки, в т.ч. дальнейшие планы и база обнаруженных ошибок, явля- ется полностью открытым. В Tarantool включены патчи от большого числа сторонних разработчиков. Усилиями сообщества разработчиков Tarantool’а были написаны (и далее поддерживаются) библиоте- ки для подключения модулей на внешних языках программирования. А сообщество Lua-разработчиков предоставило сотни полезных пакетов, большинство из которых можно использовать в качестве рас- ширений для Tarantool’а. Пользователи Tarantool’а могут создавать, изменять и удалять Lua-функции прямо во время ис- полнения кода. Также они могут указывать Lua-программы, которые будут загружаться во время запуска Tarantool’а. Такие программы могут служить триггерами, выполнять фоновые задачи и вза- имодействовать с другими программами по сети. В отличие от многих популярных сред разработки приложений, которые используют «реактивный» принцип, сетевое взаимодействие в Lua устроено по- следовательно, но очень эффективно, т.к. оно использует среду взаимной многозадачности самого Tarantool’а. 6 Tarantool, Выпуск 1.7.4 Один из встраиваемых Lua-пакетов — это API для функционала СУБД. Таким образом, некоторые разработчики рассматривают Tarantool как СУБД с популярным языком для написания хранимых процедур, другие рассматривают его как Lua-интерпретатор, а третьи – как вариант замены сразу нескольких компонентов в многозвенных веб-приложениях. Производительность Tarantool’а может до- стигать сотен тысяч транзакций в секунду на ноутбуке, и ее можно наращивать «вверх» или «вширь» за счет новых серверных ферм. 4.2 Возможности СУБД Компонент «box» — серверная часть с функционалом СУБД — это важная часть Tarantool’а, хотя он может работать и без данного компонента. API для функционала СУБД позволяет хранить Lua-объекты, управлять коллекциями объектов, со- здавать и удалять вторичные ключи, делать атомарные изменения, конфигурировать и мониторить репликацию, производить контролируемое переключение при отказе (failover), а также исполнять код на Lua, который вызывается событиями в базе. А для прозрачного доступа к удаленным (remote) экземплярам баз данных разработан API для вызова удаленных процедур. В архитектуре серверной части СУБД Tarantool’а реализована концепция «движков» базы данных (storage engines), где в разных ситуациях используются разные наборы алгоритмов и структуры дан- ных. В Tarantool’е есть два встроенных движка: in-memory движок, который держит все данные и индексы в оперативной памяти, и двухуровневый движок для B-деревьев, который обрабатывает дан- ные размером в 10-1000 раз больше того, что может поместиться в оперативной памяти. Все движки в Tarantool’е поддерживают транзакции и репликацию, поскольку они используют единый механизм упреждающей записи (WAL = write ahead log). Это механизм обеспечивает согласованность и со- хранность данных при сбоях. Таким образом, изменения не считаются завершенными, пока не проходит запись в лог WAL. Подсистема логирования также поддерживает групповые коммиты. Tarantool’s in-memory storage engine (memtx) keeps all the data in random-access memory, and therefore has very low read latency. It also keeps persistent copies of the data in non-volatile storage, such as disk, when users request «snapshots». If an instance of the server stops and the random-access memory is lost, then restarts, it reads the latest snapshot and then replays the transactions that are in the log – therefore no data is lost. Tarantool’s in-memory engine is lock-free in typical situations. Instead of the operating system’s concurrency primitives, such as mutexes, Tarantool uses cooperative multitasking to handle thousands of connections simultaneously. There is a fixed number of independent execution threads. The threads donot share state. Instead they exchange data using low-overhead message queues. While this approach limits the number of cores that the instance will use, it removes competition for the memory bus and ensures peak scalability of memory access and network throughput. CPU utilization of a typical highly-loaded Tarantool instance is under 10%. Searches are possible via secondary index keys as well as primary keys. Tarantool’s disk-based storage engine is a fusion of ideas