成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > PHP隊列場景以及實現代碼實例詳解

PHP隊列場景以及實現代碼實例詳解

熱門標簽:新河科技智能外呼系統怎么樣 地圖標注平臺怎么給錢注冊 常州地圖標注服務商 百度商鋪地圖標注 安裝電銷外呼系統 福州人工外呼系統哪家強 釘釘打卡地圖標注 注冊400電話申請 衡水外呼系統平臺

為了降低單點壓力,通常會根據業(yè)務情況進行分表分庫,將表分布在不同的庫中(庫可能分布在不同的機器上),但是一個業(yè)務場景可能會同時處理兩個表的操作。在這種場景下,事務的提交會變得相對復雜,因為多個節(jié)點(庫)的存在,可能存在部分節(jié)點提交失敗的情況,即事務的ACID特性需要在各個不同的數據庫實例中保證。比如更新db1庫的A表時,必須同步更新db2庫的B表,兩個更新形成一個事務,要么都成功,要么都失敗。

那么我們如何利用mysql實現分布式數據庫的事務呢?

mysql是從5.0開始支持分布式事務

這里先聲明兩個概念:

資源管理器(resource manager):用來管理系統資源,是通向事務資源的途徑。數據庫就是一種資源管理器。資源管理還應該具有管理事務提交或回滾的能力。
事務管理器(transaction manager):事務管理器是分布式事務的核心管理者。事務管理器與每個資源管理器(resource
manager)進行通信,協調并完成事務的處理。事務的各個分支由唯一命名進行標識。
mysql在執(zhí)行分布式事務(外部XA)的時候,mysql服務器相當于xa事務資源管理器,與mysql鏈接的客戶端相當于事務管理器。

分布式事務原理:分段式提交
分布式事務通常采用2PC協議,全稱Two Phase Commitment Protocol。該協議主要為了解決在分布式數據庫場景下,所有節(jié)點間數據一致性的問題。分布式事務通過2PC協議將提交分成兩個階段:

prepare;commit/rollback

階段一為準備(prepare)階段。即所有的參與者準備執(zhí)行事務并鎖住需要的資源。參與者ready時,向transaction manager報告已準備就緒。
階段二為提交階段(commit)。當transaction manager確認所有參與者都ready后,向所有參與者發(fā)送commit命令。

事務協調者transaction manager
因為XA 事務是基于兩階段提交協議的,所以需要有一個事務協調者(transaction manager)來保證所有的事務參與者都完成了準備工作(第一階段)。如果事務協調者(transaction manager)收到所有參與者都準備好的消息,就會通知所有的事務都可以提交了(第二階段)。MySQL 在這個XA事務中扮演的是參與者的角色,而不是事務協調者(transaction manager)。

Mysql的XA事務分為外部XA和內部XA

外部XA用于跨多MySQL實例的分布式事務,需要應用層作為協調者,通俗的說就是比如我們在PHP中寫代碼,那么PHP書寫的邏輯就是協調者。應用層負責決定提交還是回滾,崩潰時的懸掛事務。MySQL數據庫外部XA可以用在分布式數據庫代理層,實現對MySQL數據庫的分布式事務支持,例如開源的代理工具:網易的DDB,淘寶的TDDL等等。

內部XA事務用于同一實例下跨多引擎事務,由Binlog作為協調者,比如在一個存儲引擎提交時,需要將提交信息寫入二進制日志,這就是一個分布式內部XA事務,只不過二進制日志的參與者是MySQL本身。Binlog作為內部XA的協調者,在binlog中出現的內部xid,在crash recover時,由binlog負責提交。(這是因為,binlog不進行prepare,只進行commit,因此在binlog中出現的內部xid,一定能夠保證其在底層各存儲引擎中已經完成prepare)。

mysql xa事務的語法

1、首先要確保mysql開啟XA事務支持

SHOW VARIABLES LIKE '%xa%'

如果innodb_support_xa的值是ON就說明mysql已經開啟對XA事務的支持了。 如果不是就執(zhí)行:

SET innodb_support_xa = ON

主要有:

XA START 'any_unique_id'; // 'any_unique_id' 是用戶給的,全局唯一在一臺mysql中開啟一個XA事務
XA END 'any_unique_id '; //標識XA事務的操作結束
XA PREPARE 'any_unique_id'; //告知mysql 準備提交這個xa事務
XA COMMIT 'any_unique_id'; //告知mysql提交這個xa事務
XA ROLLBACK 'any_unique_id'; //告知mysql回滾這個xa事務
XA RECOVER;//查看本機mysql目前有哪些xa事務處于prepare狀態(tài)

XA事務恢復
如果執(zhí)行分布式事務的mysql crash了,mysql 按照如下邏輯進行恢復:
a. 如果這個xa事務commit了,那么什么也不用做
b. 如果這個xa事務還沒有prepare,那么直接回滾它
c. 如果這個xa事務prepare了,還沒commit, 那么把它恢復到prepare的狀態(tài),由用戶去決定commit或rollback
當mysql crash后重新啟動之后,執(zhí)行“XA RECOVER;”查看當前處于prepare狀態(tài)的xa事務,然后commit或rollback它們。

使用限制
a. XA事務和本地事務以及鎖表操作是互斥的
開啟了xa事務就無法使用本地事務和鎖表操作

mysql> xa start 't1xa';
Query OK, 0 rows affected (0.04 sec)
mysql> begin;
ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
mysql> lock table t1 read;
ERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state

開啟了本地事務就無法使用xa事務

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> xa start 'rrrr';
ERROR 1400 (XAE09): XAER_OUTSIDE: Some work is done outside global transaction

b. xa start 之后必須xa end, 否則不能執(zhí)行xa commitxa rollback

所以如果在執(zhí)行xa事務過程中有語句出錯了,你也需要先xa end一下,然后才能xarollback。

注意事項

a. mysql只是提供了xa事務的接口,分布式事務中的mysql實例之間是互相獨立的不感知的。 所以用戶必須自己實現分布式事務的調度器
b. xa事務有一些使用上的bug, 參考http://www.mysqlops.com/2012/02/24/mysql-xa-optimize.html
主要是
“MySQL數據庫的主備數據庫的同步,通過Binlog的復制完成。而Binlog是MySQL數據庫內部XA事務的協調者,并且MySQL數據庫為binlog做了優(yōu)化——binlog不寫prepare日志,只寫commit日志。
所有的參與節(jié)點prepare完成,在進行xa commit前crash。crash recover如果選擇commit此事務。由于binlog在prepare階段未寫,因此主庫中看來,此分布式事務最終提交了,但是此事務的操作并未 寫到binlog中,因此也就未能成功復制到備庫,從而導致主備庫數據不一致的情況出現。
而crash recover如果選rollback, 那么就會出現全局不一致(該分布式事務對應的節(jié)點,部分已經提交,無法回滾,而部分節(jié)點回滾。最終導致同一分布式事務,在各參與節(jié)點,最終狀態(tài)不一致)”

參考的那篇blog中給出的辦法是修改mysql代碼,這個無法在DBScale中使用。 所以可選的替代方案是不使用
主從復制進行備份,而是直接使用xa事務實現同步寫來作為備份。

php+mysql實現分布式事務案例

保證數據表是innodb的

//db_finance庫下
CREATE TABLE `t_user_account` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `username` varchar(255) NOT NULL DEFAULT '' COMMENT '用戶名',
 `money` int(11) NOT NULL DEFAULT '0' COMMENT '賬戶金額',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
//db_order庫下
CREATE TABLE `t_user_orders` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
 `username` varchar(255) NOT NULL DEFAULT '',
 `money` int(11) NOT NULL DEFAULT '0' COMMENT '訂單扣款金額',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8;

php代碼

$username = '公眾號PHP開源社區(qū)';
$order_money = 100;

$addOrder_success = addOrder($username,$order_money);
$upAccount_success = updateAccount($username,$order_money);


if($addOrder_success['state'] =="yes"  $upAccount_success['state']=="yes"){
  commitdb($addOrder_success['xa']);
  commitdb1($upAccount_success['xa']);
}else{
  rollbackdb($addOrder_success['xa']);
  rollbackdb1($upAccount_success['xa']);
}
die;
function addOrder ($username, $order_money){

  $xa = uniqid("");

  $sql_xa = "XA START '$xa'";
  $db = Yii::app()->dborder_readonly;
  $db->createCommand($sql_xa)->execute();

  $insert_sql = "INSERT INTO t_user_orders (`username`,`money`) VALUES ($username,$order_money)";
  $id = $db->createCommand($insert_sql)->execute();

  $db->createCommand("XA END '$xa'")->execute();
  if ($id) {

    $db->createCommand("XA PREPARE '$xa'")->execute();
    return ['state' => 'yes', 'xa' => $xa];
  }else {
    return ['state' => 'no', 'xa' => $xa];
  }

}

function updateAccount($username, $order_money){
  $xa = uniqid("");
  $sql_xa = "XA START '$xa'";
  $db = Yii::app()->db_finance;
  $db->createCommand($sql_xa)->execute();

  $sql = "update t_user_account set money=money-".$order_money." where username='$username'";


  $id = $db->createCommand($sql)->execute();

  $db->createCommand("XA END '$xa'")->execute();
  if ($id) {
    $db->createCommand("XA PREPARE '$xa'")->execute();
    return ['state' => 'yes', 'xa' => $xa];
  }else {
    return ['state' => 'no', 'xa' => $xa];
  }

}


//提交事務!
function commitdb($xa){

  $db = Yii::app()->dborder_readonly;
  return $db->createCommand("XA COMMIT '$xa'")->execute();
}

//回滾事務
function rollbackdb($xa){

  $db = Yii::app()->dborder_readonly;
  return $db->createCommand("XA COMMIT '$xa'")->execute();
}

//提交事務!
function commitdb1($xa){

  $db = Yii::app()->db_finance;
  return $db->createCommand("XA COMMIT '$xa'")->execute();

}
//回滾事務
function rollbackdb1($xa){
  $db = Yii::app()->db_finance;
  return $db->createCommand("XA ROLLBACK '$xa'")->execute();

到此這篇關于PHP隊列場景以及實現代碼實例詳解的文章就介紹到這了,更多相關PHP隊列場景以及實現內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PHP如何通過帶尾指針的鏈表實現''隊列''
  • PHP7生產環(huán)境隊列Beanstalkd用法詳解
  • PHP Beanstalkd消息隊列的安裝與使用方法實例詳解
  • PHP+RabbitMQ實現消息隊列的完整代碼
  • 詳解PHP隊列的實現
  • php基于Redis消息隊列實現的消息推送的方法

標簽:克拉瑪依 遼陽 唐山 柳州 鷹潭 白城 鶴崗 六安

巨人網絡通訊聲明:本文標題《PHP隊列場景以及實現代碼實例詳解》,本文關鍵詞  PHP,隊列,場景,以及,實現,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP隊列場景以及實現代碼實例詳解》相關的同類信息!
  • 本頁收集關于PHP隊列場景以及實現代碼實例詳解的相關信息資訊供網民參考!
  • 推薦文章
    久久国产精品二区| 中文字幕中文字幕中文字幕亚洲无线| 91手机在线视频| 一区二区三区四区欧美| 精品久久久久久综合日本| 亚洲天天影视| 黄页大全在线免费观看| 精品久久久久久久久久久久久久| 欧美成人中文| 尤物在线网址| 国产精品综合色区在线观看| 欧美性xxxx69| 91在线免费视频观看| 俺来俺也去www色在线观看| 亚洲超碰精品一区二区| 很污很黄的网站| 亚洲激情黄色| 欧美精品在线一区| 日本妇乱大交xxxxx| 亚洲精品一区二三区| 国产精品久久久久久久久果冻传媒| 亚洲免费一区二区| 国产欧美日韩亚洲一区二区三区| 欧美特级限制片免费在线观看| 亚洲久久久久久久| 中文字幕亚洲欧美在线不卡| 中国人xxxxx69免费视频| 亚洲精品一区三区三区在线观看| 国产一级做a爰片在线看免费| 欧美日韩黄色网| 日韩久久久久久久久久久久久| 91性高潮久久久久久久| 91国偷自产一区二区使用方法| 波多野结衣在线电影| 欧美高清在线| 91精品视频免费在线观看| 久久久久久国产精品mv| 久国内精品在线| 蜜桃av一区二区三区| 国产又粗又猛又爽| 毛片网站在线免费观看| 97久久天天综合色天天综合色hd| 欧美大片大片在线播放| 久久久久久久久久久久久久久久久久av| 日韩一级片在线免费观看| 精品夜色国产国偷在线| 色狠狠久久av五月综合|| 丰满人妻一区二区三区53号| 欧美性三三影院| 精产国品一区二区三区| 亚洲天堂久久新| 中文字幕一区二区三区日韩精品| 精品毛片免费观看| 亚洲专区在线视频| 中文字幕第一区二区| 国产婷婷色一区二区在线观看| 久久69成人| 亚洲自拍高清视频网站| 国产成人8x视频一区二区| www.毛片com| 色偷偷777| 手机福利小视频在线播放| 91超碰在线免费观看| 亚洲一区二区免费视频软件合集| 五月天最新网址| 91久久夜色精品国产网站| 国产精品视频自拍| 麻豆精品国产传媒av| 7777在线视频| 正在播放亚洲精品| 日韩成人精品| 色综合电影网| 亚洲欧美电影在线观看| 欧美激情性爽国产精品17p| 中文字幕第15页| 国产乱视频在线观看播放| 国产精品成人99一区无码| 成人免费一区二区三区视频| 中文字幕视频二区| 中文字幕av手机在线| 亚洲免费在线播放| 色综合久久天天| 午夜精品一区二区三| 亚洲自拍偷拍区| 韩国无码av片在线观看网站| 亚洲欧美综合另类| 欧美在线视频二区| 精品麻豆一区二区三区| 久久天天躁夜夜躁狠狠躁2022| 久久久久久亚洲精品不卡| 狠狠干视频网站| 麻豆av一区二区三区| 三级视频网站在线| 精一区二区三区| 欧美高清视频在线观看mv| 亚洲综合日韩| 免费观看黄色av| 欧美最猛黑人xxxx黑人猛叫黄| 久久久91麻豆精品国产一区| 羞羞视频在线观看免费| 视频亚洲一区二区| 成人欧美一区二区三区在线观看| 青青草原在线免费观看| 日韩毛片在线看| 亚洲石原莉奈一区二区在线观看| 激情小说亚洲色图| 亚洲福利在线观看| 91精品久久久久久久久久| 榴莲视频成人app| 超级碰在线观看| 精品麻豆一区二区三区| 欧美午夜性春猛xxxx| 91免费看网站| 精品无码一区二区三区爱欲| 日韩a级大片| 精品无人国产偷自产在线| 日本熟妇乱子伦xxxx| 久久久精品免费免费| 97人妻一区二区精品免费视频| 日韩avvvv在线播放| 亚洲成人一区二区在线观看| 日韩专区一卡二卡| 色婷婷av久久久久久久| 国产精品乱人伦中文| 一二三在线视频| 麻豆传媒在线观看| 久久精品中文字幕| 欧美美女福利视频| 亚洲男人的天堂在线观看| 九色蝌蚪性视频| 无码人妻aⅴ一区二区三区玉蒲团| 蜜臀久久99精品久久久久宅男| 国产尤物久久久| 亚洲欧美伊人| 中文字幕av无码一区二区三区| 成人听书哪个软件好| 国产精品一级久久久| 91久久极品少妇xxxxⅹ软件| 亚洲成人免费| 欧美高清视频在线观看| 最近2019中文字幕一页二页| 羞羞漫画网18久久app| 亚洲承认视频| 人妻丰满熟妇av无码区hd| 成人精品久久久| 国产精自产拍久久久久久| av天天在线| 九色精品视频在线观看| 91香蕉视频免费在线观看| 午夜影院在线播放| 国产精品久久久久久久久久久不卡| 日本一区二区中文字幕| 国产xxxx做受性欧美88| 国产精品免费电影| 亚洲人人精品| 国产又粗又长| 欧美日韩视频| 好妞色妞国产在线视频| 91精品在线观看视频| 91免费精品国偷自产在线在线| 欧美高清视频一二三区| 欧美日韩中文一区| 欧美大片大片在线播放| 波多野吉衣中文字幕| 一区二区三区四区五区精品视频| 最新中文字幕在线观看视频| 91好吊色国产欧美日韩在线| 小说区图片区综合久久88| 亚洲a在线播放| 日本美女视频一区二区| 欧美理论电影在线观看| 亚洲第一黄网| 亚洲小说区图片区| 久久99精品国产麻豆婷婷洗澡| 国产日本一区二区| 精品亚洲国产视频| 国产精品乱码视频| 人妻激情偷乱视频一区二区三区| 欧美精品尤物在线| 美女主播精品视频一二三四| 欧美色欧美亚洲另类二区| 999在线观看| 少妇视频在线| 九一九一国产精品| 91精品国产调教在线观看| 视频在线观看免费高清| 爽爽淫人综合网网站| 欧美性猛交久久久乱大交小说| 九色视频在线观看免费| 污视频网站免费看| 一道本视频在线观看| 成人免费视频国产免费观看| 免费成人美女在线观看.| http://嫩草影院| 一本岛在线视频| 亚洲专区第一页| 国产成人亚洲综合a∨婷婷| 欧美激情一区在线| 91国偷自产一区二区开放时间| 欧美性受xxxx黑人| 国产精品视频二区三区| 九九九国产视频| 国产剧情av片巨作醉酒女邻居| 在线观看日韩专区| 国产免费不卡| 国产美女www| 日本免费视频www| 97久久国产亚洲精品超碰热| 91九色国产在线播放| 国产免费一区二区三区香蕉精| 亚洲高清影院| 五月婷婷丁香激情| 中文字幕日韩一区二区不卡| 亚洲高清福利视频| 国产69精品久久久久9999小说| 日韩视频免费在线| 在线亚洲激情| 在线视频你懂| 国产精品视频一区二区在线观看| 免费av观看网址| 日韩精品一区中文字幕| 精品无人区乱码1区2区3区在线| 91在线高清视频| 成人黄色av网站在线| 中文成人激情娱乐网| 欧美一级淫片免费视频魅影视频| 亚洲第一网站免费视频| 成人性生活视频免费看| 欧美亚洲成人精品| 亚洲综合在线一区二区| 久久综合在线观看| yourporn在线观看中文站| 四虎国产精品永远| 欧美在线一级视频| 丝袜亚洲另类欧美| 国产熟妇一区二区三区四区| 久久婷婷国产91天堂综合精品| 日日干夜夜操| 国产原创在线视频| 91麻豆精品久久毛片一级| 欧美午夜一区二区三区免费大片| 99热在线看| 国产特级黄色片| 一二三四区精品视频| 成人福利电影| 欧美激情视频网| 99re国产精品| 色悠久久久久综合欧美99| 在线影视一区二区三区| 日韩欧美高清在线| 国产日韩欧美自拍| 亚洲色图图片网| 日韩中文字幕在线视频播放| 完整版免费av片| 欧美性xxxxxbbbbbb精品| 欧美日韩一区二区三区在线免费观看| 天天综合天天添夜夜添狠狠添| 免费国产成人看片在线| 天天干天天草天天射| 亚洲女同志freevdieo| 久久国产精品久久精品国产| 在线三级中文| 国产精品videosex极品| 麻豆精品蜜桃一区二区三区| 人体私拍套图hdxxxx| 日韩第一页在线观看| 最近中文字幕mv2018在线高清| 黄色动漫在线免费观看| 国产视频九色蝌蚪| 久久精品成人一区二区三区蜜臀| 成人午夜在线观看视频| 亚欧日韩另类中文欧美| 亚洲欧美日韩国产综合| 欧美精品在欧美一区二区| 嫩草在线视频| 亚洲精品菠萝久久久久久久| 亚欧美无遮挡hd高清在线视频| 日韩精品一二三区| 亚洲在线免费播放| 成人精品高清在线| 成人三级做爰av| 国产美女精品视频免费播放软件| 99免费在线视频| 欧美天堂亚洲电影院在线播放| 欧美在线你懂得| 偷拍自拍在线视频| 91夜夜蜜桃臀一区二区三区| 日本二区在线观看| 美日韩精品视频免费看| 国产美女一区| 日韩在线视频免费| 日本少妇xxxx动漫| 男人天堂视频在线观看| 国产在线精选视频| 国产在线麻豆精品观看| 波多野结衣乳巨码无在线| www.五月婷婷.com| 国产乱子夫妻xx黑人xyx真爽| 99热一区二区三区| 国产精品影音先锋| 黄色a级三级三级三级| 国产精品一区二区久激情瑜伽| 激情综合闲人网| 中文字幕视频一区二区三区久| 国产对白在线正在播放| 日本福利一区二区| 女人喷潮完整视频| 天天射成人网| www.av欧美| 亚洲欧美丝袜中文综合| 国产精品毛片视频| 欧美成人影院在线播放| 激情综合五月网| 日韩国产欧美在线观看| 欧美日韩在线视频免费播放| 99香蕉国产精品偷在线观看| 国产婷婷一区二区三区久久| 亚洲AV成人无码一二三区在线| 欧美成人片在线| 婷婷久久一区| 天天做天天干天天操| 亚洲天堂777| 日本电影亚洲天堂一区| 亚洲人一区二区| 色综合久久久无码中文字幕波多| 色综合久久精品亚洲国产| 精品少妇人妻av免费久久洗澡| 青青草成人免费视频|