


Kata Pengantar
Syarikat telah mengusahakan pemisahan perkhidmatan dan pembahagian data baru-baru ini, kerana jumlah data dalam satu jadual pakej adalah terlalu besar, dan ia masih berkembang pada 60W sehari.
Saya telah belajar tentang sub-pangkalan data dan sub-jadual pangkalan data sebelum ini, dan telah membaca beberapa catatan blog, tetapi saya hanya tahu konsep yang samar-samar, dan sekarang saya memikirkannya, semuanya kabur.
Saya menghabiskan sepanjang petang membaca sub-jadual pangkalan data dan membaca banyak artikel Sekarang saya akan membuat ringkasan:
Bahagian 1: Masalah yang dihadapi dalam proses pembangunan laman web sebenar.
Bahagian 2: Apakah cara pembahagian yang berbeza, perbezaan dan aspek yang boleh digunakan antara menegak dan mendatar.
Bahagian 3: Beberapa produk dan teknologi sumber terbuka pada masa ini di pasaran, dan apakah kelebihan dan kekurangannya.
Bahagian 4: Mungkin perkara yang paling penting, mengapa tidak disyorkan untuk memisahkan pangkalan data secara mendatar! ? Ini membolehkan anda merawatnya dengan teliti pada peringkat awal perancangan dan mengelakkan masalah yang disebabkan oleh pembahagian.
Penjelasan istilah
Perpustakaan: pangkalan data; jadual: sub-pangkalan data dan sub-jadual: sharding
Evolusi seni bina pangkalan data Pada mulanya, kami hanya menggunakan pangkalan data mesin tunggal, dan kemudian menghadapi lebih banyak lagi dan lebih banyak permintaan. Kami memisahkan operasi tulis dan operasi baca pangkalan data, menggunakan beberapa salinan pangkalan data hamba (Replikasi Budak) untuk bertanggungjawab membaca, dan menggunakan pangkalan data induk (Master) untuk bertanggungjawab untuk menulis data serentak dari pangkalan data induk untuk memastikan data konsisten. Dari segi seni bina, ia adalah penyegerakan tuan-hamba pangkalan data. Pustaka hamba boleh diskalakan secara mendatar, jadi lebih banyak permintaan baca tidak menjadi masalah.
Tetapi apabila bilangan pengguna meningkat dan permintaan menulis meningkat, apakah yang perlu kita lakukan? Menambah Master tidak dapat menyelesaikan masalah, kerana data perlu konsisten dan operasi tulis memerlukan penyegerakan antara dua induk, yang bersamaan dengan pendua dan lebih rumit.
Pada masa ini, anda perlu menggunakan sharding untuk membahagikan operasi tulis.
Masalah sebelum memecah pangkalan data dan jadual
Sebarang masalah terlalu besar atau terlalu kecil Masalah yang kami hadapi di sini ialah jumlah data terlalu besar.
Jumlah permintaan pengguna terlalu besar
Oleh kerana TPS pelayan tunggal, memori dan IO adalah terhad.
Penyelesaian: Edarkan permintaan kepada berbilang pelayan; sebenarnya, permintaan pengguna dan melaksanakan pertanyaan SQL pada dasarnya adalah sama, kedua-duanya meminta sumber, tetapi permintaan pengguna juga akan melalui get laluan, penghalaan, pelayan http, dsb.
Satu pangkalan data terlalu besar
Kapasiti pemprosesan pangkalan data tunggal adalah terhad
Ruang cakera yang tidak mencukupi pada pelayan di mana pangkalan data tunggal berada
IO kesesakan operasi pada satu pangkalan data
Penyelesaian: Bahagikan kepada lebih banyak perpustakaan yang lebih kecil
Jika satu jadual terlalu besar
CRUD adalah masalah;
Peluasan indeks, tamat masa pertanyaan
Penyelesaian: Bahagikan kepada beberapa jadual dengan set data yang lebih kecil.
Kaedah sharding pangkalan data dan jadual
secara amnya ialah segmentasi menegak dan segmentasi mendatar Ini ialah kaedah segmentasi yang diterangkan oleh set hasil, iaitu segmentasi ruang fizikal.
Kita bermula dari masalah yang kita hadapi dan selesaikan.
Explanation:
Firstly, bilangan permintaan pengguna terlalu besar, jadi kami menumpuk mesin untuk mengendalikannya (ini bukan tumpuan artikel ini)
Den perpustakaan tunggal terlalu besar. untuk melihat sama ada terdapat terlalu banyak data disebabkan terlalu banyak jadual, atau sama ada ia disebabkan oleh satu pangkalan data Terdapat banyak data dalam jadual.
Jika terdapat banyak jadual dan banyak data, gunakan segmentasi menegak dan bahagikannya kepada perpustakaan yang berbeza mengikut perniagaan.
Jika jumlah data dalam satu jadual terlalu besar, pembahagian mendatar harus digunakan, iaitu, data jadual dibahagikan kepada berbilang jadual mengikut peraturan tertentu, atau malah berbilang jadual pada berbilang perpustakaan.
分库分表的顺序应该是先垂直分,后水平分
. Kerana pembahagian menegak adalah lebih mudah dan lebih konsisten dengan cara kita menangani masalah dunia sebenar.
Pecah menegak
Pecah meja menegak
juga "memecahkan meja besar kepada meja kecil", yang berdasarkan medan lajur. Secara amnya, terdapat banyak medan dalam jadual, dan medan yang tidak biasa digunakan, mempunyai data yang besar dan panjang (seperti medan jenis teks) dibahagikan kepada "jadual lanjutan". Ia biasanya ditujukan kepada jadual besar dengan beratus-ratus lajur, dan juga mengelakkan masalah "merentas halaman" yang disebabkan oleh terlalu banyak data semasa membuat pertanyaan.
Sub-pustaka menegak
Sub-pustaka menegak bertujuan untuk memisahkan perniagaan yang berbeza dalam sistem, seperti pangkalan data untuk pengguna, pangkalan data untuk produk dan pangkalan data untuk pesanan. Selepas pemisahan, ia harus diletakkan pada berbilang pelayan dan bukannya satu pelayan. kenapa? Bayangkan laman web membeli-belah menyediakan perkhidmatan kepada dunia luar dan mempunyai CRUD untuk pengguna, produk, pesanan, dll. Sebelum berpecah, semuanya jatuh ke dalam pustaka tunggal, yang akan menjadikan pangkalan data Keupayaan pemprosesan pangkalan data tunggal telah menjadi hambatan
. Selepas membahagikan pangkalan data secara menegak, jika ia masih diletakkan pada pelayan pangkalan data, apabila bilangan pengguna meningkat, kapasiti pemprosesan pangkalan data tunggal akan menjadi hambatan, dan Ruang cakera, memori, tps, dsb. bagi satu pelayan adalah sangat ketat
. Oleh itu, kita perlu membahagikannya kepada beberapa pelayan, supaya masalah di atas dapat diselesaikan dan kita tidak akan menghadapi masalah sumber mesin tunggal pada masa hadapan. 单库处理能力成为瓶颈
。按垂直分库后,如果还是放在一个数据库服务器上, 随着用户量增大,这会让单个数据库的处理能力成为瓶颈,还有单个服务器的磁盘空间,内存,tps等非常吃紧
。所以我们要拆分到多个服务器上,这样上面的问题都解决了,以后也不会面对单机资源问题。
数据库业务层面的拆分,和服务的治理
,降级
机制类似,也能对不同业务的数据分别的进行管理,维护,监控,扩展等。数据库往往最容易成为应用系统的瓶颈,而数据库本身属于有状态
的,相对于Web和应用服务器来讲,是比较难实现横向扩展
Downgrade
adalah serupa, Ia juga boleh mengurus, menyelenggara, memantau, mengembangkan, dsb. data perniagaan yang berbeza secara berasingan. Pangkalan data selalunya paling berkemungkinan menjadi kesesakan sistem aplikasi, dan pangkalan data itu sendiri tergolong dalam warna: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);" >Stateful lebih sukar untuk dilaksanakan daripada pelayan web dan aplikasiPeluasan mendatar
. Sumber sambungan pangkalan data adalah berharga dan keupayaan pemprosesan mesin tunggal adalah terhad Dalam senario konkurensi tinggi, sub-pangkalan data menegak boleh menembusi kesesakan IO, bilangan sambungan dan sumber perkakasan mesin tunggal pada tahap tertentu. 🎜. pangkalan data dan sub-jadualakan Data satu jadual dipecahkan kepada berbilang pelayan Setiap pelayan mempunyai pangkalan data dan jadual yang sepadan, tetapi pengumpulan data dalam jadual adalah berbeza dengan berkesan dapat mengurangkan kesesakan prestasi dan tekanan mesin tunggal dan pangkalan data tunggal, dan menembusi Bottleneck dalam IO, bilangan sambungan, sumber perkakasan, dsb. Peraturan sharding mendatar
JulatRANGE,HASH取模
等),切分到多张表里面去。但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈
- Sistem pusat beli-belah secara amnya menggunakan pengguna dan pesanan sebagai jadual utama, dan kemudian menggunakan jadual yang berkaitan sebagai jadual tambahan Ini tidak akan menyebabkan masalah seperti transaksi merentas pangkalan data ID pengguna diambil, dan kemudian cincangan diambil dan diedarkan kepada pangkalan data yang berbeza
- Sebagai contoh, Qiniu Cloud harus membahagikan perniagaan mengikut masa 6 bulan yang lalu atau walaupun setahun yang lalu dan meletakkannya ke dalam jadual lain, kebarangkalian data dalam jadual ini menjadi lebih kecil, jadi tidak perlu meletakkannya bersama "data panas". pemisahan data panas dan sejuk"
.
Masalah yang dihadapi selepas sub-pangkalan data dan jadual
Sokongan transaksi
Selepas sub-pangkalan data dan jadual, ia menjadi Transaksi teragih
. 分布式事务
了。
如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。
多库结果集合并(group by,order by)
类似于group by,order by
Berbilang set hasil pangkalan data digabungkan (kumpulan mengikut, susunan mengikut)
🎜Serupa denganKumpulkan mengikut, tertib mengikut
Pernyataan pengelompokan dan pengisihan sedemikian tidak boleh digunakan🎜🎜Cross-database join🎜🎜Selepas pangkalan data dibahagikan kepada jadual, operasi perkaitan antara jadual akan dihadkan, dan kami tidak boleh menyertai jadual di lokasi yang berbeza Jadual dalam sub-pangkalan data tidak boleh digabungkan dengan jadual dengan butiran sub-jadual yang berbeza Akibatnya, perniagaan yang boleh diselesaikan dengan satu pertanyaan mungkin memerlukan beberapa pertanyaan untuk diselesaikan. Penyelesaian kasar: jadual global: data asas, semua perpustakaan mempunyai salinan. Lebihan medan: Dengan cara ini, sesetengah medan tidak perlu disoal dengan menyertai. Pemasangan lapisan sistem: Tanya semuanya secara berasingan dan kemudian pasangkannya, yang lebih rumit. 🎜Produk penyelesaian sub-pangkalan data dan sub-jadual
Terdapat banyak sub-pangkalan data dan perisian tengah sub-jadual di pasaran, antaranya yang berdasarkan proksi termasuk MySQL Proxy
dan Amoeba
, berdasarkan rangka kerja Hibernate ialah Hibernate Shard
, berdasarkan jdbc Dangdangsharding-jdbc
, pemalam Maven berdasarkan mybatis serupa dengan Mogujie TSharding
, dengan menulis semula kelas templat ibatis spring Klien Cobar
. MySQL Proxy
和Amoeba
, 基于Hibernate框架的是Hibernate Shards
,基于jdbc的有当当sharding-jdbc
, 基于mybatis的类似maven插件式的有蘑菇街的蘑菇街TSharding
, 通过重写spring的ibatis template类的Cobar Client
。
还有一些大公司的开源产品:
我是程序员青戈
,一个爱生活、爱分享的90后程序员。
本期关于Mysql分库分表的介绍和解决方案介绍到这里,希望能帮助到大家,后续更多Java面试类的文章请持续关注公众号Java学习指南
Terdapat juga produk sumber terbuka daripada beberapa syarikat besar:
Programmer Qingge
, seorang pengaturcara pasca 90-an yang sukakan kehidupan dan perkongsian. 🎜
Isu ini memperkenalkan sub-pangkalan data dan sub-jadual Mysql Penyelesaiannya diperkenalkan di sini, saya harap ia dapat membantu semua orang Sila teruskan memberi perhatian kepada akaun rasmi untuk lebih banyak artikel temuduga Java pada masa hadapanPanduan Belajar Java
🎜. 🎜🎜
Atas ialah kandungan terperinci Hari ini saya akhirnya mengetahui sub-pangkalan data MySQL dan sub-jadual, jadi saya boleh membual tentangnya dalam temu bual!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kedudukan MySQL dalam pangkalan data dan pengaturcaraan sangat penting. Ia adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pelbagai senario aplikasi. 1) MySQL menyediakan fungsi penyimpanan data, organisasi dan pengambilan data yang cekap, sistem sokongan web, mudah alih dan perusahaan. 2) Ia menggunakan seni bina pelanggan-pelayan, menyokong pelbagai enjin penyimpanan dan pengoptimuman indeks. 3) Penggunaan asas termasuk membuat jadual dan memasukkan data, dan penggunaan lanjutan melibatkan pelbagai meja dan pertanyaan kompleks. 4) Soalan -soalan yang sering ditanya seperti kesilapan sintaks SQL dan isu -isu prestasi boleh disahpepijat melalui arahan jelas dan log pertanyaan perlahan. 5) Kaedah pengoptimuman prestasi termasuk penggunaan indeks rasional, pertanyaan yang dioptimumkan dan penggunaan cache. Amalan terbaik termasuk menggunakan urus niaga dan preparedStatemen

MySQL sesuai untuk perusahaan kecil dan besar. 1) Perniagaan kecil boleh menggunakan MySQL untuk pengurusan data asas, seperti menyimpan maklumat pelanggan. 2) Perusahaan besar boleh menggunakan MySQL untuk memproses data besar dan logik perniagaan yang kompleks untuk mengoptimumkan prestasi pertanyaan dan pemprosesan transaksi.

InnoDB secara berkesan menghalang pembacaan hantu melalui mekanisme utama. 1) Kekunci seterusnya menggabungkan kunci baris dan kunci jurang untuk mengunci rekod dan jurang mereka untuk mengelakkan rekod baru daripada dimasukkan. 2) Dalam aplikasi praktikal, dengan mengoptimumkan pertanyaan dan menyesuaikan tahap pengasingan, persaingan kunci dapat dikurangkan dan prestasi konkurensi dapat ditingkatkan.

MySQL bukan bahasa pengaturcaraan, tetapi bahasa pertanyaannya SQL mempunyai ciri -ciri bahasa pengaturcaraan: 1. SQL menyokong penghakiman bersyarat, gelung dan operasi berubah -ubah; 2. Melalui prosedur, pencetus dan fungsi yang disimpan, pengguna boleh melakukan operasi logik yang kompleks dalam pangkalan data.

MySQL adalah sistem pengurusan pangkalan data relasi sumber terbuka, terutamanya digunakan untuk menyimpan dan mengambil data dengan cepat dan boleh dipercayai. Prinsip kerjanya termasuk permintaan pelanggan, resolusi pertanyaan, pelaksanaan pertanyaan dan hasil pulangan. Contoh penggunaan termasuk membuat jadual, memasukkan dan menanyakan data, dan ciri -ciri canggih seperti Operasi Join. Kesalahan umum melibatkan sintaks SQL, jenis data, dan keizinan, dan cadangan pengoptimuman termasuk penggunaan indeks, pertanyaan yang dioptimumkan, dan pembahagian jadual.

MySQL adalah sistem pengurusan pangkalan data sumber terbuka yang sesuai untuk penyimpanan data, pengurusan, pertanyaan dan keselamatan. 1. Ia menyokong pelbagai sistem operasi dan digunakan secara meluas dalam aplikasi web dan bidang lain. 2. Melalui seni bina pelanggan-pelayan dan enjin penyimpanan yang berbeza, MySQL memproses data dengan cekap. 3. Penggunaan asas termasuk membuat pangkalan data dan jadual, memasukkan, menanyakan dan mengemas kini data. 4. Penggunaan lanjutan melibatkan pertanyaan kompleks dan prosedur yang disimpan. 5. Kesilapan umum boleh disahpepijat melalui pernyataan yang dijelaskan. 6. Pengoptimuman Prestasi termasuk penggunaan indeks rasional dan pernyataan pertanyaan yang dioptimumkan.

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Mekanisme kunci InnoDB termasuk kunci bersama, kunci eksklusif, kunci niat, kunci rekod, kunci jurang dan kunci utama seterusnya. 1. Kunci dikongsi membolehkan urus niaga membaca data tanpa menghalang urus niaga lain dari membaca. 2. Kunci eksklusif menghalang urus niaga lain daripada membaca dan mengubah suai data. 3. Niat Kunci mengoptimumkan kecekapan kunci. 4. Rekod Rekod Kunci Kunci Rekod. 5. Gap Lock Locks Index Rakaman Gap. 6. Kunci kunci seterusnya adalah gabungan kunci rekod dan kunci jurang untuk memastikan konsistensi data.


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

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)