MongoDB 丢数据的说法已经出现很久很久了,传言甚多。这里简单总结下场景。 1.在MongoDB很早的版本,2.0之前,没有journal,加上默认不是安全写,系统一宕机就可能出现数据丢失,因为数据没有刷盘,也没有恢复日志恢复机制。这个问题倒默认启用journal以及安
MongoDB 丢数据的说法已经出现很久很久了,传言甚多。这里简单总结下场景。
1.在MongoDB很早的版本,2.0之前,没有journal,加上默认不是安全写,系统一宕机就可能出现数据丢失,因为数据没有刷盘,也没有恢复日志恢复机制。这个问题倒默认启用journal以及安全写之后,没有问题了。
2.选举机制造成的数据丢失。这里主要说这个。简单讲,MongoDB目前的选举机制是有缺陷的。在一些场景下会造成数据丢失。这些场景实际中会出现,如多机房情况下,但一般不会太多。
场景1
replica set有如下节点: n1, n2, n3, n4, n5
n1 主节点
n2,n3从n1同步
n4,n5从n3同步
假设发生如下事件:
- (n1, n2)与(n3, n4, n5)之间发生网络分裂(network partition)
- n3连不到n1,然后选举它自己
- n4 n5 投票给 n3, 因此n3 变成主节点
- n3执行写操作A,然后复制到n4,n5并确认,这样被复制集大部分成员确认了。
- n1 重新连接到复制集, 但仍然是主节点. 它必须降级.
现在有2个主节点 n1 and n3.其中一个需要降级,如果 n1降级,不会产生什么后果, 但如果 n3 降级, 多数成员确认的写操作就丢失了.
MongoDB 2.4中这是非常可能的. 双主场景中,选择哪一个主节点降级是随意的. SERVER-9765 描述了这个问题. 现在 2.6版本中,其中一个主节点根据上一次选举的时间戳来决定哪一个降级.上面例子中 n3被选举为主的时间比 n1近, n3应该保持作为主而n1应该降级. 因为成员可能每30秒参与一次选举,因此成功的选举之间最小间隔为30秒. 虽然如此,我仍然不知道不同成员之间的时钟误差在这个算法上如何影响。
场景2
- (n1, n2)与(n3, n4, n5)之间发生网络分裂(network partition)
- n3连不到n1,然后选举它自己
- n4 n5 投票给 n3, 因此n3 变成主节点
- n3执行写操作A,然后复制到n4,n5并确认,这样被复制集大部分成员确认了。
- n1 重新连接到复制集, 但仍然是主节点. 它必须降级.
- n1接受写操作B,然后复制并被n2确认;
- n4停止从n3复制并开始从n1复制;
- 因为n1没有写操作A,n4回滚写操作A,然后复制并确认写操作B.
这里问题就是有两个主,任意一个降级,都要回滚相应的写操作。这个例子也可以看出MongoDB复制的一个潜在问题,即简单的以来时间戳来决定oplog位置。
场景3
这个场景与2有点类似,但是考虑一下降级的时候考虑选举的时间,即选最近选举出来的为主,另一个主降级。
- 所有从节点从n1复制.
- 发生网裂,(n1, n2) 与 (n3, n4, n5)断开
- n3连不到n1,然后选举它自己
- n4 n5 投票给 n3, 但n3还没变为主节点
- n4和n5投票后,网络恢复
- n1发生写操作A,并被n2,n4,n5确认,n3还没变成主或者还没复制并确认这个写操作。
- n3最终成为主了,还没机会复制并确认A操作
- n1注意到n3是主并且选举的时间更近,因此n1降级
- 所有成员开始从n3复制,因此回滚A操作。
这里可以看出的问题是,写确认操作和投票选举操作之间并没有足够的交流,n4,n5投票给n3,确认了一个可能回滚的写操作,部分原因是因为刚刚完成选举操作。这是MongoDB选举协议没有考虑的地方。
总的来说,现在MongoDB的选举协议问题如下:
双主的情况下,必须解决一下问题
- 两个主节点必须不能产生交错的oplog
- 当双主情况下,oplog位置小的降级
数据同步线程和写确认操作线程必须与选举主节点线程有更多交流,简言之,应该如下:
- 成员不能投票会回滚写操作的节点为主节点;
- 成员不能确认因为选举投了赞成票可能造成回滚的写操作。
tokumx将通过ark选举协议来解决这个问题。
参考:
http://www.tokutek.com/2014/07/explaining-ark-part-3-why-data-may-be-lost-on-a-failover/
原文地址:为什么MongoDB会丢数据, 感谢原作者分享。

Prosedur yang disimpan adalah penyataan SQL yang dipraktikkan dalam MySQL untuk meningkatkan prestasi dan memudahkan operasi kompleks. 1. Meningkatkan prestasi: Selepas penyusunan pertama, panggilan seterusnya tidak perlu dikompilasi. 2. Meningkatkan Keselamatan: Mengatasi akses jadual data melalui kawalan kebenaran. 3. Memudahkan operasi kompleks: Campurkan beberapa pernyataan SQL untuk memudahkan logik lapisan aplikasi.

Prinsip kerja cache pertanyaan MySQL adalah untuk menyimpan hasil pertanyaan pilih, dan apabila pertanyaan yang sama dilaksanakan sekali lagi, hasil cache dikembalikan secara langsung. 1) Cache pertanyaan meningkatkan prestasi bacaan pangkalan data dan mendapati hasil cache melalui nilai hash. 2) Konfigurasi mudah, set query_cache_type dan query_cache_size dalam fail konfigurasi MySQL. 3) Gunakan kata kunci sql_no_cache untuk melumpuhkan cache pertanyaan khusus. 4) Dalam persekitaran kemas kini frekuensi tinggi, cache pertanyaan boleh menyebabkan kesesakan prestasi dan perlu dioptimumkan untuk digunakan melalui pemantauan dan pelarasan parameter.

Sebab mengapa MySQL digunakan secara meluas dalam pelbagai projek termasuk: 1. Prestasi tinggi dan skalabilitas, menyokong pelbagai enjin penyimpanan; 2. Mudah untuk digunakan dan mengekalkan, konfigurasi mudah dan alat yang kaya; 3. Ekosistem yang kaya, menarik sejumlah besar sokongan alat komuniti dan pihak ketiga; 4. Sokongan silang platform, sesuai untuk pelbagai sistem operasi.

Langkah -langkah untuk menaik taraf pangkalan data MySQL termasuk: 1. Sandarkan pangkalan data, 2. Hentikan perkhidmatan MySQL semasa, 3. Pasang versi baru MySQL, 4. Mulakan versi baru MySQL Service, 5 pulih pangkalan data. Isu keserasian diperlukan semasa proses peningkatan, dan alat lanjutan seperti Perconatoolkit boleh digunakan untuk ujian dan pengoptimuman.

Dasar sandaran MySQL termasuk sandaran logik, sandaran fizikal, sandaran tambahan, sandaran berasaskan replikasi, dan sandaran awan. 1. Backup Logical menggunakan MySqldump untuk mengeksport struktur dan data pangkalan data, yang sesuai untuk pangkalan data kecil dan migrasi versi. 2. Sandaran fizikal adalah cepat dan komprehensif dengan menyalin fail data, tetapi memerlukan konsistensi pangkalan data. 3. Backup tambahan menggunakan pembalakan binari untuk merekodkan perubahan, yang sesuai untuk pangkalan data yang besar. 4. Sandaran berasaskan replikasi mengurangkan kesan ke atas sistem pengeluaran dengan menyokong dari pelayan. 5. Backup awan seperti Amazonrds menyediakan penyelesaian automasi, tetapi kos dan kawalan perlu dipertimbangkan. Apabila memilih dasar, saiz pangkalan data, toleransi downtime, masa pemulihan, dan matlamat titik pemulihan perlu dipertimbangkan.

Mysqlclusteringenhancesdatabaserobustnessandsandscalabilitybydistributingdataacrossmultiplenodes.itusesthendbenginefordatareplicationandfaulttolerance, ugeinghighavailability.setupinvolvesconfiguringmanagement, Data, dansqlnodes

Mengoptimumkan reka bentuk skema pangkalan data di MySQL dapat meningkatkan prestasi melalui langkah -langkah berikut: 1. Pengoptimuman indeks: Buat indeks pada lajur pertanyaan biasa, mengimbangi overhead pertanyaan dan memasukkan kemas kini. 2. Pengoptimuman Struktur Jadual: Mengurangkan kelebihan data melalui normalisasi atau anti-normalisasi dan meningkatkan kecekapan akses. 3. Pemilihan Jenis Data: Gunakan jenis data yang sesuai, seperti INT dan bukannya VARCHAR, untuk mengurangkan ruang penyimpanan. 4. Pembahagian dan Sub-meja: Untuk jumlah data yang besar, gunakan pembahagian dan sub-meja untuk menyebarkan data untuk meningkatkan kecekapan pertanyaan dan penyelenggaraan.

TooptimizeMySQLperformance,followthesesteps:1)Implementproperindexingtospeedupqueries,2)UseEXPLAINtoanalyzeandoptimizequeryperformance,3)Adjustserverconfigurationsettingslikeinnodb_buffer_pool_sizeandmax_connections,4)Usepartitioningforlargetablestoi


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Dreamweaver Mac版
Alat pembangunan web visual
