Selama 20 tahun terakhir saya telah melihat beberapa desain database modular besar dan saya telah melihat skenario yang disarankan oleh David beberapa kali sekarang di mana aplikasi memiliki akses tulis ke skema mereka sendiri / set tabel dan membaca akses ke skema lain / mengatur tabel. Paling sering data ini yang aplikasi / modul mendapat akses read-only dapat digambarkan sebagai "data master" .
Pada waktu itu saya belum melihat masalah yang disarankan oleh jawaban sebelumnya, saya seharusnya sudah melihat, jadi saya pikir ada baiknya melihat lebih dekat pada poin yang diajukan dalam jawaban sebelumnya secara lebih rinci.
Skenario: Anda mengikat beberapa komponen ke RDBMS secara langsung, dan Anda melihat satu komponen tertentu menjadi leher botol kinerja
Saya setuju dengan komentar ini kecuali ini juga merupakan argumen untuk memiliki salinan data secara lokal untuk dibaca oleh microservice. Yaitu, sebagian besar basis data dewasa mendukung replikasi dan karenanya tanpa upaya pengembang apa pun "data master" dapat secara fisik direplikasi ke basis data layanan mikro jika diinginkan atau diperlukan.
Beberapa mungkin mengenali ini dalam kedok yang lebih lama sebagai "Basis data perusahaan" yang mereplikasi tabel inti menjadi "Basis data departemen". Suatu titik di sini adalah bahwa secara umum adalah baik jika suatu database melakukan ini untuk kita dengan replikasi data yang telah diubah (hanya delta, dalam bentuk biner dan dengan biaya minimal ke basis data sumber).
Sebaliknya, ketika pilihan basis data kami tidak memungkinkan ini dukungan replikasi 'dari rak' maka kita bisa masuk ke situasi di mana kami ingin mendorong "data master" ke database layanan mikro dan ini dapat menghasilkan sejumlah besar upaya pengembang dan juga menjadi mekanisme yang secara substansial kurang efisien.
mungkin ingin mendenormalkan basis data, tetapi Anda tidak bisa karena semua komponen lain akan terpengaruh
Bagi saya pernyataan ini tidak benar. Denormalisasi adalah perubahan "aditif" dan bukan "perubahan putus" dan tidak ada aplikasi yang harus rusak karena denormalisasi.
Satu-satunya cara memecah aplikasi ini adalah ketika kode aplikasi menggunakan sesuatu seperti "pilih * ..." dan tidak menangani kolom tambahan. Bagi saya itu akan menjadi bug dalam aplikasi?
Bagaimana denormalisasi dapat merusak aplikasi? Kedengarannya seperti FUD bagi saya.
Ketergantungan skema:
Ya, aplikasi sekarang memiliki ketergantungan pada skema database dan implikasinya adalah ini seharusnya menjadi masalah besar. Sambil menambahkan ketergantungan ekstra jelas tidak ideal pengalaman saya adalah bahwa ketergantungan pada skema basis data belum menjadi masalah, jadi mengapa demikian? Apakah saya baru saja beruntung?
Data master
Skema yang biasanya kita inginkan agar layanan mikro memiliki akses hanya baca adalah yang paling umum saya gambarkan sebagai " data master " untuk perusahaan. Ini memiliki data inti yang penting bagi perusahaan.
Secara historis ini berarti skema yang kami tambahkan ketergantungan sudah matang dan stabil (agak mendasar bagi perusahaan dan tidak berubah).
Normalisasi
Jika 3 desainer database pergi dan merancang skema db yang dinormalisasi mereka akan berakhir pada desain yang sama. Ok, mungkin ada beberapa variasi 4NF / 5NF tetapi tidak banyak. Terlebih lagi ada serangkaian pertanyaan yang dapat ditanyakan perancang untuk memvalidasi model sehingga perancang dapat yakin bahwa mereka sampai pada 4NF (Apakah saya terlalu optimis? Apakah orang-orang berjuang mendapatkan 4NF?).
update: Dengan 4NF di sini saya maksudkan semua tabel dalam skema mencapai bentuk normal tertinggi hingga 4NF (semua tabel mendapat normalisasi hingga 4NF).
Saya percaya proses desain normalisasi adalah mengapa perancang basis data umumnya merasa nyaman dengan ide untuk bergantung pada skema database yang dinormalisasi.
Proses normalisasi membuat desain DB menjadi desain yang "benar" dan variasi dari sana harus dinormalisasi untuk kinerja.
- Mungkin ada variasi berdasarkan pada tipe DB yang didukung (JSON, ARRAY, Geo type support, dll)
- Beberapa mungkin berpendapat variasi berdasarkan pada 4NF / 5NF
- Kami mengecualikan variasi fisik (karena itu tidak masalah)
- Kami membatasi ini untuk desain OLTP dan bukan desain DW karena itu adalah skema yang ingin kami berikan akses hanya baca
Jika 3 programmer di mana diberikan desain untuk mengimplementasikan (sebagai kode) harapan akan untuk 3 implementasi yang berbeda (berpotensi sangat berbeda).
Bagi saya ada potensi pertanyaan "iman dalam normalisasi".
Memecah perubahan skema?
Denormalisasi, menambahkan kolom, mengubah kolom untuk penyimpanan yang lebih besar, memperluas desain dengan tabel baru, dll. Semua adalah perubahan yang tidak melanggar dan desainer DB yang mencapai bentuk normal ke-4 akan yakin akan hal itu.
Melanggar perubahan jelas dimungkinkan dengan menjatuhkan kolom / tabel atau membuat perubahan jenis pemecahan. Mungkin ya, tetapi secara praktis saya tidak mengalami masalah sama sekali di sini. Mungkin karena dipahami apa yang melanggar perubahan dan ini telah dikelola dengan baik?
Saya akan tertarik untuk mendengar kasus-kasus melanggar perubahan skema dalam konteks skema read-only shared.
Apa yang lebih penting dan signifikan tentang layanan mikro: API atau skema databasenya? API, karena itu adalah kontraknya dengan seluruh dunia.
Meskipun saya setuju dengan pernyataan ini, saya pikir ada peringatan penting yang mungkin kita dengar dari Arsitek Perusahaan yaitu "Data hidup selamanya" . Artinya, sementara API mungkin menjadi hal yang paling penting, data juga agak penting bagi perusahaan secara keseluruhan dan itu akan menjadi penting untuk waktu yang sangat lama.
Misalnya, begitu ada persyaratan untuk mengisi Data Warehouse for Business intelligence , skema dan dukungan CDC menjadi penting dari perspektif pelaporan bisnis terlepas dari API.
Masalah dengan API?
Sekarang jika API sempurna dan mudah semua poin diperdebatkan karena kami selalu memilih API daripada memiliki akses hanya baca lokal. Jadi motivasi untuk mempertimbangkan akses baca-saja lokal adalah bahwa mungkin ada beberapa masalah dalam menggunakan API yang dihindari akses lokal.
What motivates people to desire local read-only access?
Optimalisasi API:
LinkedIn memiliki presentasi yang menarik (dari 2009) tentang masalah mengoptimalkan API mereka dan mengapa penting bagi mereka pada skala mereka. http://www.slideshare.net/linkedin/building-consistent-restful-apis-in-a-highperformance-environment
Singkatnya, sekali API harus mendukung banyak kasus penggunaan yang berbeda, ia dapat dengan mudah masuk ke situasi di mana ia mendukung satu kasus penggunaan secara optimal dan sisanya agak buruk dari perspektif jaringan dan perspektif basis data.
Jika API tidak memiliki kecanggihan yang sama dengan LinkedIn maka Anda dapat dengan mudah mendapatkan skenario di mana:
- API mengambil lebih banyak data daripada yang Anda butuhkan (boros)
- Chatty API di mana Anda harus memanggil API berkali-kali
Ya, kami dapat menambahkan caching ke API tentu saja tetapi pada akhirnya panggilan API adalah panggilan jarak jauh dan ada serangkaian optimisasi yang tersedia bagi pengembang ketika data bersifat lokal.
Saya menduga ada sekelompok orang di luar sana yang mungkin menambahkannya sebagai:
- Replikasi data master yang murah ke basis data layanan mikro (tanpa biaya pengembangan dan efisien secara teknis)
- Iman dalam Normalisasi dan ketahanan aplikasi untuk perubahan skema
- Kemampuan untuk dengan mudah mengoptimalkan setiap kasus penggunaan dan berpotensi menghindari panggilan API jarak jauh yang tidak berguna / boros / tidak efisien
- Ditambah beberapa manfaat lain dalam hal kendala dan desain yang koheren
Jawaban ini terlalu panjang. Permintaan maaf!!