Введение
Глава 1: Аналитический обзор и постановка и методологии исследования
1.1. Что такое JSON
1.2. Как выглядит JSON
1.3. Объекты JSON
1.4. JSON Arrays
1.5. Типы данных JSON
1.6. Схемы JSON
1.7. Создание схемы
1.8. Как использовать JSON для выполнения HTTP-запроса
1.9. Выводы по главе 1
Глава 2: Принципы и способы исследовательская работа, методы и этапы оптимизация производительности типов данных Json Jsonb
2.1. Работа с данными типов JSON и JSONB
2.2. Постановка задачи
2.3. Оптимизированное хранилище и автоматическую проверку
2.4. Создание и хранение XML документов
2.4. Выборка и преобразование данных типа XML
2.5. Реляционная модель данных
2.6. Описывался состав и возможности применения скалярных типов, используемых в
2.7. Выводы по главе 2
Глава 3: результаты анализы исследовательская работа
3.1. Оптимизация SQL запросов для ускорения сайтов с помощью json
3.1.1. МySQL
3.1.2. Визуальное расследование
3.1.3. Решение
3.1.4. Индексы
3.1.5. результат оптимизация SQL запросов для ускорения сайтов с помощью json
3.1.6. Результаты
3.2. Иллюстрация методов работы с XML данными
3.3. Иллюстрация методов работы с JSON и JSONB данными
3.4. Оптимизация обработка данных с использование ограничением not null и индексации
3.4.1.Оптимизация jsonb array
3.4.2. Индексировать это jsonb поле
3.4.3. Оптимизация запроса Postgres JSONB с ограничением not null
3.4.4. Результат анализирования запроса
3.5. Выводы по главе 3
Заключение
Список литературы
Приложения
Приложения 2
Приложения 3
Цель работы и задачи исследования:
Целью работы является исследование сложных типов данных, используемых в современных системах управления базами данных, а также изучение методов повышения скорости работы с документов содержимого типов JSON, JSONB.
В рамках данного исследования будем анализировать следующие задачи:
- рассмотрение особенностей реляционной модели данных и описание
структурированных моделей, содержащих данные сложной структуры
- анализ различных типов данных в современных СУБД и выделение среди них сложных по структуре;
- обзор методов работы с указанными типами;
- выделение средств, позволяющих выполнять операции со сложными типами данных при минимальных ресурсозатратах;
- использование индексов для поиска информации с использованием сложных типов данных;
- экспериментальная часть, иллюстрирующая применение указанных методов.
На сегодняшний день базы данных используются повсеместно. Каждое предприятие имеет свою собственную базу данных, содержащую огромное количество различной информации, связанной со структурой и деятельностью предприятия.
Сложные типы данных, такие как XML и JSON, JSONB, так же нашли применение во многих областях, так как имеют ряд особенностей, позволяющих упростить работу с данными и ускорить различные процессы. К тому же они часто применяются при работе с большими объемами информации. Поэтому особенно важно изучить вопрос увеличения скорости работы с этими типами и запросами к ним. Так как в масштабах крупных предприятий и баз данных, содержащих миллионы записей, небольшие на первый взгляд временные задержки, накладываясь друг на друга, могут в сумме значительно снизить производительность и принести серьезный ущерб работе всей системы в целом.
В первой главе описания работы с документами содержимого json и jsonb в сложных систем, поставлена задача работы в формализованном виде, подробно описана наиболее распространенная реляционная модель данных, а так же структурированная модель, примером которой являются данные сложных типов. Далее описаны все основные типы данных, используемые в современных СУБД, как скалярные, так и структурированные. При этом упор сделан на необходимые в практическом исследовании типы – XML и JSON. Также в этой главе приведено математическое обоснование структуры индекса, организации индексов как В-деревьев, а так же алгоритмы операций, осуществляемых в индексах с приведением оценок по критерию временной производительности относительно прямого поиска.
Во второй главе рассматривались основные операции при Структурирование и анализа документов содержимого JSONB с целью оптимизация работы с базами данных (работа с данными сложных типов), такие как создание и хранение документов, их преобразование, а так же математических модели, и выборка XML и JSON данных.
В заключительной главе проведен практический эксперимент и Анализы документов содержимого JSON и JSONB на Postgresql и Mysql, позволяющий проиллюстрировать методы и явления, описанные в предыдущих главах, а так же подтвердить теоретические оценки эффективности.
Научная новизна
Во время исполнения запроса на выборку планировщик использовал созданный нами индекс data_ind, о чем свидетельствует выражение Bitmap Index Scan on data_ind, находящееся в четвертой строке плана.
Выражение Heap Scan on table_json означает, что после поиска с использованием индекса, PostGreSQL производит проверку существования найденных значений в заданной таблице.
Так же мы можем видеть, что время исполнения запроса уменьшилось почти в восемьдесят раз, что является достаточно внушительным результатом, и составило 0.049 мс.
Так же удалось сократить время запроса примерно с 1000 мс до 350 мс, создав следующий частичный индекс:
CREATE INDEX index_accounts_partial_on_verified_at
ON accounts ((data->'data'->'verified_at'))
WHERE (data->'data'->>'verified_at') IS NOT NULL
AND (data->'data' ? 'verified_at')
AND (data->'data'->>'country' = 'YE');
Я смог закодировать некоторые значения в этом индексе, такие как country=YE , потому что мне нужно только рассмотреть учетные записи YE для этого запроса. Я также смог удалить индекс на ((data->'data')) , который был 258 МБ, и заменить его частичным индексом, который составляет всего 1360 КБ!
Так же результат оптимизация SQL запросов для ускорения сайтов с помощью json, можно предпринять и другие способы для ускорения выполнения запросов, в которых нужно чуть больше, чем просто поправить запрос или добавить индекс. Одна из самых медленных частей нашего запроса – процесс объединения таблиц для перехода от id покупателя к id товара, и это необходимо делать для каждого покупателя. А что если сделать все объединения за раз, чтобы получать данные о покупателе тогда, когда это необходимо, мы еще можем денормализовать данные, создав таблицы, в которой хранятся данные лицензии, а также id пользователя и товара для всех лицензий, а также запрос к конкретному покупателю. Понадобится пересобрать таблицу с помощью MySQL triggers на INSERT/UPDATE/DELETE для таблицы лицензий (или других в зависимости от изменения данных), но это значительно повысит производительность запроса данных.
Если несколько join замедляют запрос, можно ускорить его, разбив на 2 и более выражения, после чего выполнять их отдельно в PHP, собирать и фильтровать результаты в коде. Laravel делает что-то похожее в жадной загрузке в Eloquent.
WordPress может замедлять запросы к таблице wp_posts, если объем данных большой, и присутствует множество кастомных типов постов. Если запросы типов постов замедляют сайт, попробуйте уйти от модели хранения кастомных типов постов в сторону кастомной таблицы.
С помощью этих подходов по оптимизации запросов нам удалось ускорить наш запрос с 8 до 2 секунд, а также снизить количество вызовов с 4 до 1. Время запросов записывалось на версии для разработки, в продакшн оно было бы меньше.
Таким образом, использование индексов может значительно оптимизировать работу запросов на выборку данных объектов JSON.
Глава 1: Аналитический обзор и постановка и методологии исследования
1.1. Что такое JSON
JSON популярен. JSON (JavaScript Object Notation), возможно, является наиболее широко используемым форматом данных для обмена данными в сети. Вероятно, он превзошел XML (который используется в приложениях AJAX) как наиболее распространенный формат, используемый для асинхронной связи между браузером и сервером.
JSON - это человекочитаемый и машиночитаемый формат. Другими словами, документ JSON структурирован таким образом, чтобы его можно было легко прочитать с помощью компьютерной программы, тогда как человек обычно может быстро сканировать файл JSON и понимать данные, которые в нем содержатся.
JSON основан на подмножестве JavaScript. JSON был вдохновлен объектными литералами JavaScript (также известным как ECMAScript). Однако, несмотря на это, JSON не зависит от языка. Это может облегчить обмен данными между большинством, если не всеми языками программирования. Фактически, JSON использует общие соглашения о программировании, что делает его знакомым большинству программистов, независимо от их выбранного языка / языков.
1.2. Как выглядит JSON
Вот базовый пример документа JSON:
{
"художники": [
{
"имя исполнителя": "Deep Purple",
"альбомы": [
{
"albumname": "Machine Head",
"год": "1972",
"жанр": "рок"
},
{
"albumname": "Stormbringer",
"год": "1974",
"жанр": "рок"
}
]
}
]
}
Это почти так же сложно, как большинство документов JSON (хотя большинство будет содержать гораздо больше данных).
Документ JSON содержит текст, фигурные скобки, квадратные скобки, двоеточия, запятые, двойные кавычки и, возможно, несколько других символов.
Но, вероятно, самая заметная вещь в JSON - это то, что его данные состоят из пар имя / значение. Эти пары имя / значение отражают структуру данных. Даже если вы не знаете JSON, вы сможете получить базовое представление о структуре данных, просто взглянув на то, как данные хранятся в вышеуказанном файле JSON.
Хорошей новостью является то, что мой маленький пример охватывает почти весь синтаксис JSON. Больше нечего показать, кроме как объяснить, как работает синтаксис.
JSON хранит данные в объектах и массивах. Синтаксис JSON отражает их определение.