Ini keputusan besar. Ada banyak cerita horor tentang pengembang yang memilih database NoSQL dan kemudian menyesalinya Show
Tapi sekarang Anda bisa mendapatkan yang terbaik dari kedua dunia dengan JSON di PostgreSQL Pada artikel ini saya membahas manfaat menggunakan JSON, anti-pola yang harus dihindari, dan contoh cara menggunakan JSON di Postgres Daftar isiKapan Saya Akan Menggunakan Database SQL untuk Data Non-Relasional?Pertama kita harus membahas secara singkat keuntungan menggunakan SQL vs NoSQL Perbedaan antara SQL dan NoSQL adalah model datanya. Database SQL menggunakan model data relasional, dan database NoSQL biasanya menggunakan model dokumen. Perbedaan utama adalah bagaimana setiap model data menangani normalisasi data Contoh normalisasi data dalam database sekolahNormalisasi data adalah proses pemisahan data menjadi “bentuk normal” untuk mengurangi redundansi data. Konsep ini pertama kali diperkenalkan pada tahun 1970-an sebagai cara untuk mengurangi pengeluaran penyimpanan disk yang mahal Dalam contoh di atas, kami memiliki diagram hubungan entitas yang dinormalisasi untuk database sekolah. Tabel 4 menyimpan setiap kelas yang telah diambil siswa. Dengan menormalkan data, kami hanya menyimpan satu baris untuk setiap kelas di tabel 5, alih-alih menduplikasi data kelas untuk setiap siswa di kelasTetapi bagaimana jika kita juga ingin melacak setiap pesanan makan siang (hidangan, pendamping, minuman, makanan ringan, dll) untuk mengirimkan ringkasan kepada setiap siswa di akhir setiap minggu? Dalam hal ini akan lebih masuk akal untuk menyimpan data dalam satu dokumen daripada menormalkannya. Siswa akan selalu diperlihatkan seluruh pesanan makan siang mereka, jadi kami dapat menghindari bergabung yang mahal dengan menyimpan data pesanan makan siang bersama Contoh skema pesanan makan siang menggunakan JSONAlih-alih mempertahankan basis data NoSQL terpisah, kini kami menyimpan pesanan makan siang sebagai objek JSON di dalam basis data Postgres relasional yang ada Apa itu JSON? JSON Examplestudent_idIntegerorder_dateDateorder_detailsObjectsidesArrayJSON, atau Notasi Objek Javascript, adalah format yang fleksibel untuk meneruskan data antar aplikasi, mirip dengan file csv. Namun, alih-alih baris dan kolom, objek JSON adalah kumpulan pasangan kunci/nilai Menurut Stack Overflow, JSON sekarang menjadi format pertukaran data paling populer, mengalahkan csv, yaml, dan xml Pencipta asli JSON, Douglas Crockford, mengaitkan keberhasilan JSON dengan keterbacaannya oleh pengembang dan mesin, mirip dengan mengapa SQL dominan selama hampir 50 tahun. Format JSON mudah dipahami, tetapi juga cukup fleksibel untuk menangani tipe data primitif dan kompleks Evolusi JSON di PostgreSQLJenis JSON biasaPada tahun 2012, PostgreSQL 9. 2 memperkenalkan tipe data _6 pertama di Postgres. Itu memiliki validasi sintaks tetapi di bawahnya menyimpan dokumen yang masuk secara langsung sebagai teks dengan spasi putih disertakan. Itu tidak terlalu berguna untuk kueri dunia nyata, pencarian berbasis indeks, dan fungsi lain yang biasanya Anda lakukan dengan dokumen JSONJSONBPada akhir 2014, PostgreSQL 9. 4 memperkenalkan tipe data _7 dan yang terpenting meningkatkan efisiensi kueri dengan menambahkan pengindeksanTipe data 7 menyimpan JSON sebagai tipe biner. Ini memperkenalkan overhead dalam pemrosesan karena ada konversi yang terlibat tetapi menawarkan kemampuan untuk mengindeks data menggunakan pengindeksan berbasis GIN/Teks lengkap dan menyertakan operator tambahan untuk kueri yang mudahJSONPathDengan semakin populernya JSON, Standar SQL 2016 menghadirkan bahasa standar/jalur baru untuk menavigasi data JSON. Ini adalah cara ampuh untuk menelusuri data JSON yang sangat mirip dengan XPath untuk data XML. PostgreSQL 12 memperkenalkan dukungan untuk standar JSON Path Kita akan melihat contoh JSON, JSONB, dan JSONPath pada bagian di bawah ini. Hal penting yang perlu diperhatikan adalah bahwa semua fungsionalitas JSON hadir secara native di database. Tidak perlu modul contrib atau paket eksternal untuk diinstal Contoh JSON di PostgresMari buat tabel Postgres untuk menyimpan pesanan makan siang dengan tipe data JSON
Sekarang kita bisa memasukkan data berformat JSON ke dalam tabel kita dengan pernyataan 9
Jika Anda melakukan _0 dari tabel, Anda akan melihat sesuatu seperti di bawah iniDapatkan objek JSON. Editor SQL. Jenis busurMemasukkan data ke kolom _7 persis sama, kecuali kami mengubah tipe data menjadi 2
Cara Meminta Data JSON di PostgresMeminta data dari objek JSON menggunakan operator yang sedikit berbeda dari yang kami gunakan untuk tipe data biasa ( 3, 4 , 5, dll)Berikut adalah beberapa operator JSON yang paling umum OperatorDescription->Pilih pasangan kunci/nilai->>Filter hasil kueri#>Memilih objek bersarang#>>Filter hasil kueri dalam objek bersarang@>Periksa apakah objek berisi nilaiDaftar lengkap operator JSON Operator _6 dan 7 bekerja dengan tipe data 6 dan 7. Operator lainnya adalah operator pencarian teks lengkap dan hanya bekerja dengan tipe data 7Mari kita lihat beberapa contoh cara menggunakan setiap operator untuk mengkueri data di tabel 1 kitaMendapatkan nilai dari objek JSONKita dapat menggunakan operasi _6 untuk menemukan setiap hari bahwa siswa tertentu membeli makan siang sekolah Pilih data JSON. Editor SQL. Jenis ArktikMemfilter data JSON menggunakan klausa ________22______3Kami dapat menggunakan operator _7 untuk memfilter pesanan makan siang saja pada tanggal tertentu Filter JSON menurut tanggal. Editor SQL. Jenis ArktikKueri ini mirip dengan operator _3 yang biasanya kita gunakan, kecuali kita harus terlebih dahulu menambahkan operator 7 untuk memberi tahu Postgres bahwa bidang 7 ada di kolom 8Mendapatkan data dari array di objek JSONKatakanlah kita ingin menemukan setiap lauk yang dipesan oleh siswa tertentu Bidang _9 bersarang di dalam objek 0, tetapi kita dapat mengaksesnya dengan menggabungkan dua operator 6 bersama-sama Mendapatkan nilai bersarang dari objek JSON. Editor SQL. Jenis ArktikHebat sekarang kami memiliki susunan sisi yang dipesan 100 siswa setiap hari. Bagaimana jika kita hanya menginginkan sisi pertama dalam array? Mendapatkan nilai array pada indeks tertentu. Editor SQL. Jenis busurMengambil nilai bersarang dari objek JSONAlih-alih menggabungkan beberapa operator _6, kita juga dapat menggunakan operator 4 untuk menentukan jalur untuk mengambil nilai bersarang
Memeriksa apakah objek JSON berisi nilaiKatakanlah kami ingin melihat setiap pesanan yang dibuat oleh siswa yang memiliki salad pendamping. Kami tidak dapat menggunakan _7 sebelumnya untuk memfilter karena 9 adalah larik nilaiUntuk memeriksa apakah array atau objek berisi nilai tertentu, kita dapat menggunakan operator 7 0 1JSONPath. Bos TerakhirJSON Path adalah alat yang ampuh untuk mencari dan memanipulasi objek JSON dalam SQL menggunakan
Fungsi bawaanJSONPath juga menyertakan fungsi bawaan yang kuat seperti 8 untuk menemukan panjang arrayMari gunakan fungsi JSONPath 8 untuk mendapatkan setiap pesanan yang memiliki >= 1 snack 2Contoh fungsi bawaan JSONPath. Editor SQL. Jenis ArktikPerbandingan tanpa pengecoran tipeJSONPath juga memungkinkan perbandingan tanpa pengecoran tipe eksplisit _3Seperti inilah tampilan kueri yang sama dengan perbandingan JSON reguler kami _4Ringkasan operator JSONPada bagian ini kita membahas dasar-dasar bekerja dengan data JSON di Postgres termasuk
Kami telah melihat bahwa bekerja dengan data JSON bisa jadi rumit. Arctype adalah editor SQL modern dan gratis yang memudahkan bekerja dengan basis data Contoh fungsi Build-in JSONPath. Editor SQL. Jenis busurJadi seberapa efisien operasi JSON ini? Dengan tidak adanya indeks, mesin basis data harus memindai seluruh tabel untuk menemukan catatan yang disebut pemindaian berurutan Menganalisis performa kueri JSON. Editor SQL. Jenis busurIni dengan cepat menjadi tidak realistis ketika data menjadi sangat besar dan waktu kueri menjadi sangat lambat Pengindeksan JSON di PostgresUntuk meningkatkan kinerja kueri, Postgres 9. 4 termasuk dukungan untuk indeks database. Indeks adalah struktur data tambahan untuk menyusun data sehingga lebih mudah untuk kueri Saya telah membuat tabel sampel dengan 700 ribu baris untuk mendemonstrasikan bagaimana indeks basis data dapat meningkatkan kinerja kueri sebesar 350X untuk data JSON PostgreSQL menawarkan dua jenis indeks untuk bekerja dengan data JSON
Indeks B-Pohon _4 memiliki 770k baris dan berisi kolom 5 yang menyimpan informasi buku dalam objek 7 5 6 7Di tabel yang tidak diindeks, dibutuhkan 7 untuk menemukan setiap buku yang ditulis oleh 8 8 9Sekarang mari buat indeks B-Tree pada kunci 9 di objek JSON menggunakan 7 0Sekarang kita dapat menguji peningkatan kinerja kueri dari menambahkan indeks 1 2Waktu eksekusi berkurang dari 128ms ->. 091ms. Hampir 350x lebih cepat Indeks B-Tree sangat berkinerja, tetapi tidak mendukung pencarian teks lengkap dan memerlukan indeks baru untuk setiap kunci di objek JSON. Mari kita lihat bagaimana kita dapat menggunakan Indeks GIN untuk menyelesaikan ini Indeks GIN untuk pencarian teks lengkapJika kami mencoba memfilter penulis menggunakan operator penahanan, 7, Postgres mengabaikan indeks B-Tree kami dan kembali ke pemindaian berurutan yang tidak efisien 3 4Operator _2 tidak menggunakan indeks BTree karena melakukan pencarian teks lengkap. Kami dapat membuat indeks GIN untuk menyelesaikan ini 5Memecat kueri yang sama lagi menghasilkan percepatan yang signifikan 3 7Selain pencarian teks lengkap, indeks GIN juga dapat digunakan untuk kunci lain dalam objek JSON yang sama 8 9Indeks GIN juga mendukung beberapa kueri JSONPath, tetapi bergantung pada polanya, Anda mungkin perlu membuat indeks khusus yang serupa dengan indeks B-Tree Pengindeksan adalah bagian penting dari setiap alur kerja database, dan ada beberapa pertimbangan tambahan untuk membuat indeks yang efisien Hal yang Harus Dihindari. Anti-Pola JSONSeperti halnya segala sesuatu dalam ilmu komputer, JSON bukanlah peluru perak. Ini menambahkan lebih banyak fleksibilitas pada model data relasional, tetapi masih ada beberapa anti-pola JSON yang harus diwaspadai
Tabel _4 menempati 236 MB, 0 1Indeks GIN yang dibuat untuk pencarian teks lengkap lebih besar dari ukuran tabel itu sendiri 2 3Karena harus menyimpan JSON dalam format indeks terbalik, ukurannya jauh lebih besar Sekarang kita telah membahas keuntungan dan anti-pola dengan JSON di Postgres. Bagaimana cara membandingkannya dengan database NoSQL tradisional? JSON dalam Database Postgres vs NoSQLPertama untuk menghilangkan kebingungan, NoSQL adalah singkatan dari "Not Only SQL" dan itu tidak berarti bahwa SQL tidak digunakan. Faktanya, banyak sistem NoSQL seperti Apache Spark dan Flink memiliki semacam antarmuka untuk SQL. SQL hanyalah standar bahasa kueri untuk mengambil/memanipulasi data Untuk membandingkan sistem basis data, pertama-tama kita harus membahas beberapa teori basis data dengan teorema CAP teorema CAPCAP adalah singkatan dari
Teorema tersebut menyatakan bahwa tidak mungkin penyimpanan data terdistribusi memiliki ketiga properti tersebut
Database yang berbeda memiliki tujuan yang berbeda. Apa pun tipe data yang ditawarkan PostgreSQL, pada akhirnya akan menjadi database relasional dan akan berada di dalam bagian CA dari teorema CAP TransaksiTransaksi ACID biasanya sulit untuk diskalakan di beberapa mesin. Inilah alasan mengapa replikasi di PostgreSQL atau basis data relasional apa pun dilakukan melalui Write Ahead Log atau WAL log Ini berarti transaksi hanya dikirim melalui kabel setelah ditulis ke log WAL, memastikan bahwa ada konsistensi di seluruh instance database yang berbeda. Ini sangat berbeda dari tingkat konsistensi Cassandra (BASE) yang menskalakan beberapa node dan menggunakan sesuatu yang disebut konsistensi akhirnya Model Data
Pada akhirnya, PostgreSQL masih merupakan model data relasional dan tidak memiliki semua fitur database NoSQL seperti pipa agregasi. Saat Anda mencoba memodelkan data di PostgreSQL, praktik terbaiknya adalah tetap default ke model relasional dan hanya menggunakan JSON jika masuk akal Menutup pikiranPada artikel ini kita telah membahas
Postgres tidak dapat menggantikan database NoSQL, tetapi ini bisa menjadi solusi yang bagus untuk data independen dan menyelamatkan Anda dari membuat database NoSQL terpisah PostgreSQL telah berkembang begitu banyak sejak hari-hari awal, dan kesenjangan antara sistem database yang berbeda semakin sempit Data JSON mungkin sulit dikelola dari baris perintah. Unduh Arctype hari ini untuk bekerja dengan JSON dalam editor SQL modern yang gratis Apakah PostgreSQL itu SQL atau NoSQL?PostgreSQL adalah RDBMS tradisional (sistem manajemen database relasional) Database SQL , seperti Oracle dan MySQL.
Apa perbedaan antara MySQL dan PostgreSQL NoSQL?MySQL adalah perangkat lunak yang lebih sederhana, sedangkan PostgreSQL lebih canggih . Akhirnya, NoSQL merujuk ke database non-SQL apa pun. Artinya, database yang tidak terstruktur dan tidak menyimpan data relasional. Basis data NoSQL, seperti MongoDB, fleksibel dan dapat ditanyakan dengan sangat cepat.
Apakah PostgreSQL merupakan basis data NoSQL yang valid?PostgreSQL bukan NoSQL . PostgreSQL adalah server basis data relasional (dan sintaksis) klasik yang mendukung sebagian besar standar SQL.
Apakah Postgres NoSQL lebih baik daripada MongoDB?Kinerja MongoDB. Berbagai tolok ukur telah menunjukkan bahwa PostgreSQL mengungguli MongoDB untuk beban kerja pergudangan data dan analisis data . Namun dalam membandingkan operasi JSON antara PostgreSQL dan MongoDB, terdapat benchmark yang menunjukkan keunggulan untuk kedua database tersebut. |