Cara menggunakan partition by in mongodb

Cara menggunakan partition by in mongodb


Di mana-mana saya melihat, saya melihat bahwa MongoDB adalah CP. Tetapi ketika saya menggali lebih dalam, saya melihatnya pada akhirnya konsisten. Apakah CP saat Anda menggunakan safe = true? Jika demikian, apakah itu berarti ketika saya menulis dengan safe = true, semua replika akan diperbarui sebelum mendapatkan hasilnya?

Jawaban:


MongoDB sangat konsisten secara default - jika Anda menulis dan kemudian membaca, dengan asumsi penulisan berhasil, Anda akan selalu dapat membaca hasil tulisan yang baru saja Anda baca. Ini karena MongoDB adalah sistem master tunggal dan semua pembacaan masuk ke primer secara default. Jika Anda secara opsional mengaktifkan membaca dari sekunder maka MongoDB akhirnya menjadi konsisten di mana mungkin untuk membaca hasil yang sudah ketinggalan zaman.

MongoDB juga mendapatkan ketersediaan tinggi melalui failover otomatis dalam set replika: http://www.mongodb.org/display/DOCS/Replica+Sets






Saya setuju dengan posting Luccas. Anda tidak bisa begitu saja mengatakan bahwa MongoDB adalah CP / AP / CA, karena sebenarnya ini adalah pertukaran antara C, A dan P, tergantung pada konfigurasi database / driver dan jenis bencana : berikut adalah rekap visualnya, dan di bawah a penjelasan lebih detail.

    Scenario                   | Main Focus | Description
    ---------------------------|------------|------------------------------------
    No partition               |     CA     | The system is available 
                               |            | and provides strong consistency
    ---------------------------|------------|------------------------------------
    partition,                 |     AP     | Not synchronized writes 
    majority connected         |            | from the old primary are ignored                
    ---------------------------|------------|------------------------------------
    partition,                 |     CP     | only read access is provided
    majority not connected     |            | to avoid separated and inconsistent systems

Konsistensi:

MongoDB sangat konsisten ketika Anda menggunakan satu koneksi atau Tingkat Masalah Tulis / Baca yang benar ( Yang akan membuat Anda kehilangan kecepatan eksekusi ). Segera setelah Anda tidak memenuhi ketentuan tersebut (terutama saat Anda membaca dari replika sekunder) MongoDB menjadi Konsisten Akhirnya.

Ketersediaan:

MongoDB mendapatkan ketersediaan tinggi melalui Replica-Sets . Segera setelah primer mati atau tidak tersedia lagi, sekunder akan menentukan primer baru agar tersedia lagi. Ada kerugian untuk ini: Setiap penulisan yang dilakukan oleh primer lama, tetapi tidak disinkronkan ke sekunder akan dibatalkan dan disimpan ke file rollback, segera setelah terhubung kembali ke set (primer lama adalah sekunder sekarang). Jadi dalam hal ini beberapa konsistensi dikorbankan demi ketersediaan.

Toleransi Partisi:

Melalui penggunaan Replica-Sets tersebut, MongoDB juga mencapai toleransi partisi: Selama lebih dari separuh server Replica-Set terhubung satu sama lain, primer baru dapat dipilih . Mengapa? Untuk memastikan dua jaringan terpisah tidak dapat memilih utama baru. Ketika tidak cukup sekunder yang terhubung satu sama lain, Anda masih dapat membaca dari mereka (tetapi konsistensi tidak dijamin), tetapi tidak dapat menulis. Set ini praktis tidak tersedia demi konsistensi.




Saat artikel baru yang brilian muncul dan juga beberapa eksperimen luar biasa oleh Kyle di bidang ini, Anda harus berhati-hati saat memberi label MongoDB, dan database lain, sebagai C atau A.

Tentu saja CAP membantu untuk melacak tanpa banyak kata apa yang berlaku database tentang itu, tetapi orang sering lupa bahwa C dalam CAP berarti konsistensi atom (kelinearisasi), misalnya. Dan ini membuat saya sangat kesakitan untuk mengerti saat mencoba mengklasifikasikan. Jadi, selain MongoDB memberikan konsistensi yang kuat, bukan berarti itu C. Dengan cara ini, jika salah membuat klasifikasi ini, saya sarankan untuk juga memberikan lebih dalam bagaimana sebenarnya cara kerjanya agar tidak meninggalkan keraguan.


Ya, itu CP saat menggunakan safe=true. Ini berarti, data berhasil sampai ke disk master. Jika Anda ingin memastikannya juga tiba di beberapa replika, lihat parameter 'w = N' di mana N adalah jumlah replika tempat data harus disimpan.

lihat ini dan ini untuk informasi lebih lanjut.


Saya tidak yakin tentang P untuk Mongo. Bayangkan situasi:

  • Replika Anda terbagi menjadi dua partisi.
  • Penulisan terus berlanjut ke kedua sisi saat tuan baru terpilih
  • Partisi diselesaikan - semua server sekarang terhubung kembali
  • Apa yang terjadi adalah master baru dipilih - master yang memiliki oplog tertinggi, tetapi data dari master lain akan dikembalikan ke status umum sebelum partisi dan dibuang ke file untuk pemulihan manual
  • semua orang sekunder mengejar master baru

Masalahnya di sini adalah ukuran file dump terbatas dan jika Anda memiliki partisi untuk waktu yang lama, Anda dapat kehilangan data selamanya.

Anda dapat mengatakan bahwa itu tidak mungkin terjadi - ya, kecuali di cloud di mana hal itu lebih umum daripada yang diperkirakan.

Contoh ini adalah mengapa saya akan sangat berhati-hati sebelum menetapkan surat apa pun ke database apa pun. Banyak sekali skenario dan implementasi yang tidak sempurna.

Jika ada yang tahu jika skenario ini telah diatasi dalam rilis Mongo nanti, silakan beri komentar! (Saya belum mengikuti semua yang terjadi selama beberapa waktu ..)



Mongodb tidak pernah mengizinkan penulisan ke sekunder. Ini memungkinkan pembacaan opsional dari sekunder tetapi tidak menulis. Jadi jika primer Anda turun, Anda tidak dapat menulis sampai sekunder menjadi primer lagi. Begitulah, Anda mengorbankan Ketersediaan Tinggi dalam teorema CAP. Dengan menjaga agar bacaan Anda hanya dari awal, Anda dapat memiliki konsistensi yang kuat.


MongoDB memilih Konsistensi atas Ketersediaan setiap kali ada Partisi. Artinya adalah ketika ada partisi (P) ia memilih Konsistensi (C) daripada Ketersediaan (A).

Untuk memahami ini, Mari kita pahami bagaimana MongoDB melakukan set replika bekerja. Sebuah Replika Set memiliki satu simpul utama. Satu-satunya cara yang "aman" untuk memasukkan data adalah dengan menulis ke node tersebut dan kemudian menunggu data tersebut berkomitmen ke sebagian besar node dalam kumpulan. (Anda akan melihat bendera itu untuk w = mayoritas saat mengirim tulisan)

Partisi dapat terjadi dalam dua skenario sebagai berikut:

  • Ketika simpul utama mati: sistem menjadi tidak tersedia sampai primer baru dipilih.
  • Ketika node utama kehilangan koneksi dari terlalu banyak node Sekunder: sistem menjadi tidak tersedia. Sekunder lainnya akan mencoba memilih Pratama baru dan primer saat ini akan mundur.

Pada dasarnya, setiap kali partisi terjadi dan MongoDB perlu memutuskan apa yang harus dilakukan, ia akan memilih Konsistensi daripada Ketersediaan. Ini akan berhenti menerima penulisan ke sistem sampai ia yakin dapat menyelesaikan penulisan tersebut dengan aman.



Mongodb memberikan konsistensi dan toleransi partisi .

Dalam konteks database terdistribusi (NoSQL), ini berarti akan selalu ada trade-off antara konsistensi dan ketersediaan. Ini karena sistem terdistribusi selalu selalu toleran terhadap partisi (yaitu, database tidak akan terdistribusi jika tidak toleran terhadap partisi.)

Konsistensi - Sistem pada akhirnya akan menjadi konsisten. Cepat atau lambat, data akan menyebar ke mana-mana, tetapi sistem akan terus menerima masukan dan tidak memeriksa konsistensi setiap transaksi sebelum berpindah ke transaksi berikutnya.

Ketersediaan - Secara default, Klien DB Mongo (driver MongoDB), mengirim semua permintaan baca / tulis ke node pemimpin / utama. Itu membuat sistem konsisten tetapi tidak tersedia karena - Jika seorang pemimpin memutuskan koneksi dari cluster, dibutuhkan beberapa detik untuk memilih pemimpin baru. Jadi, membuatnya tidak tersedia untuk menulis dan membaca dalam durasi tersebut.