bd2和mysql語法區別 微服務MySQL改造

2021-10-18 05:17:40 字數 1802 閱讀 7198

微服務mysql改造

三豐 soft張三丰

mysql 主從複製之半同步模式

mysql半同步概念:一般情況下mysql預設複製模式為非同步

非同步複製模式

主伺服器的i/o threads 將 binlog 寫入二進位制日誌中就返回給客戶端請求乙個結果,無需等待二進位制日誌是否成功傳送到從庫和從庫上是否成功完成relay log寫入和sql threads從relay log中提取二進位制寫入自己binlog的過程。非同步模式的缺點是一旦主庫寫入binlog 發生宕機,此時從庫還未完成對主庫傳送過來的binlog的讀寫儲存操作,那麼從庫就會發生資料丟失的風險。

半同步模式

主庫將binlog日誌資訊寫入到日誌中,然後等待從庫完成後接受讀取和儲存操作,從庫返回主庫乙個ack確認資訊,即從庫接收完主庫傳送過來的binlog內容,並寫入自己的repalylog中,通知主庫上的等待執行緒,該操作已經完成。主庫接收到從庫發過來的資訊就會進入下乙個同步操作,如果此時等待超時,超過主庫設定的超時時間限制(rpl_semi_sync_master_timeout),則關閉半同步,並切換為非同步模式,直到至少一台從庫告訴已經接收到傳送過來的binlog資訊為止。

mysql 主從複製延遲問題

insert操作:查詢一次從庫未找到,可以從主庫中去獲取。update操作:查詢主庫是有的,但是從庫未同步,比如主庫扣減了金額100,但是從庫還是差的原來老的值,就出現資料不一致的風險。一種解決方案就是寫主庫的時候,向redis寫乙份,然後查詢的時候從redis去取,當然這要系統就變得複雜化了。第二種解決方案就是實時性比較高的直接查詢主庫,這樣的話主庫流量就扛不住,又回到單點故障來了,寫扛不住的時候,就要分庫分表 第三種解決方案:寫主庫的時候3秒內切主庫查詢,3秒後同步完成之後,切從庫查詢。第三種方案:主寫入量很大就採取分庫分表的形式,主寫入量不大可以考慮直接開啟強同步,每次寫庫,需要等從庫同步ack成功之後再返回。

分庫分表拆分

資料庫拆分,使用者表為例 使用者表(單一查詢維度) uid,name,city,time,***,age 5億記錄 x86_64機器 如何分表 partition key 如何選擇 城市、時間、使用者唯一標示

uid:20 ,name:50,city:8,time:13位 *** 1位 age 3位

20+50+8+13+1+3=95byte

如果 size of row <100b 5千萬 如果 size of row >100b 1千萬

當然還要看儲存介質:硬碟是pcle ssd 5億記錄/5千萬=10張表 但是10張表 不是2的冪,所以我們用16,擴充套件最好是擴一倍,這樣遷移資料只需要遷移50%

商品表(多個查詢維度) uid,infoid,content,timestamp 5億記錄 x86_64機器 查詢維度 uid infoid timestamp 如何分表 partition 可以如何選擇

列的字串型別可以是什麼?

字串型別是:set blob enum char text varchar

char 和 varchar 的區別?

char 和 varchar 型別在儲存和檢索方面有所不同。char 列長度固定為建立表時宣告的長度,長度值範圍是 1 到 255。當 char 值被儲存時,它們被用空格填充到特定長度,檢索 char 值時需刪除尾隨空格。

在 mysql 中 enum 的用法是什麼?

enum 是乙個字串物件,用於指定一組預定義的值,並可在建立表時使用。sql 語法如下:create table size(name enum('smail,'medium','large');

mysql和db2 語句的區別

db2和mysql在sql的語法上有很大的不同。本文就針對這些不同進行記錄。記錄可能不全,會不斷進行完善 一 建表語句 db2mysql 自增generated always as identity auto increment 預設當前時間 default current timestamp de...

db2和mysql語法分析異同點

1.建表 1 建立基本表二者是一致的 mysql create table person name varchar 10 age int db2 同上。2 mysql支援在建立表的時候指定引擎和字符集,但是db2不支援 2.檢視表 mysql show tables 檢視所有表 show creat...

Mysql中int 2 和int 10 的區別

int n 中的n不是限制字段取值範圍的,int的取值範圍是固定的 0至 4294967295 或 2147483648至2147483647 那麼n這個值是為了在字段中的值不夠時補零的,但是必須含有zerofill,例如 create table type id int 8 zerofill un...