Структуры данных в разделяемой памяти,
про алгоритмы замещения страниц в буфере и блокировки, которые используются на разных уровнях взаимодействия.
А также средства мониторинга памяти, уже существующие и те, которые ещё только в процессе разработки.
Hacking PostgreSQL. Лекция 1. Вводная лекция для начинающих разработчиков ядра PostgreSQL. Видео и площадка для обсуждения в блоге http://postgres-edu.blogspot.ru/2016/02/20160225.html
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Структуры данных в разделяемой памяти,
про алгоритмы замещения страниц в буфере и блокировки, которые используются на разных уровнях взаимодействия.
А также средства мониторинга памяти, уже существующие и те, которые ещё только в процессе разработки.
Hacking PostgreSQL. Лекция 1. Вводная лекция для начинающих разработчиков ядра PostgreSQL. Видео и площадка для обсуждения в блоге http://postgres-edu.blogspot.ru/2016/02/20160225.html
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Из презентации вы узнаете:
— как мы пришли к Go, оставив идею использования Node.js, Scala или Rust;
— про первый сервис, который мы написали на Go и запустили в продакшен;
— про ошибки, с которыми сталкивались под нагрузкой;
— про оптимизации, которые мы сделали и еще планируем сделать;
— про тестирование и предотвращение тестирования на продакшене (в частности, websocket'ов).
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
RethinkDB - это распределенное документо-ориентированное хранилище данных с открытым исходным кодом. Данная система ориентирована на разработку систем обработки данных реального времени, позволяя клиентскому приложению подписываться на изменение тех или иных данных.
В данном докладе я бы хотел осветить не только вопросы разработки приложений на базе RethinkDB, но и поговорить о том, как все это работает. Мы поговорим о ReQL (язык запросов), “changefeeds”, индексах, шардинге, репликациях, а также затронем вопросы особенностей проектирования баз данных под данную платформу.
* приемы доступа к данным;
* прикладной класс работы с БД поверх PDO, особенности PDO;
* связки пуллов коннектов;
* API хранимых процедур;
* работа c распределенным хранилищем;
* RPC между базами на примере асинхронного геокодинга.
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
В дата-центрах нашей компании несколько тысяч серверов, и примерно на половине из них нужно выкладывать PHP-код 2 раза в день. Помимо раскладки на production также не стоит забывать о том, что код нужен на стейджинге, и в стейджинг-кластер у нас входит около 50 машин, код на которых обновляется раз в несколько минут. Также есть «хотфиксы» — небольшие (1-5) наборы файлов, которые выкладываются во внеочередном порядке на все или на выделенную часть серверов, чтобы устранить существующие проблемы на продакшне, не дожидаясь полной выкладки.
В этом докладе я расскажу о том, как мы деплоились в течение 10 лет, о том, какую новую систему для деплоя PHP-кода мы разработали и внедрили в production, а также проведу обзор решений для масштабного деплоя кода на PHP и анализ их производительности.
План доклада:
— Наша старая система деплоя, достоинства и недостатки.
— Существующие решения:
* "svn up" / "git pull".
* rsync.
* phar, hhbc (HHVM-specific), "loop".
* rsync + 2 директории + realpath_root (Rasmus-style).
— Требования для новой системы деплоя.
* быстрый деплой на стейджинг (5-10 секунд на 50 серверов).
* возможность атомарно патчить несколько файлов и быстро их выкладывать (10 секунд на весь кластер).
* совместимость с docker.
* поддержка «долгоиграющих» CLI-скриптов (несколько часов).
* низкое потребление ресурсов на принимающей стороне.
* отсутствие необходимости сбрасывать opcache.
* высокая скорость деплоя на продакшн (1-2 минуты на 1500 серверов).
— MDK — multiversion deployment kit.
— Анализ применимости и производительности способов деплоя.
— Выводы.
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
В многоядерных высоконагруженных системах с высокой конкурентностью часто бывает сложно определить, чем занят отдельный процесс PostgreSQL. Он может находиться в ожидании локов высокого уровня, таких как локи таблиц, внутренних локов, используемых для синхронизации процессов, ввода-вывода и многих других.
В настоящий момент среди всех событий ожидания мониторить можно только локи высокого уровня с помощью представлений PostgreSQL. Другие типы ожиданий требуют использования низкоуровневых утилит типа perf, systemtap и других. Эти утилиты требуют специальных знаний и могут быть платформозависимыми. В то же время другие enterprise базы данных уже включают в себя инструменты для мониторинга ожиданий.
Мы разработали патч, который реализует мониторинг ожиданий в PostgreSQL. С минимальной настройкой (несколько конфигурационных параметров) этот патч показывает полную информацию о текущих ожиданиях в режиме реального времени и с небольшим оверхедом на всю систему. Этот патч уже работает на продакшен серверах Яндекса и показал свою полезность.
В докладе рассматривается текущее состояние механизмов поиска и установки необходимых библиотек и утилит. Мы пробежим по общему определению менеджера пакетов и рассмотрим несколько распространенных примеров. Взглянем на типичные сценарии использования и на то, какие возможности были использованы в качестве критериев сравнения, а также составим представление о существующих решениях в мире С++ их конструктивных особенностях и примерах решаемых задач.
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
Инфраструктура Hadoop – популярное решение для таких задач, как распределённое хранение данных и вычисления Map/Reduce на кластере. Хорошая масштабируемость и развитая экосистема подкупают и обеспечивают Hadoop’у прочное место в инфраструктуре различных информационных систем. Но чем больше ответственности возлагается на этот компонент, тем важнее обеспечивать его отказоустойчивость и high availability.
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
Общие принципы оптимизации производительности мобильных приложений:
- работа с длинными списками — таблицы, коллекции;
- графика — загрузка из сети, кэширование;
- ленивая загрузка частей приложения.
Работа с периодически обновляемыми структурированными данными.
- как передавать данные с сервера на клиент: запросы, объем, формат, десериализация;
- как хранить полученные данные на клиенте — виды хранилищ: от плоских файлов до NoSQL.
Практический кейс. "Едадил": как мы ускоряли работу приложения для Android.
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
Если вы сталкивались с PostgreSQL и зашли дальше, чем инструкция по установке, то, скорей всего, коротко познакомились с вакуумом, ну или, как минимум, что-то слышали про него.
Вакуум или по-русски очистка - это важная задача в жизненном цикле постгреса, которая заключается в регулярном освобождении базы данных от, так скажем, "мусора". Вакуум очень важен, его нельзя игнорировать и тем более отключать; более того, ему следует уделять должное внимание. А за кажущейся простотой скрывается довольно сложный и интересный механизм, к работе которого очень часто возникает много вопросов, на которые не всегда можно найти однозначный ответ.
В этом докладе я буду рассказывать про внутреннее устройство вакуума и раскрою следующие вопросы:
1) Что такое автовакуум (вакуум) и заморозка, и как они устроены изнутри.
2) Какие решения принимаются в процессе обработки таблиц и индексов.
3) Какие существуют возможности для управления вакуумом и как эти возможности влияют на работу вакуума.
4) Вакуум и вопрос производительности.
This document discusses key performance indicators (KPIs) and how to develop them. It provides information on defining objectives and key result areas, identifying tasks and work procedures, and determining metrics. The document outlines common mistakes to avoid when creating KPIs, such as having too many or ones that do not change based on goals. It also discusses how to design effective KPIs that are linked to strategy and empower employees. Finally, it describes different types of KPIs, including process, input, output, leading, lagging, outcome, qualitative and quantitative.
This document discusses key performance indicators (KPIs) and Google Analytics. It provides information on developing KPIs, including defining objectives, identifying key result areas and tasks, determining work procedures, and creating measures. The document outlines common mistakes when developing KPIs, such as creating too many KPIs and not linking them to strategy. It also describes different types of KPIs, such as process, input, output, leading, lagging, outcome, qualitative, and quantitative KPIs. Resources on KPIs can be found at kpi123.com.
Из презентации вы узнаете:
— как мы пришли к Go, оставив идею использования Node.js, Scala или Rust;
— про первый сервис, который мы написали на Go и запустили в продакшен;
— про ошибки, с которыми сталкивались под нагрузкой;
— про оптимизации, которые мы сделали и еще планируем сделать;
— про тестирование и предотвращение тестирования на продакшене (в частности, websocket'ов).
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
RethinkDB - это распределенное документо-ориентированное хранилище данных с открытым исходным кодом. Данная система ориентирована на разработку систем обработки данных реального времени, позволяя клиентскому приложению подписываться на изменение тех или иных данных.
В данном докладе я бы хотел осветить не только вопросы разработки приложений на базе RethinkDB, но и поговорить о том, как все это работает. Мы поговорим о ReQL (язык запросов), “changefeeds”, индексах, шардинге, репликациях, а также затронем вопросы особенностей проектирования баз данных под данную платформу.
* приемы доступа к данным;
* прикладной класс работы с БД поверх PDO, особенности PDO;
* связки пуллов коннектов;
* API хранимых процедур;
* работа c распределенным хранилищем;
* RPC между базами на примере асинхронного геокодинга.
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
В дата-центрах нашей компании несколько тысяч серверов, и примерно на половине из них нужно выкладывать PHP-код 2 раза в день. Помимо раскладки на production также не стоит забывать о том, что код нужен на стейджинге, и в стейджинг-кластер у нас входит около 50 машин, код на которых обновляется раз в несколько минут. Также есть «хотфиксы» — небольшие (1-5) наборы файлов, которые выкладываются во внеочередном порядке на все или на выделенную часть серверов, чтобы устранить существующие проблемы на продакшне, не дожидаясь полной выкладки.
В этом докладе я расскажу о том, как мы деплоились в течение 10 лет, о том, какую новую систему для деплоя PHP-кода мы разработали и внедрили в production, а также проведу обзор решений для масштабного деплоя кода на PHP и анализ их производительности.
План доклада:
— Наша старая система деплоя, достоинства и недостатки.
— Существующие решения:
* "svn up" / "git pull".
* rsync.
* phar, hhbc (HHVM-specific), "loop".
* rsync + 2 директории + realpath_root (Rasmus-style).
— Требования для новой системы деплоя.
* быстрый деплой на стейджинг (5-10 секунд на 50 серверов).
* возможность атомарно патчить несколько файлов и быстро их выкладывать (10 секунд на весь кластер).
* совместимость с docker.
* поддержка «долгоиграющих» CLI-скриптов (несколько часов).
* низкое потребление ресурсов на принимающей стороне.
* отсутствие необходимости сбрасывать opcache.
* высокая скорость деплоя на продакшн (1-2 минуты на 1500 серверов).
— MDK — multiversion deployment kit.
— Анализ применимости и производительности способов деплоя.
— Выводы.
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
В многоядерных высоконагруженных системах с высокой конкурентностью часто бывает сложно определить, чем занят отдельный процесс PostgreSQL. Он может находиться в ожидании локов высокого уровня, таких как локи таблиц, внутренних локов, используемых для синхронизации процессов, ввода-вывода и многих других.
В настоящий момент среди всех событий ожидания мониторить можно только локи высокого уровня с помощью представлений PostgreSQL. Другие типы ожиданий требуют использования низкоуровневых утилит типа perf, systemtap и других. Эти утилиты требуют специальных знаний и могут быть платформозависимыми. В то же время другие enterprise базы данных уже включают в себя инструменты для мониторинга ожиданий.
Мы разработали патч, который реализует мониторинг ожиданий в PostgreSQL. С минимальной настройкой (несколько конфигурационных параметров) этот патч показывает полную информацию о текущих ожиданиях в режиме реального времени и с небольшим оверхедом на всю систему. Этот патч уже работает на продакшен серверах Яндекса и показал свою полезность.
В докладе рассматривается текущее состояние механизмов поиска и установки необходимых библиотек и утилит. Мы пробежим по общему определению менеджера пакетов и рассмотрим несколько распространенных примеров. Взглянем на типичные сценарии использования и на то, какие возможности были использованы в качестве критериев сравнения, а также составим представление о существующих решениях в мире С++ их конструктивных особенностях и примерах решаемых задач.
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
Инфраструктура Hadoop – популярное решение для таких задач, как распределённое хранение данных и вычисления Map/Reduce на кластере. Хорошая масштабируемость и развитая экосистема подкупают и обеспечивают Hadoop’у прочное место в инфраструктуре различных информационных систем. Но чем больше ответственности возлагается на этот компонент, тем важнее обеспечивать его отказоустойчивость и high availability.
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
Общие принципы оптимизации производительности мобильных приложений:
- работа с длинными списками — таблицы, коллекции;
- графика — загрузка из сети, кэширование;
- ленивая загрузка частей приложения.
Работа с периодически обновляемыми структурированными данными.
- как передавать данные с сервера на клиент: запросы, объем, формат, десериализация;
- как хранить полученные данные на клиенте — виды хранилищ: от плоских файлов до NoSQL.
Практический кейс. "Едадил": как мы ускоряли работу приложения для Android.
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Ontico
Если вы сталкивались с PostgreSQL и зашли дальше, чем инструкция по установке, то, скорей всего, коротко познакомились с вакуумом, ну или, как минимум, что-то слышали про него.
Вакуум или по-русски очистка - это важная задача в жизненном цикле постгреса, которая заключается в регулярном освобождении базы данных от, так скажем, "мусора". Вакуум очень важен, его нельзя игнорировать и тем более отключать; более того, ему следует уделять должное внимание. А за кажущейся простотой скрывается довольно сложный и интересный механизм, к работе которого очень часто возникает много вопросов, на которые не всегда можно найти однозначный ответ.
В этом докладе я буду рассказывать про внутреннее устройство вакуума и раскрою следующие вопросы:
1) Что такое автовакуум (вакуум) и заморозка, и как они устроены изнутри.
2) Какие решения принимаются в процессе обработки таблиц и индексов.
3) Какие существуют возможности для управления вакуумом и как эти возможности влияют на работу вакуума.
4) Вакуум и вопрос производительности.
This document discusses key performance indicators (KPIs) and how to develop them. It provides information on defining objectives and key result areas, identifying tasks and work procedures, and determining metrics. The document outlines common mistakes to avoid when creating KPIs, such as having too many or ones that do not change based on goals. It also discusses how to design effective KPIs that are linked to strategy and empower employees. Finally, it describes different types of KPIs, including process, input, output, leading, lagging, outcome, qualitative and quantitative.
This document discusses key performance indicators (KPIs) and Google Analytics. It provides information on developing KPIs, including defining objectives, identifying key result areas and tasks, determining work procedures, and creating measures. The document outlines common mistakes when developing KPIs, such as creating too many KPIs and not linking them to strategy. It also describes different types of KPIs, such as process, input, output, leading, lagging, outcome, qualitative, and quantitative KPIs. Resources on KPIs can be found at kpi123.com.
This syllabus outlines the expectations for an 11th grade American Literature course. The course will focus on examining American literature from the Puritan to Post-Modern eras through assigned readings, writing assignments, projects, and presentations. Students will analyze the interactions between authors' purposes, subjects, and audience expectations. Grades will be based on in-class performance, homework, assessments, and a final exam. The teacher outlines policies on late work, required materials, and stresses the importance of being engaged, trying one's best, and avoiding plagiarism.
This document discusses key performance indicators (KPIs) for project management. It provides resources for developing KPIs, including lists of sample KPIs, performance appraisal metrics, and methods. It also describes best practices for creating effective KPIs, such as linking them to organizational strategies and ensuring they empower employees. Finally, it outlines different types of KPIs, including process, input, output, leading, lagging, outcome, qualitative and quantitative.
Este documento presenta métodos hidrológicos para estimar los recursos hídricos y caudales máximos en pequeñas cuencas hidrográficas, con el fin de diseñar obras hidráulicas como presas y puentes. Describe cómo delimitar el área de una cuenca, calcular la precipitación media a través de métodos aritméticos, de Thiessen o isoyetas, y estimar el volumen de escurrimiento anual usando el coeficiente de escurrimiento. También explica el cálculo del período
1) This document outlines the course guidelines for a 10th grade Western Perspectives class, including the essential question of "What does it mean to be human?". 2) Students will read and analyze texts to develop their understanding, with a focus on persuasive writing and vocabulary development. 3) Novels to be read include The Curious Incident of the Dog in the Night-time, Frankenstein, and Othello. 4) Classroom policies require students to be respectful, responsible, and rational, and outline consequences for late work and absences.
This document discusses key performance indicators (KPIs) and the KPI process. It provides information on developing KPIs, including defining objectives, identifying key result areas and tasks, determining work procedures, and creating metrics to measure results. The document also discusses common mistakes in creating KPIs, such as having too many KPIs not linked to key result areas. Additionally, it describes different types of KPIs like process, input, output, leading, lagging, outcome, qualitative and quantitative KPIs.
This document outlines the guidelines and policies for an AP English Language and Composition course. The course focuses on developing skills in reading prose from various time periods, disciplines, and contexts, as well as becoming skilled writers for different purposes. Students will write in various modes such as narrative, exploratory, expository, and argumentative using personal experiences and research. The course also emphasizes synthesis of texts, including written, oral, and visual materials from different genres and historical periods. Classroom policies address assignments, grading, attendance, and supplies required for the course.
Making Awesome Experiences with BiosensorsSophiKravitz
Talk about some of my art installations using heartbeat sensors, brainwave sensors and skin conductance sensing.
Also includes selected art installations by other artists.
Este documento presenta una cronología de todos los satélites artificiales lanzados desde 1957 hasta 1962. Incluye el nombre de cada satélite, la fecha de lanzamiento, el país al que pertenece y su tipo o propósito. Los primeros satélites fueron lanzados por la Unión Soviética y Estados Unidos con fines experimentales y científicos. Con el tiempo, más países se unieron al lanzamiento de satélites con una variedad de objetivos como comunicaciones, meteorología y militares.
Toyota Kirloskar Motor Pvt Ltd is a joint venture between Toyota Motor Corporation of Japan and the Kirloskar Group of India. It is the 4th largest car maker in India and manufactures Toyota vehicles at its two plants in Bidadi, Karnataka with a combined annual capacity of 150,000 vehicles. The company aims to put customers first and plans to enter the healthcare sector in India with its first hospital opening in Karnataka in 2013.
This document discusses various techniques for compressing data in PostgreSQL including:
1. TOAST row compression which compresses variable-length values.
2. Compressing posting lists in indexes using variable byte encoding.
3. Default values, compression of leading columns in indexes, and page compression which uses a dictionary approach.
It also raises questions about when and how to implement and configure these different compression techniques in PostgreSQL.
This document summarizes the research of a group that evaluates router security by searching for vulnerabilities. It outlines common security issues the group has found such as default credentials, unnecessary services, and vulnerabilities like cross-site scripting, privilege escalation, and exploitation of UPnP. It details several attacks the group has developed and provides recommendations to manufacturers and users on mitigating these security risks. Over 60 vulnerabilities across 22 router models from 11 manufacturers have been discovered.
This document discusses key performance indicators (KPIs) and how to develop them. It provides information on defining objectives, identifying key result areas and tasks, measuring results, and creating KPIs. The document also discusses common mistakes in KPI development, such as creating too many KPIs, and how KPIs should be linked to strategy and empower employees. Finally, it outlines different types of KPIs, including process, input, output, leading, lagging, outcome, qualitative and quantitative KPIs.
Презентация доклада о B-tree индексах для российской конференции по PostgreSQL pgconf.ru. В презентации рассмотрены особенности архитектуры, важные для оптимального использования btree индексов. Кроме того, представлены улучшения функциональности B-tree в PostgreSQL, которые войдут в релиз 9.6. Это компрессия дубликатов и новые возможности использования покрывающих (covering) индексов.
Historia de los_satelites_de_comunicaciones._bit_134._5c6c417aJesus Ayerve Tuiro
La historia de los satélites de comunicaciones comenzó en 1945 cuando el escritor Arthur C. Clarke propuso un sistema de comunicación global utilizando estaciones espaciales. El primer satélite artificial, Sputnik 1, fue lanzado por la Unión Soviética en 1957 y marcó el inicio de la era de las comunicaciones vía satélite. Desde entonces, se han lanzado satélites para comunicaciones, navegación, observación de la Tierra y otros fines, que operan en diferentes órbitas y bandas de frecuencias.
Global warming has increased the earth's temperature by 1 degree F over the past 100 years. While the causes are debated, many scientists believe human activities like burning fossil fuels are contributing to increased greenhouse gases and trapping more heat in the atmosphere. The consequences of continued global warming could include rising sea levels from melting ice caps that displace coastal populations, more frequent extreme weather, and potential mass species extinction by 2050. Reducing industrial greenhouse gas emissions is necessary to curb further global warming impacts.
The document provides a summer survival guide for high school with the following sections:
I. Part I explores yourself through personality tests, volunteer opportunities, and interest surveys to discover your interests and strengths.
II. Part II prepares you for high school schedules by having you track your current time usage, schedule your time, and reflect on your time management.
III. Part III addresses preparing for high school challenges by explaining when, how, and who to ask for help from if you encounter difficulties socially or academically.
IV. Part IV provides checklists to help you explore yourself, the world, your future, and prepare for high school schedules and challenges.
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
О докладе:
Про Python и Django: зачем нужна красота и простота перфекционистам с дедлайнами, на примере Яндекс.Погоды.
Когда число сервисов, которые делаются в Яндексе, стало возрастать, дедлайны — поджимать, а от процесса разработки требовалось стать более гибким, возникла потребность в свежих решениях. В докладе на примере Яндекс.Погоды рассказывается, как в Яндексе делают сервисы с помощью языка Python и веб-фреймворка Django.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Документация на тему архитектуры языка PHP скудна и разрозненна, несмотря на то что тема интересна многим. В моем докладе я постараюсь заполнить этот пробел и рассказать о модулях PHP: как они работают, зачем и как их пишут. В процессе мы рассмотрим опыт Badoo в этой сфере на примерах двух модулей. И еще напишем очень небольшой собственный модуль.
— Что такое модули PHP, как они работают
— Как начать писать свой модуль PHP
— Скелет модуля — Функции, классы, методы
— Разбор параметров функции
— Сборка модуля
— Подгрузка модуля
— Простой пример модуля из Badoo
— Сложный пример модуля из Badoo
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
3. 3
postgres/
contrib – модули расширений
doc – документация (SGML)
src – ядро PostgreSQL
...
src/backend – сервер PostgreSQL ("Back-End")
src/bin – psql, pg_dump, initdb, и т.д. ("Front-End")
src/common – код, общий для front & back
src/include – .h файлы
src/interfaces – libpq, ecpg
src/pl – процедурные языки (plpgsql, plperl, plpython, tcl)
src/port – разные функции для портируемости
src/tools – инструменты для разработчиков (pgindent, и т.д.)
4. 4
src/bin
Серверные утилиты
initdb – инициализация нового кластера баз данных PostgreSQL
pg_ctl – инициализация, запуск, останов и управление сервером
pg_controldata – вывод свойств, установленных командой initdb
pg_upgrade – обновление мажорной версии PostrgeSQL
pg_archivecleanup – очистка архивных WAL файлов
pg_resetxlog – очистка журнала упреждающей записи и другой
управляющей информацию кластера PostgreSQL
pg_xlogdump – вывод WAL файлов в удобном для чтения формате
pg_test_timing – измерение timing оверхеда
pg_rewind – синхронизация директорий PGDATA. Типичный сценарий –
восстановить упавший мастер как реплику нового мастера.
pg_test_fsync – определяет самый быстрый метод wal_sync_method
для конкретной системы
5. 5
src/bin
Клиентские утилиты
psql – интерактивный терминал
pgevent
pg_dump – выгрузить базу данных PostgreSQL в формате скрипта в
файл или архив
pgbench – выполнение бенчмарков
pg_basebackup – создать резервную копию кластера PostgreSQL
pg_config – информация по конфигурационным параметрам
развёрнутого кластера
BINDIR = /home/anastasia/projects/postgresql_bin/bin
CONFIGURE = 'enabledebug' 'CFLAGS=O0' 'enabledepend' 'enable
cassert' 'prefix=/home/anastasia/projects/postgresql_bin/'
6. 6
src/bin/scripts
Клиентские скрипты
clusterdb -- кластеризовать базу данных
createdb -- создать базу данных
createlang -- установить процедурный язык
createuser -- создать новую учётную запись
dropdb -- удалить базу данных
droplang -- удалить процедурный язык
dropuser -- удалить учётную запись пользователя
pg_isready -- проверить соединение с сервером
reindexdb -- переиндексировать базу данных
vacuumdb -- выполнить очистку и анализ базы данных
8. 8
src/backend
access - Методы доступа для разных структур данных (heap, btree indexes, gist, gin, brin…).
bootstrap - режим первоначальной загрузки
catalog - определения таблиц системного каталога
сommands - DDL и служебные команды (ALTER, CREATE TABLE, VACUUM, ...)
executor - выполнение запросов
foreign - Foreign Data Wrappers, user mappings, etc
lib - разные функции “общего назначения”
libpq - клиент-серверный протокол
main - основной процесс, передающий управление нужной подсистеме
nodes - обобщенная структура “Node” и функции из сравнения, копирования и т.д.
optimizer - оптимизатор запросов, реализует систему оценок стоимости и генерирует план
parser - лексер и парсер, разбор текста запросов
port - специфические функции для портирования
postmaster - основной процесс PostgreSQL
regex - Henry Spencer's regex library, also used by TCL, maintained more-or-less by PG now
replication – поддержка репликации, пересылка WAL-логов, чтение и т.д.
rewrite - перезапись запросов с использованием правил (RULE)
snowball - Snowball stemming, used with full-text search
storage - уровень хранилища, ввод/вывод, поддержка LO.
tcop - "Traffic Cop"- получение запросов и их обработка
tsearch - полнотекстовый поиск
utils - различные компоненты сервера, (кэш, управление памятью и т.д.)
10. 10
Инициализация
bootstrap
Создание исходных баз через initdb.
main
Выполняет первоначальный запуск некоторых подсистем (например
error management и memory management), устанавливает информацию
о локали. Проверяет различные флаги и передает управление
процессу postmaster или postgres.
postmaster
Контролирует запуск и остановку сервера postgres. Создает
разделяемую память, а затем в цикле ждет запросов на подключение.
Сразу после получения такого запроса порождает backend процесс
postgres и передает управление ему.
libpq
Backend операции библиотеки libpq для взаимодействия с процессом
клиента.
11. 11
initdb
src/bin/initdb/initdb.c – создание инстанса PostgreSQL.
Создание таблиц template0, template1 и postgres.
template0 – не изменяется после initdb
template1 – может содержать локальные данные
12. 12
bootstrap
BKI – Backend Interface.
src/backend/bootstrap/bootstrap.c – функции для работы в режиме
инициализации кластера
pg_class, pg_attributes, pg_proc, pg_type – основные таблицы
каталога.
src/include/catalog/genbki.pl – скрипт на Perl, который генерирует
файл postgres.bki (и несколько других) из заголовочных файлов особого
формата src/include/catalog/pg_*.
src/backend/catalog/postgres.bki – создание таблиц каталога,
индексов и TOAST таблиц.
19. 19
Асинхронные операции
NoticeResponce – уведомления от сервера
ParameterStatus – уведомления об изменении параметров
NotificationResponse – сообщения, переданные через NOTIFY,
если клиент выполняет команду LISTEN
24. 24
src/backend/parser/README
parser.c things start here
scan.l break query into tokens
scansup.c handle escapes in input strings
kwlookup.c turn keywords into specific tokens
keywords.c table of standard keywords (passed to kwlookup.c)
gram.y parse the tokens and produce a "raw" parse tree
analyze.c top level of parse analysis for optimizable queries
parse_agg.c handle aggregates, like SUM(col1), AVG(col2), ...
parse_clause.c handle clauses like WHERE, ORDER BY, GROUP BY, ...
parse_coerce.c handle coercing expressions to different data types
parse_collate.c assign collation information in completed expressions
parse_cte.c handle Common Table Expressions (WITH clauses)
parse_expr.c handle expressions like col, col + 3, x = 3 or x = 4
parse_func.c handle functions, table.column and column identifiers
parse_node.c create nodes for various structures
parse_oper.c handle operators in expressions
parse_param.c handle Params (for the cases used in the core backend)
parse_relation.c support routines for tables and column handling
parse_target.c handle the result list of the query
parse_type.c support routines for data type handling
parse_utilcmd.c parse analysis for utility commands (done at execution time)
33. 33
src/include/nodes/parsenodes.h
typedef struct Query
{
NodeTag type;
CmdType commandType; /* select|insert|update|delete|utility */
QuerySource querySource; /* where did I come from? */
uint32 queryId; /* query identifier (can be set by plugins) */
bool canSetTag; /* do I set the command result tag? */
Node *utilityStmt; /* non-null if this is DECLARE CURSOR or a
* non-optimizable statement */
int resultRelation; /* rtable index of target relation for
* INSERT/UPDATE/DELETE; 0 for SELECT */
bool hasAggs; /* has aggregates in tlist or havingQual */
bool hasWindowFuncs; /* has window functions in tlist */
bool hasSubLinks; /* has subquery SubLink */
bool hasDistinctOn; /* distinctClause is from DISTINCT ON */
bool hasRecursive; /* WITH RECURSIVE was specified */
bool hasModifyingCTE; /* has INSERT/UPDATE/DELETE in WITH */
bool hasForUpdate; /* FOR [KEY] UPDATE/SHARE was specified */
bool hasRowSecurity; /* row security applied? */
34. 34
Query
List *cteList; /* WITH list (of CommonTableExpr's) */
List *rtable; /* list of range table entries */
FromExpr *jointree; /* table join tree (FROM and WHERE clauses) */
List *targetList; /* target list (of TargetEntry) */
OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */
List *returningList; /* return-values list (of TargetEntry) */
List *groupClause; /* a list of SortGroupClause's */
List *groupingSets; /* a list of GroupingSet's if present */
Node *havingQual; /* qualifications applied to groups */
List *windowClause; /* a list of WindowClause's */
List *distinctClause; /* a list of SortGroupClause's */
List *sortClause; /* a list of SortGroupClause's */
Node *limitOffset; /* # of result tuples to skip (int8 expr) */
Node *limitCount; /* # of result tuples to return (int8 expr) */
List *rowMarks; /* a list of RowMarkClause's */
Node *setOperations; /* set-operation tree if this is top level of
* a UNION/INTERSECT/EXCEPT query */
List *constraintDeps; /* a list of pg_constraint OIDs that the query
* depends on to be semantically valid */
...
} Query;
35. 35
CreateStmt
typedef struct CreateStmt
{
NodeTag type;
RangeVar *relation; /* relation to create */
List *tableElts; /* column definitions (list of ColumnDef) */
List *inhRelations; /* relations to inherit from (list of
* inhRelation) */
TypeName *ofTypename; /* OF typename */
List *constraints; /* constraints (list of Constraint nodes) */
List *options; /* options from WITH clause */
OnCommitAction oncommit; /* what do we do at COMMIT? */
char *tablespacename; /* table space to use, or NULL */
bool if_not_exists; /* just do nothing if it already exists? */
} CreateStmt;
36. 36
Constraint
typedef struct Constraint
{
NodeTag type;
ConstrType contype; /* see above */
/* Fields used for most/all constraint types: */
char *conname; /* Constraint name, or NULL if unnamed */
bool deferrable; /* DEFERRABLE? */
bool initdeferred; /* INITIALLY DEFERRED? */
int location; /* token location, or -1 if unknown */
/* Fields used for unique constraints (UNIQUE and PRIMARY KEY): */
List *keys; /* String nodes naming referenced key column(s) */
List *including; /* String nodes naming referenced nonkey
* column(s) */
...
}