Tarantool Выпуск 1.7.2

Tarantool Выпуск 1.7.2

Tarantool Выпуск 1.7.2 мар. 14, 2019 Оглавление 1 Что нового? 1 1.1 Что нового в Tarantool 1.7?....................................1 2 Общие сведения 2 2.1 Сервер приложений + СУБД...................................2 2.2 Возможности СУБД........................................3 3 Практикум 5 3.1 Практические задания на Lua..................................5 3.2 Практическое задание на C.................................... 17 4 Руководство пользователя 21 4.1 Предисловие............................................. 21 4.2 Начало работы........................................... 22 4.3 Функционал СУБД......................................... 25 4.4 Сервер приложений........................................ 58 4.5 Администрирование серверной части.............................. 72 4.6 Коннекторы............................................. 108 4.7 Вопросы и ответы......................................... 120 5 Справочники 121 5.1 Справочник по встроенной библиотеке............................. 121 5.2 Справочник по сторонним библиотекам............................. 228 5.3 Справочник по настройке..................................... 247 6 Руководство участника проекта 257 6.1 Справочник по C API....................................... 257 6.2 Детали реализации......................................... 280 6.3 Сборка и участие в проекте.................................... 293 6.4 Соглашения по разработке.................................... 298 Lua Module Index 329 i ГЛАВА 1 Что нового? Здесь собрана информация о существенных изменениях, которые произошли в конкретных версиях Tarantool’а. Более мелкие изменения и исправления дефектов указаны в отчетах о выпущенных стабильных рели- зах (milestone = closed) на GitHub. 1.1 Что нового в Tarantool 1.7? Дисковый движок, который в более ранних версиях Tarantool’а назывался sophia и phia, заменен новым движком под названием vinyl. Добавлены новые типы индексируемых полей. Обновлена версия LuaJIT. У кластера репликации появилась возможность самонастройки, что существенно упрощает настройку нового кластера. Функция space_object:inc() объявлена устаревшей. Функция space_object:dec() объявлена устаревшей. 1 ГЛАВА 2 Общие сведения 2.1 Сервер приложений + СУБД Tarantool представляет собой сервер приложений на языке Lua, интегрированный с СУБД. В основе Tarantool лежат файберы (fibers), что позволяет нескольким Lua-приложениям работать в одном потоке (thread), при этом Tarantool-сервер может одновременно запускать другие потоки для обработки ввода- вывода данных и фоновых сервисных задач. Tarantool включает в себя LuaJIT (Just In Time) Lua- компилятор, Lua-библиотеки для решения наиболее частых задач, а также сервер баз данных Tarantool, представляющий собой NoSQL СУБД. Таким образом, Tarantool может всё то же, что node.js и Twisted, а кроме того обеспечивает сохранность данных. 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 устроено по- 2 Tarantool, Выпуск 1.7.2 следовательно, но очень эффективно, т.к. оно использует среду взаимной многозадачности самого Tarantool’а. Один из встраиваемых Lua-пакетов — это API для функционала СУБД. Таким образом, некоторые разработчики рассматривают Tarantool как СУБД с популярным языком для написания хранимых процедур, другие рассматривают его как Lua-интерпретатор, а третьи – как вариант замены сразу нескольких компонентов в многозвенных веб-приложениях. Производительность Tarantool’а может до- стигать сотен тысяч транзакций в секунду на ноутбуке, и ее можно наращивать "вверх"или "вширь"за счет новых серверных ферм. 2.2 Возможности СУБД Компонент "box"— серверная часть с функционалом СУБД — это важная часть Tarantool’а, хотя он может работать и без данного компонента. API для функционала СУБД позволяет хранить Lua-объекты, управлять коллекциями объектов, со- здавать и удалять вторичные ключи, делать атомарные изменения, конфигурировать и мониторить репликацию, производить контролируемое переключение при отказе (failover), а также исполнять код на Lua, который вызывается событиями в базе. А для прозрачного доступа к удаленным (remote) экземплярам баз данных разработан API для вызова удаленных процедур. В архитектуре серверной части СУБД Tarantool’а реализована концепция "движков"базы данных (storage engines), где в разных ситуациях используются разные наборы алгоритмов и структуры дан- ных. В Tarantool’е есть два встроенных движка: in-memory движок, который держит все данные и индексы в оперативной памяти, и двухуровневый движок для B-деревьев, который обрабатывает дан- ные размером в 10-1000 раз больше того, что может поместиться в оперативной памяти. Все движки в Tarantool’е поддерживают транзакции и репликацию, поскольку они используют единый механизм упреждающей записи (WAL = write ahead log). Это механизм обеспечивает согласованность и со- хранность данных при сбоях. Таким образом, изменения не считаются завершенными, пока не проходит запись в лог WAL. Подсистема логирования также поддерживает групповые коммиты. In-memory движок (memtx) хранит все данные в оперативной памяти, поэтому время ожидания при чтении у него очень мало. Также, когда пользователи запрашивают статические снимки (snapshots), этот движок создает персистентные копии данных в постоянной памяти, например на жестком диске. Если Tarantool-сервер прекращает работать и данные в оперативной памяти теряются, то при следую- щем запуске Tarantool-сервер загружает в память самую свежую копию данных с диска и применяет к ней все транзакции из лога, которые были сделаны с момента создания копии. Таким образом, данные при сбое не теряются. В штатных ситуациях in-memory движок работает без блокировок. Вместо низкоуровневых механизмов параллельной обработки данных, которые предлагает операционная система (например, mutex’ов), Tarantool использует среду взаимной многозадачности, и таким образом может работать с тысячами соединений одновременно. В Tarantool’е есть фиксированное количество независимых нитей (thread), и у них нет общего состояния. Для обмена данными между нитями используются очереди сообщений, что позволяет уменьшить накладные расходы. Такой подход накладывает ограничение на количество процессорных ядер, которые Tarantool-сервер может использовать, но в то же время он позволяет избежать конкуренции за шину памяти, а также дает запас масштабируемости по скорости доступа к памяти и производительности сети. В результате даже сильно нагруженный Tarantool-сервер в среднем использует процессор не более чем на 10%. Кроме того, Tarantool поддерживает поиск как по первичным, так и по вторичным ключам в индексах. Дисковый движок (vinyl) совмещает в себе подходы, заимствованные из современных файловых систем, журналируемых merge-деревьев (log-structured merge trees) и классических B-деревьев. Все данные в этом движке разбиты по забегам (runs), где каждый забег представляет собой файл на диске. Максимальный размер забега обычно равен 64МБ, и его можно настраивать. Каждый забег – 2.2. Возможности СУБД 3 Tarantool, Выпуск 1.7.2 это набор страниц, которые нужны для каких-то целей. Если забег полностью смержен, то диапазоны ключей на его страницах не пересекаются. Если же диапазоны ключей в забеге в какой-то момент сильно изменялись, то мы имеем дело с частично смерженным забегом. В этом случае на некоторых страницах появились новые ключи и значения, которых ранее не было в данном забеге. Дисковый движок обновляет данные по принципу дописывания в конец: новые данные никогда не затирают старые. Tarantool поддерживает работу с составными ключами в индексах. Возможные типы ключей: HASH, TREE, BITSET и RTREE. Tarantool также поддерживает асинхронную репликацию — как локальную, так и на удаленных серверах. При этом репликацию можно настроить по принципу мастер-мастер, когда несколько узлов могут не только обрабатывать входящую нагрузку, но и получать данные от других узлов. 4 Глава 2. Общие

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    331 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us