資料庫方式實現方案?有什麼缺陷?
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
- 資料庫效能優化有哪些方式資料庫優化
- 資料倉儲應該用什麼方案——資料倉儲實施方案概述
- 什麼是大資料測試?大資料測試實現步驟有哪些?大資料
- 時序資料庫-01-時序資料庫有哪些?為什麼要使用資料庫
- 現在後端都在用什麼資料庫儲存資料?後端資料庫
- 直播原始碼中Mysql資料庫有什麼優勢?原始碼MySql資料庫
- 什麼是mysql資料庫?MySQL的特點有哪些?MySql資料庫
- mybatis怎麼實現insert into多個資料-oracle資料庫MyBatisOracle資料庫
- 面試官:Redis中集合資料型別的內部實現方式是什麼?面試Redis資料型別
- Chronicles 是什麼資料庫資料庫
- 什麼是皇帝資料庫?資料庫
- django用什麼資料庫Django資料庫
- 什麼是Cassandra資料庫資料庫
- 資料庫倉庫系列:(一)什麼是資料倉儲,為什麼要資料倉儲資料庫
- 資料視覺化呈現方式有哪些視覺化
- 資料卷是什麼?資料卷有什麼優勢嗎?
- MySQL資料庫是什麼?linux資料庫運維MySql資料庫Linux運維
- 用 Django 管理現有資料庫Django資料庫
- 雲伺服器和雲資料庫有什麼區別?伺服器資料庫
- 面試官:Redis中雜湊資料型別的內部實現方式是什麼?面試Redis資料型別
- 資料分析完之後的資料展現方式有那些?
- 支付類系統資料處理和資料中臺的資料處理方式有什麼不同?
- 什麼是大資料?Python和大資料有什麼聯絡?大資料Python
- 資料資產管理:資料發現,發現什麼,怎麼發現?
- 織夢需要什麼資料庫織夢資料庫在哪資料庫
- Spring系列之aAOP AOP是什麼?+xml方式實現aop+註解方式實現aopSpringXML
- 什麼是資料庫檢視?資料庫
- 【乾貨分享】軟體Bug和缺陷有什麼區別?
- 資料安全是指什麼?有什麼意義?