成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

分布式ID系列(3)——數(shù)據(jù)庫(kù)自增ID機(jī)制適合做分布式ID嗎

Stardustsky / 3680人閱讀

摘要:數(shù)據(jù)庫(kù)自增機(jī)制原理介紹在分布式里面,數(shù)據(jù)庫(kù)的自增機(jī)制的主要原理是數(shù)據(jù)庫(kù)自增和數(shù)據(jù)庫(kù)的函數(shù)實(shí)現(xiàn)的。

數(shù)據(jù)庫(kù)自增ID機(jī)制原理介紹

在分布式里面,數(shù)據(jù)庫(kù)的自增ID機(jī)制的主要原理是:數(shù)據(jù)庫(kù)自增ID和mysql數(shù)據(jù)庫(kù)的replace_into()函數(shù)實(shí)現(xiàn)的。這里的replace數(shù)據(jù)庫(kù)自增ID和mysql數(shù)據(jù)庫(kù)的replace_into()函數(shù)實(shí)現(xiàn)的。這里的replace into跟insert功能類(lèi)似,不同點(diǎn)在于:replace into首先嘗試插入數(shù)據(jù)列表中,如果發(fā)現(xiàn)表中已經(jīng)有此行數(shù)據(jù)(根據(jù)主鍵或唯一索引判斷)則先刪除,再插入。否則直接插入新數(shù)據(jù)。

單機(jī)mysql數(shù)據(jù)庫(kù)的自增id實(shí)現(xiàn)如下所示 :

首先表結(jié)構(gòu)如下所示

create table t_test(
    id bigint(20) unsigned not null auto_increment PRIMARY KEY,
    stub char(1) not null default "",
    unique key stub (stub)
)

然后我們插入的sql語(yǔ)句和查詢(xún)的語(yǔ)句如下所示

replace into t_test (stub) values("b");
select last_insert_id();

此時(shí)可以看到看到我們剛剛插入的id值是1

以上就是單機(jī)版mysql的自增id的實(shí)現(xiàn)過(guò)程,但是這里講的是分布式id,所以我們要分析一下數(shù)據(jù)庫(kù)的自增ID機(jī)制在分布式里面是怎么實(shí)現(xiàn)的。

分布式id在數(shù)據(jù)庫(kù)里面的實(shí)現(xiàn)過(guò)程:

既然是分布式id,那么最少要使用兩個(gè)數(shù)據(jù)庫(kù),這里我們使用3臺(tái)來(lái)講解,為了保證每一臺(tái)數(shù)據(jù)庫(kù)里面的id自增的時(shí)候不會(huì)重復(fù),那么我們就要給每一臺(tái)數(shù)據(jù)庫(kù)設(shè)置auto-increment-increment和auto-increment-offset這兩個(gè)屬性值(auto-increment-increment表示每一臺(tái)數(shù)據(jù)庫(kù)的起始id值,然后auto-increment-offset表示每一臺(tái)數(shù)據(jù)庫(kù)每一次的增加數(shù)字),設(shè)置值如下所示

Server1:
auto-increment-increment = 1
auto-increment-offset = 3

Server2:
auto-increment-increment = 2
auto-increment-offset = 3

Server2:
auto-increment-increment = 3
auto-increment-offset = 3

那么如果我們有n臺(tái)數(shù)據(jù)庫(kù)的話,那么上面的auto-increment-increment和auto-increment-offset這兩個(gè)屬性值應(yīng)該怎么設(shè)計(jì)呢,我們給每一臺(tái)數(shù)據(jù)庫(kù)設(shè)置初始值分別為1,2,3...N,然后每一臺(tái)數(shù)據(jù)庫(kù)自增步長(zhǎng)為機(jī)器的臺(tái)數(shù)N,如下圖所示

數(shù)據(jù)庫(kù)自增ID是否適合做分布式ID:

那數(shù)據(jù)庫(kù)自增ID機(jī)制適合作分布式ID嗎?答案是不太適合,為什么呢,我總結(jié)了下面兩個(gè)原因:

1:系統(tǒng)水平擴(kuò)展比較困難,比如定義好了步長(zhǎng)和機(jī)器臺(tái)數(shù)之后,如果要添加機(jī)器該怎么做?假設(shè)現(xiàn)在只有一臺(tái)機(jī)器發(fā)號(hào)是1,2,3,4,5(步長(zhǎng)是1),這個(gè)時(shí)候需要擴(kuò)容機(jī)器一臺(tái)??梢赃@樣做:把第二臺(tái)機(jī)器的初始值設(shè)置得比第一臺(tái)超過(guò)很多,比如14(注意這里設(shè)置14的前提是:在擴(kuò)容期間第一臺(tái)機(jī)器的ID不可能增加到14),同時(shí)設(shè)置步長(zhǎng)為2,那么這臺(tái)機(jī)器下發(fā)的號(hào)碼都是14以后的偶數(shù)。然后把第一臺(tái)機(jī)器的ID值保留為奇數(shù),比如7,然后修改第一臺(tái)的步長(zhǎng)為2。讓它符合我們定義的號(hào)段標(biāo)準(zhǔn)。擴(kuò)容方案看起來(lái)復(fù)雜嗎?貌似還好,現(xiàn)在想象一下如果我們線上有100臺(tái)機(jī)器,這個(gè)時(shí)候要擴(kuò)容該怎么做?簡(jiǎn)直是噩夢(mèng)。所以系統(tǒng)水平擴(kuò)展方案復(fù)雜難以實(shí)現(xiàn)。
2:數(shù)據(jù)庫(kù)壓力還是很大,每次獲取ID都得讀寫(xiě)一次數(shù)據(jù)庫(kù),非常影響性能,不符合分布式ID里面的延遲低和要高QPS的規(guī)則(在高并發(fā)下,如果都去數(shù)據(jù)庫(kù)里面獲取id,那是非常影響性能的)

原文鏈接

其他分布式ID系列快捷鍵:
分布式ID系列(1)——為什么需要分布式ID以及分布式ID的業(yè)務(wù)需求
分布式ID系列(2)——UUID適合做分布式ID嗎
分布式ID系列(3)——數(shù)據(jù)庫(kù)自增ID機(jī)制適合做分布式ID嗎
分布式ID系列(4)——Redis集群實(shí)現(xiàn)的分布式ID適合做分布式ID嗎
分布式ID系列(5)——Twitter的雪法算法Snowflake適合做分布式ID嗎

大佬網(wǎng)址
https://www.itqiankun.com/art...
https://blog.csdn.net/hengyun...
https://tech.meituan.com/2017...
https://segmentfault.com/a/11...
https://www.jianshu.com/p/9d7...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/76149.html

相關(guān)文章

  • 布式ID系列(1)——為什么需要布式ID以及布式ID的業(yè)務(wù)需求

    摘要:同時(shí)除了對(duì)號(hào)碼自身的要求,業(yè)務(wù)還對(duì)號(hào)生成系統(tǒng)的可用性要求極高,想象一下,如果生成系統(tǒng)癱瘓,整個(gè)美團(tuán)點(diǎn)評(píng)支付優(yōu)惠券發(fā)券騎手派單等關(guān)鍵動(dòng)作都無(wú)法執(zhí)行,這就會(huì)帶來(lái)一場(chǎng)災(zāi)難。 分布式id主要用到哪些地方 在復(fù)雜分布式系統(tǒng)中,往往需要對(duì)大量的數(shù)據(jù)和消息進(jìn)行唯一標(biāo)識(shí)。如在美團(tuán)點(diǎn)評(píng)的金融、支付、餐飲、酒店、貓眼電影等產(chǎn)品的系統(tǒng)中,數(shù)據(jù)日漸增長(zhǎng),對(duì)數(shù)據(jù)分庫(kù)分表后需要有一個(gè)唯一ID來(lái)標(biāo)識(shí)一條數(shù)據(jù)或消息,...

    Snailclimb 評(píng)論0 收藏0
  • 布式ID系列(2)——UUID適合布式ID

    摘要:用戶(hù)指定一個(gè)名字空間和一個(gè)字符串,通過(guò)散列,生成。字符串本身需要是唯一的。。雖然是基于隨機(jī)數(shù),但是重復(fù)的可能性可以忽略不計(jì),因此該版本也是被經(jīng)常使用的版本。。當(dāng)前正在使用的。。 UUID的生成策略: UUID的方式能生成一串唯一隨機(jī)32位長(zhǎng)度數(shù)據(jù),它是無(wú)序的一串?dāng)?shù)據(jù),按照開(kāi)放軟件基金會(huì)(OSF)制定的標(biāo)準(zhǔn)計(jì)算,UUID的生成用到了以太網(wǎng)卡地址、納秒級(jí)時(shí)間、芯片ID碼和許多可能的數(shù)字。U...

    wayneli 評(píng)論0 收藏0
  • 布式ID系列(4)——Redis集群實(shí)現(xiàn)的布式ID適合布式ID

    摘要:原文鏈接其他分布式系列快捷鍵分布式系列為什么需要分布式以及分布式的業(yè)務(wù)需求分布式系列適合做分布式嗎分布式系列數(shù)據(jù)庫(kù)自增機(jī)制適合做分布式嗎分布式系列集群實(shí)現(xiàn)的分布式適合做分布式嗎分布式系列的雪法算法適合做分布式嗎大佬網(wǎng)址 今天我們來(lái)講一下Redis集群實(shí)現(xiàn)的分布式ID的過(guò)程,總結(jié)一下Redis集群是否適合做分布式ID? 首先是項(xiàng)目地址: https://github.com/maqian...

    Jeff 評(píng)論0 收藏0
  • 探討布式ID生成系統(tǒng)

    摘要:結(jié)合對(duì)做如下調(diào)整的毫秒時(shí)間戳的數(shù)據(jù)邏輯分區(qū)以及的自增序列。為了解決這個(gè)問(wèn)題,便引入了邏輯分區(qū)。參考文章批量插入返回自增的問(wèn)題美團(tuán)點(diǎn)評(píng)分布式生成系統(tǒng) 這里的博客版本都不會(huì)被更新維護(hù)。查看最新的版本請(qǐng)移步:http://neojos.com 全稱(chēng)Universally Unique Identifier,UUID占128bit,也就是16個(gè)英文字符的長(zhǎng)度(16byte),需要強(qiáng)調(diào)的是,它...

    junbaor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<