MySQL 5.7 отримав новий нативний тип даних JSON і набір SQL функцій для роботи з ним. Сьогодні ми продемонструємо кілька простих прикладів цих можливостей з испльзование даних SF OpenData.
Не пропустіть ще одну статтю по цій темі - Використання JSON в MySQL.
імпортуємо дані
Важливо використовувати якісні тестові дані, тому що так простіше перевіряти точні результати запитів. Також вони мають хорошу структуру, що важливо при додаванні індексів.
Обраний нами набір даних з SF OpenData містить близько 200 тисяч позицій. Спочатку скачати їх і імпортуємо в базу.
Кожен документ має такий вигляд і вдає із себе ділянку землі, обмежений точками:
У нашому випадку все 200 тисяч документів мають один формат, але це необов'язково, так як JSON в MySQL - schema-less.
приклади запитів
Запит 1: Знайдемо ділянку землі, яку він обіймав вулицею з назвою "Market"
За допомогою оператора-скорочення для JSON_EXTRACT (->) ми можемо робити запити до JSON стовпцями зручним способом. Синтаксис "$ .properties.STREET" чимось схожий на CSS селектори, які використовуються в jQuery. Дізнатися більше про синтаксис JSON запитів можна з документації
Запит 2: Знайдемо всі ділянки землі, де не вказано вулиця:
Так як JSON в MySQL - schemaless, він знаходить всі документи, що не мають необхідної структури. У цьому прикладі ми бачимо що у всіх документів визначено властивість $ .properties.STREET, тому запит повертає нульовий результат.
Порівняння типів JSON і TEXT
У цьому прикладі ми виконаємо запит, який обробить всі 200 тисяч JSON документів. Це буде щось на зразок невеликого тесту продуктивності, але без використання індексів.
Що ми тут зробили:
- Для спрощення ми переконалися що в обох прикладах дані містяться в пам'яті.
- Фуркціі для роботи з JSON, включаючи алиас (->) для json_extract () працюють однаково як для JSON типу даних, так і для TEXT / BLOB / VARCHAR типів. Це дуже корисно для користувачів хто тільки оновився до MySQL 5.7, але вже зберігає дані в JSON.
- Ми бачимо що JSON тип приблизно в 10 разів швидше ніж TEXT тип - 1.25 секунд проти 12.85. Це пояснюється тим, що нативний тип JSON не вимагає ніякого розбору або перевірки даних, і можна ефективно будувати запити до JSON документам.
Підтримку JSON документів вже додали в query builder Laravel'а. І в майбутньому підтримка швидше за все з'явиться і в інших фреймворків.
Якщо не знайшли відповідей на свої питання можете подивитися в іншій статті - Використання JSON в MySQL.