Tipe data MySQL JSON

Database


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

JSON mendukung string, angka, boolean, objek, dan array, serta nilai nol. Contoh JSON sederhana terdiri dari pasangan nilai kunci, sebuah objek "bandMembers" dan array "songs" Ini akan menjadi seperti ini:

{
    "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 menerapkan dukungan awal 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 beberapa 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 koherensi dan integritas data. Untuk mencapai ini, tipe data dan formatnya, serta ukuran datanya, semuanya diterapkan secara ketat menggunakan skema yang sama.

Tipe data JSON sedikit anti-pola dengan sifat ketat skema semacam itu. Ini memungkinkan Anda untuk melangkah keluar dan mendapatkan fleksibilitas saat dibutuhkan. Dan itu akan berguna selama Anda mengetahui pertukaran yang dijelaskan di bagian berikutnya.

Beberapa contoh kapan mungkin berguna untuk menyimpan data sebagai dokumen JSON meliputi:

  • Keluaran logging yang ditulis oleh aplikasi atau server
  • Respons API Istirahat yang ingin Anda simpan
  • Penyimpanan data konfigurasi
  • Satu set entitas dengan properti variabel

Anda juga dapat menggunakan dokumen JSON dalam desain database relasional untuk memecah hubungan kompleks di beberapa tabel. Proses ini disebut denormalisasi, yang merupakan paradigma database relasional lainnya. Namun, dalam kasus tertentu, tergantung pada kasus penggunaan dan desain aplikasi Anda, ini dapat mengarah pada peningkatan kinerja.

Fleksibilitas yang ditawarkan oleh tipe data JSON hadir dengan beberapa peringatan yang harus Anda perhatikan.

Yang terpenting, Anda harus mempertimbangkan bahwa dokumen JSON seringkali membutuhkan kapasitas penyimpanan yang lebih besar. Di MySQL, ruang penyimpanannya serupa LONGBLOB Atau LONGTEXT tipe data. Namun, ada overhead karena pengkodean biner dan menambahkan metadata dan kamus untuk mempercepat pembacaan basis data. Aturan praktis yang baik adalah bahwa string yang disimpan di JSON membutuhkan sekitar 4 hingga 10 byte memori ekstra dibandingkan dengan LONGBLOB Atau LONGTEXT kolom

Jika Anda ingin mengoptimalkan database Anda untuk efisiensi penyimpanan, lebih baik menggunakan tipe data MySQL tradisional (CHAR, VARCHAR, INTdan serupa), karena semuanya lebih efisien daripada JSON, yang mungkin selalu memiliki penyimpanan.

Hal lain yang harus diperhatikan adalah dampak kinerja. Seperti format biner lainnya, dokumen JSON tidak diindeks oleh MySQL. Ini, dan jumlah variabel data yang dapat Anda simpan dalam dokumen JSON, berarti bahwa membuat kueri kolom JSON sering kali menggunakan lebih banyak ruang buffer dan mengembalikan kumpulan hasil yang lebih besar, sehingga menghasilkan lebih banyak data yang dipertukarkan.

Meskipun dokumen JSON yang disimpan di MySQL bisa mencapai 1 GB, secara teori, disarankan untuk menyimpan dokumen JSON hanya beberapa megabita. Di PlanetScale, kami mendukung dokumen JSON hingga 67MB.

MySQL memiliki serangkaian fungsi JSON yang kuat yang memungkinkan Anda membuat, memperbarui, membaca, atau memvalidasi dokumen JSON Anda. PlanetScale dari semua fungsi JSON kecuali JSON_TABLE.

Mari kita lihat beberapa contoh bersama.

Pertama, kita buat tabel dengan a INTEGER dan A JSON kolom

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

Tabel kosong membutuhkan data, jadi mari kita gunakan JSON_ARRAY Untuk menambahkan beberapa

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 itu array? Yah, kita bisa mendapatkan tipenya menggunakan itu JSON_TYPE.

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

Jika kita ingin mengekstrak item dari array, kita bisa melakukannya dengan JSON_EXTRACT. Dalam contoh berikut, kami mengekstrak elemen keempat dari array.

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

Kami juga dapat menggunakan ->yang setara dengan operatornya JSON_EXTRACT.

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

Jika kita membutuhkan hasil yang tidak dikutip, kita dapat menggunakan ->>yang berarti itu JSON_UNQUOTE(JSON_EXTRACT()).

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

Jika kita perlu menambahkan data ke array JSON, kita dapat menggunakan JSON_ARRAY_APPEND Atau JSON_ARRAY_INSERT Untuk memperbaruinya

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

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

  1. https://en.wikipedia.org/wiki/JSON
  2. https://dev.mysql.com/doc/refman/8.0/en/json.html
  3. https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html
  4. https://dev.mysql.com/blog-archive/how-large-can-json-documents-be



Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.