Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo DevelopmentКаждый день на badoo.com пользователи просматривают порядка 100 миллионов профилей других юзеров. Мы храним счетчики и полную историю посещений за последние 90 дней, с некоторой агрегацией - это около 5 миллиардов ивентов. Система обрабатывающая этот поток данных создана давно и пережила несколько инкарнаций, становясь все ближе к базе данных.
В какой-то момент мы решили перестать изобретать велосипед, отказались от демонов на C+sqlite, не стали делать на mysql-ях, редисах и мемкешах, а взяли и запилили на Tarantool.
Рассказываем почему Tarantool, как шардим, реплицируем (все просто) и как плавно это дело внедрили на живой системе без downtime.
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...OnticoМногие современные высоконагруженные системы построены с использованием очередей. Не является исключением и внутренний сервис обработки OAuth токенов, который создала наша команда. Исключением является то, что и в качестве основного хранилища, и в качестве всех очередей используется один и тот же продукт - Tarantool. Более того, мы поставили себе амбициозную цель по отказоустойчивости - полную доступность сервиса, когда уходят любые два из трёх датацентров, и успешно её достигли.
При решении мы столкнулись с массой интересных инженерных задач и в нашем докладе мы расскажем вам о том, какие технологии и подходы использовались. В частности, рассмотрим более детально такие вещи, как:
- создание deadline очереди и проблемы, с ней связанные;
- создание кольцевой очереди;
- интеграция между собой шардинга, Raft и очередей;
- как мы победили split brain ;)
Reform: путь к лучшему ORMBadoo DevelopmentИз презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)OnticoHighLoad++ 2017
Зал «Найроби + Касабланка», 8 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/2950.html
Одним из приемов, позволяющих увеличить скорость обработки и получения данных, является написание хранимых процедур. В этом докладе будут рассмотрены преимущества и недостатки такого подхода на примере Tarantool.
Tarantool можно рассматривать как полноценный application server. При таком подходе к разработке приложения, запущенные на Tarantool, можно рассматривать как микросервисы.
...
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)OnticoВ эпоху распределённых архитектур и микросервисов как никогда актуальными становятся вопросы — как эффективно сериализовать и передать данные. Большинство решает данный вопрос просто — используют стандартный, универсальный и всем понятный формат JSON. Другие же, ориентируясь на производительность, ищут в интернете бенчмарки и выбирают protobuf или msgpack.
Мы протестировали разные реализации статически (thrift, protocol buffers) и динамически (json, msgpack) типизированных протоколов для python; сравнили их производительность в разных сценариях, возможности, внутреннее устройство, удобство разработки.
Я расскажу о результатах нашего исследования, особенностях "приготовления" библиотек и выявленных подводных камнях.
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya DenisyukТезисы:
За последние 2 года экосистема tarantool пополнилась огромным количеством батареек: дисковое хранение, lua-шардинг, работа со схемами данных и версиями, nginx upstream модуль. Используя эти компоненты, можно создавать высокопроизводительные приложения без использования дополнительных технологий.
В докладе будет описан опыт использования Tarantool для разработки performance-critical restful api: расскажу в чем плюсы и минусы текущей реализации lua-шардинга, как создать restful api прямо в базе данных и почему это быстрее многих популярных решений на примере реальных данных. Кроме того, будет рассмотрен подход использования avro схем для валидации, версионирования и хранения json документов в Tarantool. Для наглядности во время доклада будет разработан микросервис и проведено нагрузочное тестирование.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo DevelopmentDevConf 2016
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Lua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Возможно, вы слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
На скоростях 10/100Gb сетевой стек в ядре Linux становится “узким местом”. Есть ряд технологий для выноса обработки пакетов из ядра в userspace; например Snabb Switch. Последний написан целиком на Lua и справляется с потоком в 200+Gb.
Как на счет менее экзотических применений? На Lua есть свой Node.js (luvit.io). Lua есть в БД Tarantool. У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Lua набирает популярность и он объективно хорош. Что будет в докладе:
1) Краткое введение в Lua: мы убедимся в том, что язык простой и там есть все необходимое на каждый день.
2) Секция Lua WAT (смешные контр-интуитивные особенности языка, 0 and 1 == 0)
3) Поговорим о том, почему Tarantool использует LuaJIT, а не V8.
4) Разберемся, почему именно Lua такой быстрый, и как работает трассирующий JIT-компилятор.
Мир Python функционалим с помощью библиотекPyNSKДокладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
Почему Rust стоит вашего вниманияMichael PankovВидео доклада: https://www.youtube.com/watch?v=slnQBoxsHPU
Rust - системный язык программирования, который быстро исполняется, предотвращает почти все падения, и устраняет гонки по данным.
Как он этого достигает? Про это доклад.
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey PaznikovЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey PaznikovЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey PaznikovЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Reform: путь к лучшему ORMBadoo DevelopmentИз презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
Хранимые процедуры в NoSQL СУБД на примере Tarantool / Денис Линник (Mail.Ru)OnticoHighLoad++ 2017
Зал «Найроби + Касабланка», 8 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/2950.html
Одним из приемов, позволяющих увеличить скорость обработки и получения данных, является написание хранимых процедур. В этом докладе будут рассмотрены преимущества и недостатки такого подхода на примере Tarantool.
Tarantool можно рассматривать как полноценный application server. При таком подходе к разработке приложения, запущенные на Tarantool, можно рассматривать как микросервисы.
...
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)OnticoВ эпоху распределённых архитектур и микросервисов как никогда актуальными становятся вопросы — как эффективно сериализовать и передать данные. Большинство решает данный вопрос просто — используют стандартный, универсальный и всем понятный формат JSON. Другие же, ориентируясь на производительность, ищут в интернете бенчмарки и выбирают protobuf или msgpack.
Мы протестировали разные реализации статически (thrift, protocol buffers) и динамически (json, msgpack) типизированных протоколов для python; сравнили их производительность в разных сценариях, возможности, внутреннее устройство, удобство разработки.
Я расскажу о результатах нашего исследования, особенностях "приготовления" библиотек и выявленных подводных камнях.
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya DenisyukТезисы:
За последние 2 года экосистема tarantool пополнилась огромным количеством батареек: дисковое хранение, lua-шардинг, работа со схемами данных и версиями, nginx upstream модуль. Используя эти компоненты, можно создавать высокопроизводительные приложения без использования дополнительных технологий.
В докладе будет описан опыт использования Tarantool для разработки performance-critical restful api: расскажу в чем плюсы и минусы текущей реализации lua-шардинга, как создать restful api прямо в базе данных и почему это быстрее многих популярных решений на примере реальных данных. Кроме того, будет рассмотрен подход использования avro схем для валидации, версионирования и хранения json документов в Tarantool. Для наглядности во время доклада будет разработан микросервис и проведено нагрузочное тестирование.
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo DevelopmentDevConf 2016
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Lua — высокоуровневый язык, похожий на Python/JS, но существенно более простой. Он гибкий и при этом очень быстрый.
Возможно, вы слышали про OpenResty. Это решение для разработки Nginx модулей на Lua. Cloudflare, крупнейший CDN/anti-DDOS провайдер, как раз работает на OpenResty.
На скоростях 10/100Gb сетевой стек в ядре Linux становится “узким местом”. Есть ряд технологий для выноса обработки пакетов из ядра в userspace; например Snabb Switch. Последний написан целиком на Lua и справляется с потоком в 200+Gb.
Как на счет менее экзотических применений? На Lua есть свой Node.js (luvit.io). Lua есть в БД Tarantool. У нас была задача валидации данных на соответствие схеме; мы переписали валидацию с Си на Lua и получили ускорение в 4 раза (за счет JIT-компиляции).
Lua набирает популярность и он объективно хорош. Что будет в докладе:
1) Краткое введение в Lua: мы убедимся в том, что язык простой и там есть все необходимое на каждый день.
2) Секция Lua WAT (смешные контр-интуитивные особенности языка, 0 and 1 == 0)
3) Поговорим о том, почему Tarantool использует LuaJIT, а не V8.
4) Разберемся, почему именно Lua такой быстрый, и как работает трассирующий JIT-компилятор.
Мир Python функционалим с помощью библиотекPyNSKДокладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
Почему Rust стоит вашего вниманияMichael PankovВидео доклада: https://www.youtube.com/watch?v=slnQBoxsHPU
Rust - системный язык программирования, который быстро исполняется, предотвращает почти все падения, и устраняет гонки по данным.
Как он этого достигает? Про это доклад.
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey PaznikovЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey PaznikovЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey PaznikovЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ночью через лес Stress-test пяти almost-the-same-functionality shared-nothin...Daniel Podolsky1. "Mia! MIA! What the hell happened?", или что случается с производительностью вашей РСУБД, когда ее индексы перестают помещаться в память
2. "Why the fuck didn't you tell us about that guy in the bathroom?", или почему мы гадим под себя, когда речь заходит о шардинге РСУБД
3. "Now the night of the fight, you may fell a slight sting, that's pride fuckin' wit ya. Fuck pride! ", или почему shared nothing
4. "And that's what we're gonna be, we're gonna be cool.", или с какими проблемами сталкиваются люди, которые собрались эксплуатировать shared-nothing cluster
5. "Mind if I try one of yours?", или наша методика тестирования
6. “The truth. Three well-dressed, slightly toasted, Mexicans.”, или отбор кандидатов на тестирование
7. "So you're gonna go out there, drink your drink, say "Goodnight, I've had a very lovely evening," go home, and jack off.", или краткий отчет о безумной неделе
8. "This sensual thing's goin' on that nobody's talkin about, but you know it and she knows it, fuckin' Marsellus knew it, and Antwan shoulda known fuckin' better.", или выводы
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)OnticoTarantool - отечественная Opensource NoSQL база данных.
В докладе мы обсудим:
- Какое место занимают NoSQL базы данных в highload проектах?
Почему и для чего вам стоит NoSQL решения?
Какие NoSQL решения вы можете использовать?
- Рассмотрим, что из себя представляет Tarantool 1.6 - база данных и сервер приложений в одном лице.
Какие основные особенности Tarantool как NoSQL базы данных?
Lua как встроенный язык сервера приложений.
- Посмотрим, как можно начать использовать Tarantool в своих проектах, и сделаем первые шаги.
Как установить Tarantool.
Первый запуск и основы конфигурирования.
Модель данных.
Как создавать и работать с хранилищем данных.
Как использовать пакеты tarantool.
- Узнаем об интересных модулях и фичах Tarantool
Чем полезен application server
Tarantool http
Tarantool queue
- Познакомимся с сообществом Tarantool opensource
Почему сообщество - это важно?
Чем полезны opensource проекты начинающему разработчику?
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...OnticoNoSQL key-value — популярное решение, но какие преимущества и какой ценой оно даёт?
Скорость? Возможно, но ценой урезанного, по сравнению с реляционными базами данных, функционала. Но данные и приложение всё еще разделены сетевым стеком, а иногда и десятками километров оптоволокна. В крупном проекте, работающем на десятках или сотнях серверов нельзя обеспечить высокую скорость доступа к данным с каждой машины. Если хранилище достаточно быстро, то время обработки запроса окажется значительно меньше затрат на работу с сетью, а производительность приложения будут определять сетевые задержки и частота запросов к БД.
В проекте Облако@Mail.Ru мы ушли от использования чистых key-value хранилищ в пользу микросервисов на Tarantool, что позволило свести общение с хранилищем данных к минимуму.
Да, Tarantool — это еще одна NoSQL база данных, но еще это полноценный сервер приложений. Приложений, расположенных рядом с данными!
Я расскажу, как мы пришли к использованию микросервисов на основе Tarantool. Приведу несколько сценариев использования, которые работают в Облаке и могут быть легко адаптированы для другого web-проекта. Вы узнаете о компонентах, которые разработаны и опубликованы нами уже сейчас, и о дальнейших планах развития.
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...OnticoОсновные кейсы использования Тарантула:
1. Когда нужна OLTP-система, позволяющая обрабатывать транзакции в режиме почти реального времени (с милисекундными задержками) и/или с огромной пропускной способностью (сотни тысяч запросов в секунду). Примеры — система сессий, система антибрутфорса, система противодействия атакам, система очередей и пуш-уведомлений, роутинг запросов между серверами.
Далее - http://backendconf.ru/2016/abstracts/2096.html
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...DevDayДаниил Каменский — ведущий специалист проектов SQLinfo.ru (http://sqlinfo.ru/) и Webew.ru (http://webew.ru/), архитектор баз данных в компании ЦВТ. Даниил на Моем Круге: http://kamenskiydaniil.moikrug.ru/.
Расширенный SQL в MySQL и PostgreSQL. Сравнение возможностей
Расширение SQL:
— пользовательские переменные;
— оконные функции;
— рекурсивный обход деревьев;
— расширения ANSI SQL для работы с таблицами.
Особенности и отличия базовых функций в MySQL и PostgreSQL:
— типы таблиц особенности физического размещения;
— работа с индексами;
— оптимизация подзапросов;
— трудности перевода: примеры.
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...YandexЕвгений Крутько, НИЦ «Курчатовский институт».
В докладе на примере программы моделирования динамики движения конструкций по методу конечных элементов рассматриваются возможности и практика распараллеливания вычислений. Речь в нём пойдёт как о технике создания новых вычислительных потоков, так и об использовании стандартов openMP и MPI.
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаКонференция разработчиков программного обеспечения SECON'2014Надежный обмен данными в гетерогенной среде, между разными платформами и технологиями является одним из ключевых моментов разработки сложных систем. Во время обмена данные преобразуются в некоторый промежуточный формат совместимый между платформами. Преобразование в подобный формат и из него — крайне рутинная и подверженная ошибкам работа.
Метаописание данных неким декларативным языком с последующей автогенерацией типизированных структур облегчает жизнь разработчику. Снимает с него необходимость задумываться о промежуточном формате, о правильном порядке полей, а типизированность гарантирует выявление ошибок еще на этапе компиляции кода.
В докладе будет рассмотрено несколько подобных решений, их плюсы и минусы. Также будет рассмотрен с практической стороны наш собственный формат метаданных, используемый нами на протяжении более 5 лет.
Целевая аудитория:
Ограничений нет, но в большей степени разработчики, имеющие уже определенный опыт разработки разнородных систем или приступающие к подобной задаче.
Олег Алистратов — Сортировка списков в Perl и PythonYandexНа примере языков Perl и Python рассмотрены способы оптимизации сортировки данных по сложному ключу и/или со сложной функцией сравнения.
ОПК № 5 – Составные типы данных, спискиVladimir Parfinenko1. Записи
2. Массивы.
3. Адресация в многомерных массивах: C-style, FORTRAN-style.
4. Данные как «белый ящик» и как «черный ящик».
5. Стеки, очереди и их применение в различных задачах.
6. Реализация стека с помощью массива в С.
7. Связные списки: структура и свойства.
8. Операции над списками.
9. Реализация стека с помощью связного списка в С.
10. Двусвязные списки, кольцевые списки, двусвязные кольцевые списки.
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov SergeyЗа время работы над проектом был разработан удобный фреймворк для написания асинхронного кода. В докладе будет рассмотрено то, как он устроен и как со временем эволюционировал. Разберемся, как с помощью наших примитивов решать проблемы, часто встречающиеся в асинхронном программирование; будут примеры удачного и неудачного использования. Отдельно остановимся на сравнении получившихся средств с тем, что было добавлено в С++11.
Очереди и блокировкиAlexandre KalendarevСлайды с РИТ (Highload Junior) 31 мая - 1июня 2016
В докладе рассказывается о практическом применении серверов очередей и блокировок в высоко-нагруженных проектах
TreeDb key/value noSQL databaseAlexandre KalendarevTreeDb is key/value noSQL database, based onе the TocyoCabinet and libevent. It is OpenSource product under LGPL.
This database use the rb-Tree index for key storage. The feature of this solution is the use of composite keys, and ability of choice of regions keys by mask or pattern.
10. PHP интерфейс‐Конструктор
Tarantool
$tnt = new Tarantool($host,$port,$admPort);
$host – хост (def: localhost);
$port – порт (def: 33013);
$admPort – административный порт (33015).
11. PHP интерфейс‐INSERT
Tarantool
define( ‘NS’,0);
// номер namespace
$tnt = new Tarantool();
$tuple = array(12345,‘spb’,’Hello Word’);
$res = $tnt->insert(NS, $tuple);
Если данные существуют – они замещаются
Возвращается результат true- успех / false...
12. PHP интерфейс‐DELETE
Tarantool
$tnt = new Tarantool();
$res = $tnt->delete(NS, $key, [$flag]);
1)Удаление всегда по первичному ключу
2) $flag = true – возвращать данные (def: $flag = false)
Возвращает: true/false – результат операции
или данные (массив) если $flag = true
13. PHP интерфейс‐UPDATE
Tarantool
$tnt = new Tarantool();
$data = array(1=>’msk’, 2=> ‘Hello Hi++!’);
$res = $tnt->update(NS, $key, $data);
1)$key – всегда первичный ключ
2) $data – асс. массив № поля => нов. значение
Возвращает результат операции : true=успех/false...
14. PHP интерфейс‐INC(update)
Tarantool
$tnt = new Tarantool();
$res = $tnt->inc(NS, $key, $fieldNo, [$delta, $flag]);
1)$key – всегда первичный ключ;
2) $fieldNo – номер инкременитируемого поля тип Num;
3) $delta – инкрементируемое значение (def: $delta = 1);
4) $flag = true – возвращать данные (def: $flag = false);
Возвращает результат операции : true=успех/false ...
или новые данные если $flag = true
15. PHP интерфейс‐SELECT
Tarantool
$tnt = new Tarantool();
$count = $tnt->select(NS, $indexNo, $key,[ $limit, $offset]);
1)$key – ключ, если используем составной то массив;
2) $indexNo – номер индексного поля, по которому
осуществляется выборка;
3) def: $limit = хFFFFFFFF; ,def: $offset = 0;
Возвращает: кол-во найденных кортежей,
Выборка данных осуществляется методом getTuple();
16. PHP интерфейс‐MSELECT
Tarantool множественныйвыбор
Является аналогом mget($keys) в memcache
или: SELECT * FROM t0 WHERE key IN ($keyList);
$count = $tnt->mselect(NS, $indexNo, $keys,[ $limit, $offset]);
1)$keys –массив ключей;
2) $indexNo – номер индексного поля, осуществляется выборка;
3) $limi , $offset – аналог метода select();
Возвращает: кол-во найденных кортежей, false- ошибка
Выборка данных осуществляется методом getTuple();
17. PHP интерфейс–прочиеметоды
Tarantool
getTuple() – возвращает данные методов
select() и mselect();
getError() – описание ошибки последней операции
getConf() – конфигурационный файл сервера
getInfo() – переменные сервера
getStat() – информация по статистики сервера
18. Паттерн:справочник
Field 0 , Primary index (PK)=0 Field1 = Name
11-22-33-44 Маня
11-22-33-55 Ваня
11-22-33-66 Таня
Аналог key/value
Доступ осуществляется по первичному ключу;
Возвращается один кортеж;
SQL аналог:
SELECT * FROM T0 WHERE key0=$key
20. Паттерн:обратныйсправочник
Field 0 , Primary index (PK)=0 Field1 = Name
INDEX 1
11-22-33-44 Маня
11-22-33-55 Ваня
11-22-33-66 Таня
Доступ осуществляется по вторичному ключу;
Возвращается массив кортежей;
SQL аналог:
SELECT * FROM T0 WHERE key1=$key
22. Паттерн:справочниксразделами
поискпоодномуразделу
Field 0, Primary index Field1 = Name Field2 = City
INDEX=0 (PK) INDEX=2
11-22-33-44 Маня SPB
11-22-33-55 Ваня MSK
11-22-33-66 Таня SPB
Представляет денормолизованное отношение
Один ко Многим
Cтроится индекс по разделу
Доступ осуществляется по вторичному ключу;
SQL аналог:
SELECT * FROM T0 WHERE key1=$key
24. Паттерн:справочниксразделами
выборкапонесколькимразделам
Field 0, Primary Field1 = Name Field2 = City Field3=Sex
index (INDEX=3) INDEX=3
(PK)=0
11-22-33-44 Маня SPB Ж
11-22-33-55 Ваня MSK M
11-22-33-66 Таня SPB Ж
11-22-33-77 Саня SPB M
Cтроится составной индекс по двум и более полям;
Доступ осуществляется по вторичному ключу;
SQL аналог:
SELECT * FROM T0 WHERE (Field2=$city AND Field3=$sex)
25. Паттерн:Матрица
x M
Х
Матрица[M x N]
Po = (x,y)
y Po
Key = y * M + x
N
Y
28. Паттерн:Автоинкрементнаятаблица
Field 0 (PK) Field 1 =Phone Field2 = Name
1 11-22-33-44 Маня
2 11-22-33-55 Ваня
3 11-22-33-66 Таня
4 Новаястрока
При каждой вставки увеличиваем PK на 1
Аналог Autoincrement в MySQL
или SEQUENCE
29. Паттерн:Автоинкрементнаятаблица
реализация
define(NS_USER, 1); // номер namespace USER
define(INC_USER,1); // номер ключа счетчика
define(FD_COUNTER,1); // номер поля счетчика
$key =
$tnt->inc(NS, INC_USER, FD_COUNTER,1,true);
$tnt->insert(NS_USER, $key, $data);
32. Паттерн:Очередь
PK
...
Data 1
Begin Pointer
Data 2
End Pointer Data 3
Принцип FIFO - Первый пришел, первый ушел
Реализуется через два указателя на начало и конец
очереди