Saya sedang mengerjakan sebuah proyek di mana saya mencoba memutuskan antara menggunakan database relasional SQL standar atau objek JSON untuk menyimpan data tentang suatu peristiwa atau aktivitas.
Proyek ini akan menyimpan data pada beberapa jenis peristiwa sehingga saya memutuskan untuk hanya menjelaskan satu jenis peristiwa untuk pertanyaan ini.
Acara musik live (dijelaskan secara lengkap menggunakan skema JSON di bagian bawah pertanyaan ini) adalah objek yang menyimpan data seperti di mana acara akan berlangsung, waktu/tanggal acara dan biaya acara. Objek acara musik live memiliki hubungan satu-ke-satu (acara--> nama, acara--> deskripsi) dan satu-ke-banyak (acara--> tempat, acara--> tanggal, acara--> jenis tiket). Lebih jauh lagi, objek acara dapat berisi satu atau lebih ID performer, yang terhubung ke objek performer. Objek performer menyimpan data musisi yang tampil di acara musik live.
Data akan ditanyakan oleh pengguna menggunakan query sederhana ("Temukan saya acara dengan 'x' nama") dan kompleks ("Temukan saya acara dengan 'x' genre musik dan 'y' biaya dalam radius 'z' dari lokasi saya saat ini"). Data akan dikirimkan oleh pengguna menggunakan formulir web.
Seperti yang mungkin dapat Anda ketahui dari skema JSON yang ditentukan, saya awalnya akan menggunakan objek JSON untuk menyimpan data ini, tetapi saya telah mendengar dari beberapa orang yang mengatakan bahwa karena data saya murni relasional, saya harus tetap menggunakan metode yang lebih lama.
Saya akan menghargai setiap pemikiran tentang pro dan kontra dari setiap pendekatan mengingat kebutuhan saya. Jika Anda membutuhkan sesuatu yang diklarifikasi, jangan ragu untuk bertanya.
{
"event": {
"eventID":{
"type":"string"
},
"eventType":{
"type":"array",
"eventTypeItem":{
"type":"string"
}
},
"eventName":{
"type":"string"
},
"eventDescription":{
"type":"string"
},
"eventVenueList":{
"type":"array",
"eventVenueListID":{
"type":"integer"
}
},
"eventURL":{
"type":"string"
},
"eventTwitter":{
"type":"string"
},
"eventFB":{
"type":"string"
},
"eventInstagram":{
"type":"string"
},
"eventEmail":{
"type":"string",
"format":"email"
},
"eventContactPerson":{
"type":"string"
},
"eventDoorTime": {
"type":"string",
"format":"date-time"
},
"eventPerformerIDList":{
"type":"array",
"liveMusicPerformerID":{
"type":"integer"
}
},
"eventSetList":{
"type":"array",
"eventPerformerID":{
"type":"integer"
},
"eventPerformerStartTime":{
"type":"string",
"format":"date-time"
},
"eventPerformerEndTime":{
"type":"string",
"format":"date-time"
}
},
"eventDateList": {
"type":"array",
"eventDateItem": {
"type":"string",
"format":"date-time"
}
},
"eventDateStartTime": {
"type":"string",
"format":"date-time"
},
"eventDateEndTime": {
"type":"string",
"format":"date-time"
},
"eventTicket":{
"type":"array",
"eventTicketType":{
"type":"string"
},
"eventTicketLowPrice":{
"type":"number"
},
"eventTicketHighPrice":{
"type":"number"
},
"eventDatesAdvancePrice": {
"type":"number"
}
}
},
"performer": {
"performerID": {
"type":"integer"
},
"performerType": {
"type":"string"
},
"performerName": {
"type":"string"
},
"performerAlternateName": {
"type":"array",
"performerAlterateNameItem":{
"type":"string"
}
},
"performerGenreList": {
"type":"array",
"performerGenreItem":{
"type":"string"
}
},
"performerURL": {
"type":"string"
}
}
}
Pertama, jika Anda mencoba untuk menyimpan data JSON dalam penyimpanan apa pun, tetapi bukan database NoSQL, saya pasti tidak menyarankan Anda untuk menggunakan JSON. Alasannya adalah jika Anda menyimpan data Anda sebagai file JSON, misalnya, maka akan sangat lambat untuk membukanya, menguraikannya, mengulanginya, dll.
Mulai saat itu, saya dapat mempersempit pertanyaan Anda menjadi: Apa pro dan kontra dari NoSQL dan RDBMS? Dan itu sudah dijawab ribuan kali di internet.
Jika Anda ingin membuat proyek Anda, Anda tentu saja dapat menggunakan NoSQL atau RDBMS; Namun, apa yang secara umum dapat saya rekomendasikan kepada Anda adalah untuk berpikir di luar kotak dan mencari faktor-faktor lain yang kurang terlihat yang dapat membantu Anda memutuskan di antara kedua opsi tersebut. Coba lihat opsi mana yang dapat mempercepat pengembangan? Mana yang lebih cocok untuk anggota tim lainnya - jika Anda bukan pengembang tunggal. Jika Anda menjualnya, mana yang lebih murah, lebih mudah dan secara umum lebih cocok untuk pelanggan non-developer Anda?
Dengan cara ini, Anda akhirnya bisa memutuskan ke arah mana yang harus ditempuh, jika tidak, akan sangat sulit untuk memutuskan berdasarkan informasi yang diberikan, karena kedua opsi bisa sangat cocok.
Saya pikir Anda akan lebih sukses menggunakan NoSQL daripada SQL untuk menyimpan data ini, karena kueri yang perlu Anda lakukan.
Juga hanya karena beberapa data murni relasional tidak berarti, lagi, harus disimpan ke dalam beberapa RDBMS (SQL). IMO data relasional akan diterjemahkan dengan lebih baik ke dalam basis data graf.
Tentu saja anda juga dapat menulis query dalam SQL tetapi kinerjanya akan menjadi buruk karena jumlah join yang anda perlukan (mengingat data anda akan agak dinormalisasi dan tidak semuanya menjadi satu tabel Event).
Tetapi kesimpulannya Anda akan memiliki lebih banyak kebebasan dengan menggunakan NoSQL (dengan demikian JSON atau format lain yang didukung oleh database) mengingat Anda dapat memodifikasi skema Anda di masa depan tanpa memperhitungkan data yang sudah disimpan.
Mempertimbangkan NoSQL Anda juga dapat melihat ke dalam basis data grafik jika Anda berencana untuk menggunakan query yang sangat kompleks, karena ini akan memberikan keuntungan dalam membuatnya dengan mudah, dan juga mengeksekusinya dengan sangat cepat.
Menurut saya, Anda harus menggunakan keduanya dan saya tidak melihatnya sebagai keputusan yang bersifat 'versus'.
Basis data relasional masuk akal untuk penyimpanan dan pengambilan data yang cepat dan efisien yang memiliki sifat relasional.
JSON adalah format data yang bagus karena sederhana, ringan, dan ideal untuk meneruskan data mentah dalam format yang sangat mendasar dengan sintaks yang cocok untuk menyimpan dan bertukar informasi teks. JSON sangat bagus untuk meneruskan sejumlah kecil data antara browser dan server. Ini bukan format yang mudah untuk mulai digunakan untuk kueri data tipe relasional.
Jadi saya akan merekomendasikan SQL untuk penyimpanan data dan JSON untuk format transportasi data.
Memang benar bahwa ada opsi nilai kunci noSQL seperti Mongo, Redis, dll. Ini akan memiliki keuntungan dari pemetaan yang mungkin lebih sederhana ke format JSON tetapi umumnya sedikit lebih sulit digunakan untuk kueri. Rintangan utama dengan mereka adalah ketidaktahuan oleh komunitas TI umum terutama jika dibandingkan dengan SQL yang sangat terkenal dan memiliki beragam sumber daya dan pengetahuan yang tersedia untuk hampir setiap situasi yang dapat dibayangkan.