自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:聊聊你對(duì)分庫分表的理解?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
分庫分表技術(shù)不但是日常工作中用于解決數(shù)據(jù)庫中的數(shù)據(jù)量會(huì)急劇增長(zhǎng),解決單庫單表性能瓶頸的一種方案,更是面試中的高頻知識(shí)點(diǎn)。

在 MySQL 集群架構(gòu)中有兩種主流的集群實(shí)現(xiàn),一種是讀寫分離,而另外一種則是數(shù)據(jù)分片。所謂的數(shù)據(jù)分片其實(shí)就是今天要聊的分庫分表技術(shù)。

分庫分表技術(shù)不但是日常工作中用于解決數(shù)據(jù)庫中的數(shù)據(jù)量會(huì)急劇增長(zhǎng),解決單庫單表性能瓶頸的一種方案,更是面試中的高頻知識(shí)點(diǎn)。

在阿里巴巴的《Java 開發(fā)手冊(cè)》中規(guī)定:當(dāng)單表的數(shù)據(jù)超過 500 萬,或單表的大小超過 2GB 時(shí),就要考慮分庫分表了。那么什么是分庫分表呢?

1.分庫分表

首先來說,“分庫分表”不是一個(gè)技術(shù),而是兩個(gè)技術(shù)實(shí)現(xiàn),它分為:

  • 分庫
  • 垂直分庫
  • 水平分庫
  • 分表
  • 垂直分表
  • 水平分表

(1)垂直分庫

垂直分庫是按照業(yè)務(wù)將不同的表拆分到不同的數(shù)據(jù)庫中。例如,在一個(gè)電商數(shù)據(jù)庫中的用戶表和訂單表分別存放到不同的數(shù)據(jù)庫中,如下圖所示:

(2)水平分庫

水平分庫是將數(shù)據(jù)按照一定的規(guī)則(如用戶 ID 取模、哈希等)分布到不同的數(shù)據(jù)庫中。比如,根據(jù)用戶 ID 對(duì) 10 取模,將用戶數(shù)據(jù)分布到 10 個(gè)不同的數(shù)據(jù)庫中,每個(gè)數(shù)據(jù)庫都保存著完整的數(shù)據(jù)表結(jié)構(gòu),如下圖所示:

(3)垂直分表

垂直分表是將一張表按照列的相關(guān)性拆分成多張表。例如,將一個(gè)包含大量字段的用戶表,拆分為用戶基本信息表和用戶擴(kuò)展信息表,如下圖所示:

(4)水平分表

水平分表是將一張表的數(shù)據(jù)按照行進(jìn)行拆分。例如按照用戶 ID 的范圍或者哈希值將數(shù)據(jù)拆分到不同的表中。

如果搞不清楚什么是垂直分表和什么是水平分表?可以參考一下這幅圖思考一下:

2.技術(shù)實(shí)現(xiàn)

分庫分表的主流實(shí)現(xiàn)技術(shù)有以下兩種:

  • MyCat
  • Apache Sharding Sphere

Sharding Sphere 相比于 MyCat 來說,它的優(yōu)勢(shì)是:

  • 功能更多:除了讀寫分離和分庫分表之外,還提供了數(shù)據(jù)加密、流量質(zhì)量、數(shù)據(jù)遷移等功能。
  • 社區(qū)更活躍度和生態(tài)更好:Sharding Sphere 擁有活躍的社區(qū)和豐富的文檔,生態(tài)系統(tǒng)較為完善,有更多的用戶和開發(fā)者參與。
  • 靈活性和擴(kuò)展性:Sharding Sphere 靈活性更高,擴(kuò)展性也更好,它可以方便地與其他技術(shù)集成,這方便 MyCat 支持的比較有限。

3.Sharding Sphere

Sharding Sphere 最早是當(dāng)當(dāng)網(wǎng)的內(nèi)部框架,后面捐獻(xiàn)給了 Apache,目前也是分庫分表的主流技術(shù)實(shí)現(xiàn)方案,在 Sharding Sphere 中有兩種分庫分表的技術(shù)實(shí)現(xiàn):

  • Sharding Sphere JDBC:定位為輕量級(jí) Java 框架,在 Java 的 JDBC 層提供的額外服務(wù)。它使用客戶端直連數(shù)據(jù)庫,以 jar 包形式提供服務(wù),無需額外部署和依賴,可理解為增強(qiáng)版的 JDBC 驅(qū)動(dòng),完全兼容 JDBC 和各種 ORM 框架。

  • Sharding Sphere Proxy:定位為透明化的數(shù)據(jù)庫代理端,通過實(shí)現(xiàn)數(shù)據(jù)庫二進(jìn)制協(xié)議,對(duì)異構(gòu)語言提供支持。 目前提供 MySQL 和 PostgreSQL 協(xié)議,透明化數(shù)據(jù)庫操作,對(duì) DBA 更加友好。

它們的區(qū)別如下:


ShardingSphere-JDBC

ShardingSphere-Proxy

支持?jǐn)?shù)據(jù)庫

任意

MySQL/PostgreSQL

連接消耗數(shù)



支持語言

僅 Java

任意

性能

損耗低

損耗略高

無中心化



責(zé)任編輯:姜華 來源: 磊哥和Java
相關(guān)推薦

2025-04-09 00:00:00

2020-11-11 10:05:04

數(shù)據(jù)庫分庫分表美團(tuán)面試

2021-10-15 09:53:12

工具

2024-01-17 14:42:24

分庫分表數(shù)據(jù)庫數(shù)據(jù)分片

2022-05-23 08:43:02

BigIntJavaScript內(nèi)置對(duì)象

2021-11-25 10:18:42

RESTfulJava互聯(lián)網(wǎng)

2021-08-09 07:47:40

Git面試版本

2025-01-13 09:24:32

2022-07-11 08:16:47

NewSQL關(guān)系數(shù)據(jù)庫系統(tǒng)

2020-12-01 08:47:36

Java異常開發(fā)

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2024-09-27 15:43:52

零拷貝DMAIO

2020-06-12 15:50:56

options前端服務(wù)器

2025-03-21 00:00:05

Reactor設(shè)計(jì)模式I/O 機(jī)制

2024-10-24 16:14:43

數(shù)據(jù)傳輸CPU零拷貝

2022-03-21 09:05:18

volatileCPUJava

2015-08-13 10:29:12

面試面試官

2021-07-05 07:55:11

String[]byte轉(zhuǎn)換

2024-07-26 00:16:11

2020-06-19 15:32:56

HashMap面試代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)