Bisakah json disimpan 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

Apakah boleh menyimpan JSON di database SQL?

Anda dapat menyimpan dokumen JSON di SQL Server atau Database SQL dan mengkueri data JSON seperti di database NoSQL.

Bagaimana cara menambahkan JSON di MySQL?

Di MySQL, fungsi JSON_SET() menyisipkan atau memperbarui nilai dalam dokumen JSON dan mengembalikan hasilnya . Anda memberikan dokumen JSON sebagai argumen pertama, diikuti dengan jalur untuk disisipkan, diikuti dengan nilai untuk disisipkan. Anda dapat memberikan beberapa pasangan jalur/nilai jika Anda perlu memperbarui beberapa nilai.

Bagaimana cara menggunakan JSON di MySQL?

Mengekspor data MySQL ke JSON menggunakan fungsi CONCAT() dan GROUP_CONCAT() . Menggunakan kombinasi fungsi CONCAT() dan GROUP_CONCAT(), data dari string SQL dapat diubah menjadi format JSON. Lebih lanjut tentang penggunaan INTO OUTFILE dapat ditemukan di artikel Cara mengekspor data MySQL ke CSV.

Postingan terbaru

LIHAT SEMUA