資料庫方式實現方案?有什麼缺陷?
MySQL為例
我們將分散式系統中資料庫的同一個業務表的自增ID設計成不-樣的起始值,然後設定固定的步長,步長的值即為分庫的數量或分表的數量。
以MySQL舉例,利用給欄位設定auto_ _increment _increment和auto_ _increment _ffset來保證ID自增。
auto_ increment_ offset: 表示自增長欄位從那個數開始,他的取值範圍是1 .. 65535。
auto_ increment_ increment: 表示自增長欄位每次遞增的量,其預設值是1,取值範圍是1 .. 65535。
缺點也很明顯,首先它強依賴DB,當DB異常時整個系統不用。雖然配置主從複製可以儘可能的增加可用性,但是資料一致性在特殊情況下難以保證。主從切換時的不一致可能會導致重複發號。還有就是ID發號效能瓶頸限制在單臺MySQL的讀寫效能。
使用redis實現
Redis實現分散式唯一ID主要是透過提供像INCR和INCRBY這樣的自增原子命令,由於Redis自 身的單執行緒的特點所以能保證生成的ID肯定是唯一有序的。
但是單機存在效能瓶頸,無法滿足高併發的業務需求,所以可以採用叢集的方式來實現。叢集的方式又會涉及到和資料庫叢集同樣的問題,所以也需要設定分段和步長來實現。
為了避免長期自增後數字過大可以透過與當前時間戳組合起來使用,另外為了保證併發和業務多執行緒的問題可以採用Redis + Lua的方式進行編碼,保證安全。
Redis實現分散式全域性唯- -ID, 它的效能比較高,生成的資料是有序的,對排序業務有利,但是同樣它依賴於redis,需要系統引|進redis元件,增加了系統的配置複雜性。
當然現在Redis的使用性很普遍,所以如果其他業務已經引|進了Redis叢集,則可以資源利用考慮使用Redis來實現。
零基礎學ITwap.mobiletrain.org/ljc/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70023145/viewspace-2932158/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【資料庫】簡單聊聊資料庫可以做什麼,有什麼用?資料庫
- 【資料庫】雲資料庫rds是什麼意思?有什麼優勢?資料庫
- 雲資料庫RDS是什麼?雲資料庫RDS有什麼優勢?資料庫
- 資料庫是什麼意思?有什麼用?有哪些型別?資料庫型別
- 什麼是雙機熱備?實現方式有哪些?
- 什麼是現代資料棧?有什麼特徵?特徵
- 資料庫索引型別及實現方式資料庫索引型別
- 雲原生資料庫TDSQL-C和傳統主備方式資料庫有什麼區別?資料庫SQL
- 資料庫索引為什麼用B+樹實現?資料庫索引
- 什麼是資料庫?什麼是雲資料庫?資料庫
- 雲資料庫MySQL有什麼作用?有哪些優點?資料庫MySql
- 為什麼會有這麼多種的資料庫資料庫
- 什麼是大資料測試?大資料測試實現步驟有哪些?大資料
- 常見資料庫的分頁實現方案資料庫
- 資料庫效能優化有哪些方式資料庫優化
- 資料庫中Schema和Database有什麼區別資料庫Database
- 面試官:Redis中集合資料型別的內部實現方式是什麼?面試Redis資料型別
- 資料卷是什麼?資料卷有什麼優勢嗎?
- 什麼是mysql資料庫?MySQL的特點有哪些?MySql資料庫
- 直播原始碼中Mysql資料庫有什麼優勢?原始碼MySql資料庫
- 現在後端都在用什麼資料庫儲存資料?後端資料庫
- 有什麼方案能允許業務人員自己做資料上報?
- 在.net中用資料工廠實現多資料庫的操作方案資料庫
- 為什麼有時Oracle資料庫不用索引來查詢資料?(轉)Oracle資料庫索引
- 面試官:Redis中雜湊資料型別的內部實現方式是什麼?面試Redis資料型別
- django用什麼資料庫Django資料庫
- 什麼是皇帝資料庫?資料庫
- 什麼是Cassandra資料庫資料庫
- 什麼是NoSQL資料庫?SQL資料庫
- 什麼叫xml資料庫?XML資料庫
- 資料庫該學什麼!!!!資料庫
- Chronicles 是什麼資料庫資料庫
- 資料安全是指什麼?有什麼意義?
- 資料是什麼——資料的倉庫
- 資料視覺化呈現方式有哪些視覺化
- 資料庫倉庫系列:(一)什麼是資料倉儲,為什麼要資料倉儲資料庫
- 【乾貨分享】軟體Bug和缺陷有什麼區別?
- 雲伺服器和雲資料庫有什麼區別?伺服器資料庫