Apakah json bagus di mysql?

JavaScript Object Notation (JSON) adalah format file berbasis teks ringan yang mirip dengan YAML atau XML yang menyederhanakan pertukaran data. Itu ditemukan oleh Douglas Crockford pada awal 2000-an dan menjadi semakin populer dengan munculnya database berbasis dokumen (juga disebut NoSQL).

JSON mendukung string, angka, boolean, objek, dan array serta nilai null. Contoh JSON sederhana yang berisi key-value pair, objek "bandMembers" dan array "songs" akan terlihat seperti ini

JSON

{
  "artist": "Starlord Band",
  "bandMembers": {
    "vocals": "Steve Szczepkowski",
    "guitar": "Yohann Boudreault",
    "bass": "Yannick T.",
    "drums": "Vince T."
  },
  "bandMembersCount": 4,
  "album": "Space Rider",
  "releaseDate": "2021-10-25",
  "songs": [
    "Zero to Hero",
    "Space Riders with No Names",
    "Ghost",
    "Bit of Good (Bit of Bad)",
    "Watch me shine",
    "We’re Here",
    "The Darkness inside",
    "No Guts No Glory",
    "All for One",
    "Solar Skies"
  ],
  "songsCount": 10
}

MySQL telah mengimplementasikan dukungan dasar untuk tipe data JSON dengan versi 5. 7. 8 pada pertengahan 2015 dan telah menambahkan peningkatan dan fitur baru sejak saat itu. Tujuh tahun kemudian, MySQL sekarang mendukung banyak fungsi SQL untuk bekerja dengan dokumen JSON, menyediakan validasi konten otomatis, memungkinkan pembaruan sebagian di tempat, dan menggunakan format penyimpanan biner untuk meningkatkan kinerja

Database relasional mengikuti struktur yang telah ditentukan dan menekankan pada kohesi dan integritas data. Untuk mencapai ini, tipe dan format datanya, serta ukuran datanya, semuanya ditegakkan secara ketat melalui skema.

Tipe data JSON sedikit anti-pola terhadap sifat ketat dari skema semacam itu. Ini memungkinkan Anda untuk keluar darinya, untuk mendapatkan fleksibilitas saat Anda membutuhkannya. Dan itu terbukti bermanfaat selama Anda mengetahui kompromi yang dijelaskan di bagian selanjutnya

Beberapa contoh kapan mungkin bermanfaat untuk menyimpan data sebagai dokumen JSON adalah

  • Keluaran log yang ditulis oleh aplikasi atau server
  • Respons Rest API yang ingin Anda simpan
  • Menyimpan data konfigurasi
  • Satu set entitas dengan atribut variabel

Anda juga dapat menggunakan dokumen JSON dalam desain database relasional untuk memecah relasi kompleks yang mencakup beberapa tabel. Proses ini disebut denormalisasi, yang merupakan anti-pola basis data relasional lainnya. Namun, dalam kasus tertentu, ini dapat menghasilkan peningkatan kinerja tergantung pada kasus penggunaan dan desain aplikasi Anda

Fleksibilitas yang diberikan oleh tipe data JSON hadir dengan beberapa peringatan yang perlu Anda ketahui

Terutama, Anda perlu mempertimbangkan bahwa dokumen JSON sering kali membutuhkan lebih banyak kapasitas penyimpanan. Di MySQL, jejak penyimpanannya mirip dengan tipe data

CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
1 atau
CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
2. Ada overhead, karena pengkodean biner dan tambahan metadata dan kamus yang ada untuk mempercepat pembacaan basis data. Aturan praktis yang baik adalah bahwa string yang disimpan di JSON menggunakan sekitar 4 hingga 10 byte penyimpanan tambahan dibandingkan dengan kolom
CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
1 atau
CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
2

Jika Anda ingin mengoptimalkan skema database Anda untuk efisiensi penyimpanan, yang terbaik adalah menggunakan tipe data MySQL yang lebih tradisional (

CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
5,
CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
6,
CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
7, dan sejenisnya), karena semuanya lebih hemat penyimpanan daripada JSON yang mungkin pernah ada

Peringatan lain yang harus diperhatikan adalah dampak kinerja. Mirip dengan format biner lainnya, dokumen JSON tidak dapat diindeks secara langsung. Ini, dan jumlah variabel data yang dapat Anda simpan dalam dokumen JSON, berarti bahwa meminta kolom JSON sering kali menggunakan lebih banyak ruang buffer dan mengembalikan kumpulan hasil yang lebih besar, yang mengarah ke lebih banyak pertukaran data

Catatan. Meskipun dokumen JSON tidak dapat diindeks secara langsung di MySQL, dokumen tersebut dapat diindeks secara tidak langsung. Pelajari caranya di Pengindeksan JSON di MYSQL

Meskipun dokumen JSON yang disimpan di MySQL dapat berukuran hingga 1 GB, secara teori, disarankan untuk menyimpan dokumen JSON dengan ukuran hanya beberapa MB. Di PlanetScale, kami mendukung dokumen JSON hingga 67 MB

MySQL hadir dengan serangkaian fungsi JSON yang kuat yang memungkinkan Anda membuat, memperbarui, membaca, atau memvalidasi dokumen JSON Anda. PlanetScale mendukung semua fungsi JSON kecuali

CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
8

Mari kita telusuri beberapa contoh bersama

Pertama, kita membuat tabel dengan kolom

CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
_9 dan
CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
0

SQL

CREATE TABLE songs (id int AUTO_INCREMENT PRIMARY KEY NOT NULL, songs JSON);
_

Tabel kosong membutuhkan data, jadi mari gunakan

INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
1 untuk menambahkan beberapa

SQL

INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));

Bagaimana kita tahu ini adalah array?

SQL

SELECT JSON_TYPE(songs) FROM songs;
+------------------+
| json_type(songs) |
+------------------+
| ARRAY            |
+------------------+

Jika kita ingin mengekstrak item dari array, kita dapat melakukannya dengan

INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
3. Dalam contoh di bawah ini, kami mengekstrak elemen keempat dari array

SQL

blog-mysql-json/main> SELECT JSON_EXTRACT(songs, '$[3]') FROM songs;
+-----------------------------+
| json_extract(songs, '$[3]') |
+-----------------------------+
| "Ghost"                     |
+-----------------------------+

Kita juga dapat menggunakan

INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
_4, yang setara dengan operator untuk
INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
3

SQL

blog-mysql-json/main> SELECT songs->'$[3]' FROM songs;
+-----------------+
| songs -> '$[3]' |
+-----------------+
| "Ghost"         |
+-----------------+

Jika kita membutuhkan hasil yang tidak dikutip, kita dapat menggunakan

INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
6, yang merupakan kependekan dari
INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
7

SQL

blog-mysql-json/main> SELECT songs->>'$[3]' FROM songs;
+------------------+
| songs ->> '$[3]' |
+------------------+
| Ghost            |
+------------------+

Jika kita perlu menambahkan data ke array JSON, kita dapat menggunakan

INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
8 atau
INSERT INTO songs VALUES(id, JSON_ARRAY('Zero to Hero', 'Space Riders with No Names', 'Ghost', 'Bit of Good (Bit of Bad)', 'Watch me shine', 'We\'re Here', 'The Darkness inside', 'No Guts No Glory', 'All for One', 'Solar Skies'));
9 untuk memperbaruinya

SQL

UPDATE songs SET songs = JSON_ARRAY_APPEND(songs, '$', "One last song");
UPDATE songs SET songs = JSON_ARRAY_INSERT(songs, '$[0]', "First song");

Untuk informasi selengkapnya tentang cara menggunakan semua fungsi JSON yang berbeda, silakan lihat dokumentasi MySQL untuk tipe data JSON dan referensi Fungsi JSON

Haruskah Anda menggunakan JSON di MySQL?

Jika Anda memiliki persyaratan data relasional yang jelas, gunakan bidang nilai tunggal yang sesuai. JSON harus digunakan dengan hemat sebagai upaya terakhir . Bidang nilai JSON tidak dapat diindeks, jadi hindari menggunakannya pada kolom yang diperbarui atau dicari secara rutin.

Apakah baik menyimpan JSON di database SQL?

Kesimpulan. Fungsi Native JSON di SQL Server dan SQL Database memungkinkan Anda memproses dokumen JSON seperti di database NoSQL. Setiap basis data - relasional atau NoSQL - memiliki beberapa pro dan kontra untuk pemrosesan data JSON. Manfaat utama menyimpan dokumen JSON di SQL Server atau SQL Database adalah dukungan bahasa SQL penuh .

Apakah baik menggunakan JSON di basis data?

Database JSON memungkinkan untuk menyimpan data sebagai JSON dan memberikannya ke aplikasi dalam bentuk lain . Misalnya, ini dapat beroperasi sebagai penyimpanan nilai kunci dalam memori untuk aplikasi yang hanya membutuhkan akses cepat dan mudah. Atau, pengindeksan dan kueri dapat membuat data JSON muncul sebagai tabel.

Apa kekurangan JSON di MySQL?

Kekurangannya? . Kekurangan lainnya adalah MySQL tidak mendukung pengindeksan kolom JSON , yang berarti bahwa menelusuri dokumen JSON Anda dapat menghasilkan pemindaian tabel lengkap.