最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

對(duì)于SnowFlake你又了解多少?

2023-08-16 20:21 作者:騰科IT教育官方賬號(hào)  | 我要投稿

前言

SnowFlake的出現(xiàn)來源于國(guó)家大氣研究中心查爾斯·奈特稱發(fā)現(xiàn),一般的雪花大約由10^19個(gè)水分子組成,在雪花形成過程中,會(huì)形成不同的結(jié)構(gòu)分支,所以在自然中不存在兩片完全一樣的雪花,這個(gè)有趣的觀察啟發(fā)了Twitter開源的snowflake分布式ID生成算法。

?snowflake算法能夠保證在分布式系統(tǒng)中生成的ID是獨(dú)一無二的

需要選擇合適的方案去應(yīng)對(duì)數(shù)據(jù)規(guī)模的增長(zhǎng),以應(yīng)對(duì)逐漸增長(zhǎng)的訪問壓力和數(shù)據(jù)量。

?數(shù)據(jù)庫(kù)的擴(kuò)展方式主要包括:業(yè)務(wù)分庫(kù)、主從復(fù)制,數(shù)據(jù)庫(kù)分表。


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

將不同業(yè)務(wù)數(shù)據(jù)分散存儲(chǔ)到不同的數(shù)據(jù)庫(kù)服務(wù)器,能夠支撐百萬甚至千萬用戶規(guī)模的業(yè)務(wù),但如果業(yè)務(wù)?繼續(xù)發(fā)展,同一業(yè)務(wù)的單表數(shù)據(jù)也會(huì)達(dá)到單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的處理瓶頸。

?例如,淘寶的幾億用戶數(shù)據(jù), 如果全部存放在一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的一張表中,肯定是無法滿足性能要求的,此時(shí)就需要對(duì)單表數(shù)據(jù)進(jìn)行拆分。

單表數(shù)據(jù)拆分有兩種方式:垂直分表和水平分表。

示意圖如上

垂直分表

?垂直分表適合將表中某些不常用且占了大量空間的列拆分出去。

?例如,前面示意圖中的 nickname 和 description 字段,假設(shè)我們是一個(gè)婚戀網(wǎng)站,用戶在篩選其他用 戶的時(shí)候,主要用 age 和 sex 兩個(gè)字段進(jìn)行查詢,而 nickname 和 description 兩個(gè)字段主要用于展 示,一般不會(huì)在業(yè)務(wù)查詢中用到。

? description 本身又比較長(zhǎng),所以我們可以將這兩個(gè)字段獨(dú)立到另外 一張表中,這樣在查詢 age 和 sex 時(shí),就能帶來一定的性能提升。


水平分表

水平分表適合表行數(shù)特別大的表,有的公司要求單表行數(shù)超過?5000 萬就必須進(jìn)行分表,這個(gè)數(shù)字可以 作為參考,但并不是絕對(duì)標(biāo)準(zhǔn),關(guān)鍵還是要看表的訪問性能。對(duì)于一些比較復(fù)雜的表,可能超過 1000 萬就要分表了;而對(duì)于一些簡(jiǎn)單的表,即使存儲(chǔ)數(shù)據(jù)超過 1 億行,也可以不分表。

但不管怎樣,當(dāng)看到表的數(shù)據(jù)量達(dá)到千萬級(jí)別時(shí),作為架構(gòu)師就要警覺起來,因?yàn)檫@很可能是架構(gòu)的性?能瓶頸或者隱患。

水平分表相比垂直分表,會(huì)引入更多的復(fù)雜性,例如要求全局唯一的數(shù)據(jù)id該如何處理


主鍵自增

以最常見的用戶 ID 為例,可以按照 1000000 的范圍大小進(jìn)行分段,1 ~ 999999 放到表 1中, 1000000 ~ 1999999 放到表2中,以此類推。

復(fù)雜點(diǎn):分段大小的選取。分段太小會(huì)導(dǎo)致切分后子表數(shù)量過多,增加維護(hù)復(fù)雜度;分段太大可能會(huì)?導(dǎo)致單表依然存在性能問題,一般建議分段大小在 100 萬至 2000 萬之間,具體需要根據(jù)業(yè)務(wù)選取合適 的分段大小。

優(yōu)點(diǎn):可以隨著數(shù)據(jù)的增加平滑地?cái)U(kuò)充新的表。例如,現(xiàn)在的用戶是 100 萬,如果增加到 1000 萬, 只需要增加新的表就可以了,原有的數(shù)據(jù)不需要?jiǎng)印?br/>

缺點(diǎn):分布不均勻。假如按照 1000 萬來進(jìn)行分表,有可能某個(gè)分段實(shí)際存儲(chǔ)的數(shù)據(jù)量只有 1 條,而 另外一個(gè)分段實(shí)際存儲(chǔ)的數(shù)據(jù)量有 1000 萬條。


?取模

同樣以用戶 ID 為例,假如我們一開始就規(guī)劃了 10 個(gè)數(shù)據(jù)庫(kù)表,可以簡(jiǎn)單地用 user_id % 10 的值來 表示數(shù)據(jù)所屬的數(shù)據(jù)庫(kù)表編號(hào),ID 為 985 的用戶放到編號(hào)為 5 的子表中,ID 為 10086 的用戶放到編號(hào) 為 6 的子表中。

復(fù)雜點(diǎn):初始表數(shù)量的確定。表數(shù)量太多維護(hù)比較麻煩,表數(shù)量太少又可能導(dǎo)致單表性能存在問題。

優(yōu)點(diǎn):表分布比較均勻。

缺點(diǎn):擴(kuò)充新的表很麻煩,所有數(shù)據(jù)都要重分布。


總結(jié)?

雪花算法是由Twitter公布的分布式主鍵生成算法,它能夠保證不同表的主鍵的不重復(fù)性,以及相同表的 主鍵的有序性。


關(guān)于雪花算法,本期就講到這里

下期還會(huì)繼續(xù)發(fā)布好文章給大家學(xué)習(xí)

快快關(guān)注我們吧!



對(duì)于SnowFlake你又了解多少?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
视频| 晋州市| 台北县| 惠东县| 邯郸市| 共和县| 浦县| 新沂市| 六安市| 奇台县| 阳春市| 兴文县| 肥东县| 南涧| 中牟县| 白沙| 铜梁县| 泰顺县| 河东区| 南部县| 三原县| 十堰市| 微山县| 漠河县| 连江县| 两当县| 平遥县| 绥宁县| 盈江县| 志丹县| 乌审旗| 江陵县| 保德县| 长寿区| 民乐县| 涞源县| 阳曲县| 噶尔县| 商都县| 徐州市| 灵宝市|