Saya pikir saya mengerti sharding akan mengembalikan data Anda yang teriris (pecahan) ke dalam agregat yang mudah ditangani yang masuk akal dalam konteksnya. Apakah ini benar?
Pembaruan : Saya kira saya berjuang di sini. Menurut pendapat saya tier aplikasi seharusnya tidak memiliki bisnis yang menentukan di mana data harus disimpan. Paling-paling itu harus semacam shard client. Kedua jawaban menjawab apa tapi bukan mengapa itu penting. Apa implikasi yang dimilikinya di luar dari pencapaian kinerja yang jelas? Apakah keuntungan ini cukup untuk mengimbangi pelanggaran MVC? Apakah sharding sebagian besar penting dalam aplikasi skala yang sangat besar atau apakah itu berlaku untuk aplikasi skala yang lebih kecil?
database
terminology
ojblass
sumber
sumber
Jawaban:
Sharding hanyalah nama lain untuk "partisi horisontal" dari suatu basis data. Anda mungkin ingin mencari istilah itu untuk membuatnya lebih jelas.
Dari Wikipedia :
Beberapa informasi lebih lanjut tentang sharding:
Pembaruan: Anda tidak akan merusak MVC. Pekerjaan menentukan shard yang benar tempat menyimpan data akan dilakukan secara transparan oleh lapisan akses data Anda. Di sana Anda harus menentukan shard yang benar berdasarkan kriteria yang Anda gunakan untuk shard database Anda. (Karena Anda harus secara manual membuang database ke beberapa pecahan yang berbeda berdasarkan beberapa aspek konkret dari aplikasi Anda.) Kemudian Anda harus berhati-hati ketika memuat dan menyimpan data dari / ke dalam database untuk menggunakan pecahan yang benar.
Mungkin contoh ini dengan kode Java membuatnya lebih jelas (ini tentang proyek Hibernate Shards ), bagaimana ini akan bekerja dalam skenario dunia nyata.
Untuk mengatasi "
why sharding
": Ini terutama hanya untuk aplikasi skala sangat besar, dengan banyak data. Pertama, ini membantu meminimalkan waktu respons untuk permintaan basis data. Kedua, Anda dapat menggunakan mesin "lower-end" yang lebih murah untuk meng-host data Anda, alih-alih satu server besar, yang mungkin tidak cukup lagi.sumber
Jika Anda memiliki kueri ke DBMS yang wilayahnya cukup terbatas (katakanlah, pengguna hanya memecat selektif dengan 'di mana nama pengguna = $ my_username'), masuk akal untuk meletakkan semua nama pengguna mulai dengan AM pada satu server dan semua dari NZ di sisi lain Dengan ini Anda mendekati skala linear untuk beberapa permintaan.
Singkat cerita : Sharding pada dasarnya adalah proses mendistribusikan tabel ke server yang berbeda untuk menyeimbangkan beban ke keduanya secara merata.
Tentu saja, ini jauh lebih rumit dalam kenyataan. :)
sumber
Sharding adalah partisi database horizontal ( baris bijaksana ) yang bertentangan dengan partisi vertikal ( kolom bijaksana ) yang Normalisasi . Ini memisahkan database yang sangat besar menjadi bagian yang lebih kecil, lebih cepat dan lebih mudah dikelola yang disebut pecahan data. Ini adalah mekanisme untuk mencapai sistem terdistribusi.
Mengapa kita membutuhkan sistem terdistribusi?
Anda dapat membaca lebih lanjut di sini: Keuntungan dari database Terdistribusi
Bagaimana sharding membantu mencapai sistem terdistribusi?
Anda dapat mempartisi indeks pencarian menjadi N partisi dan memuat setiap indeks pada server terpisah. Jika Anda query satu server, Anda akan mendapatkan 1 / Nth dari hasilnya. Jadi untuk mendapatkan set hasil yang lengkap, sistem pencarian terdistribusi yang khas menggunakan agregator yang akan mengakumulasi hasil dari setiap server dan menggabungkannya. Agregator juga mendistribusikan kueri ke setiap server. Program agregator ini disebut MapReduce dalam terminologi big data. Dengan kata lain, Sistem Terdistribusi = Sharding + MapReduce (Meskipun ada hal-hal lain juga).
Representasi visual di bawah ini.
sumber
Sharding adalah masalah jika dan hanya jika kebutuhan Anda melebihi apa yang dapat dilayani oleh server database tunggal. Ini adalah alat swell jika Anda memiliki data yang dapat diakses dan Anda memiliki skalabilitas yang sangat tinggi dan persyaratan kinerja. Saya akan menebak bahwa selama 12 tahun saya menjadi seorang profesional perangkat lunak, saya telah menghadapi satu situasi yang bisa mendapat manfaat dari sharding. Ini adalah teknik canggih dengan penerapan yang sangat terbatas.
Selain itu, masa depan mungkin akan menjadi sesuatu yang menyenangkan dan mengasyikkan seperti objek besar "cloud" yang menghapus semua keterbatasan kinerja potensial, bukan? :)
sumber
Sharding pada awalnya diciptakan oleh para insinyur google dan Anda dapat melihatnya digunakan cukup banyak saat menulis aplikasi di Google App Engine. Karena ada batasan keras pada jumlah sumber daya yang dapat digunakan kueri Anda dan karena kueri itu sendiri memiliki batasan ketat, sharding tidak hanya didorong tetapi hampir dipaksakan oleh arsitektur.
Tempat sharding lain yang dapat digunakan adalah untuk mengurangi pertentangan pada entitas data. Hal ini sangat penting ketika membangun sistem scalable untuk berhati-hati terhadap potongan data yang sering ditulis karena mereka selalu menjadi hambatan. Solusi yang baik adalah dengan mengabaikan entitas tertentu dan menulis ke banyak salinan, kemudian baca totalnya. Contoh dari ini "counter berjerih wrt GAE: http://code.google.com/appengine/articles/sharding_counters.html
sumber
Sharding tidak lebih dari sekadar partisi horizontal. Menurut artikel wikipedia ,
Juga,
sumber
Ini adalah aturan yang baik tetapi seperti kebanyakan hal tidak selalu benar.
Ketika Anda melakukan arsitektur, Anda mulai dengan tanggung jawab dan kolaborasi. Setelah Anda menentukan arsitektur fungsional Anda, Anda harus menyeimbangkan kekuatan non-fungsional.
Jika salah satu dari kekuatan non-fungsional ini skalabilitas besar, Anda harus menyesuaikan arsitektur Anda untuk memenuhi kekuatan ini bahkan jika itu berarti bahwa abstraksi penyimpanan data Anda sekarang bocor ke tingkat aplikasi Anda.
sumber