新聞中心
隨著大數(shù)據(jù)時(shí)代的到來(lái),數(shù)據(jù)同步變得越來(lái)越重要。在很多應(yīng)用場(chǎng)景中,需要將不同數(shù)據(jù)源的數(shù)據(jù)同步到同一個(gè)數(shù)據(jù)庫(kù)中,以便于后續(xù)的查詢(xún)和分析。而一個(gè)好的數(shù)據(jù)庫(kù)設(shè)計(jì)可以在很大程度上提高數(shù)據(jù)同步的效率和準(zhǔn)確性。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),崇明企業(yè)網(wǎng)站建設(shè),崇明品牌網(wǎng)站建設(shè),網(wǎng)站定制,崇明網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,崇明網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
本文將介紹一種高效實(shí)現(xiàn)數(shù)據(jù)同步的方法——并發(fā)推送數(shù)據(jù)庫(kù)設(shè)計(jì)。這種數(shù)據(jù)庫(kù)設(shè)計(jì)在數(shù)據(jù)同步中具有很大的優(yōu)勢(shì),可以減少數(shù)據(jù)傳輸?shù)臅r(shí)間和避免數(shù)據(jù)的丟失。
一、并發(fā)推送概述
并發(fā)推送是指在多個(gè)終端同時(shí)訪(fǎng)問(wèn)同一個(gè)數(shù)據(jù)庫(kù)時(shí),推送數(shù)據(jù)的方式。當(dāng)一個(gè)終端將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)后,數(shù)據(jù)庫(kù)會(huì)將這些數(shù)據(jù)并發(fā)地推送給其他終端。這樣,其他終端就可以及時(shí)地獲得最新的數(shù)據(jù)。
并發(fā)推送的實(shí)現(xiàn)方式有很多種,比如輪詢(xún)、長(zhǎng)連接等。在本文中,我們將介紹一種基于長(zhǎng)連接的實(shí)現(xiàn)方式,即使用WebSocket技術(shù)來(lái)實(shí)現(xiàn)并發(fā)推送。
二、數(shù)據(jù)庫(kù)設(shè)計(jì)
為了實(shí)現(xiàn)并發(fā)推送,需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行一定的設(shè)計(jì)。具體來(lái)說(shuō),需要在數(shù)據(jù)庫(kù)中增加以下表:
1. DataLog表
DataLog表用于記錄數(shù)據(jù)的變化。每當(dāng)一條數(shù)據(jù)發(fā)生變化時(shí),就會(huì)在DataLog表中插入一條新記錄。每條記錄包含以下字段:
– ID:記錄ID
– TableName:表名
– Operation:操作類(lèi)型(插入/更新/刪除)
– Data:數(shù)據(jù)內(nèi)容
– Timestamp:插入時(shí)間
2. DataVersion表
DataVersion表用于記錄當(dāng)前數(shù)據(jù)版本。每當(dāng)DataLog表中插入一條新記錄時(shí),就會(huì)更新DataVersion表的相應(yīng)字段。具體包含以下字段:
– TableName:表名
– Version:當(dāng)前表的數(shù)據(jù)版本
3. Subscriber表
Subscriber表用于記錄訂閱者信息。每個(gè)訂閱者都有一條記錄,具體包含以下字段:
– ID:訂閱者ID
– Name:訂閱者名稱(chēng)
– Token:訂閱者Token
– LastReceivedVersion:訂閱者上次收到的數(shù)據(jù)版本號(hào)
– LastReceivedTime:訂閱者上次收到數(shù)據(jù)的時(shí)間戳
4. Subscription表
Subscription表用于記錄訂閱關(guān)系。每個(gè)訂閱關(guān)系都有一條記錄,具體包含以下字段:
– ID:訂閱關(guān)系ID
– SubscriberID:訂閱者ID
– TableName:表名
5. PushStatus表
PushStatus表用于記錄推送消息的狀態(tài)。每當(dāng)一條消息被成功推送給一個(gè)訂閱者時(shí),就會(huì)在PushStatus表中插入一條新記錄。具體包含以下字段:
– ID:推送消息ID
– SubscriberID:訂閱者ID
– TableName:表名
– Message:消息內(nèi)容
– Status:推送狀態(tài)
– PushTime:推送時(shí)間
6. MessageQueue表
MessageQueue表用于記錄待推送的消息。每當(dāng)DataLog表中插入一條新記錄時(shí),就會(huì)在MessageQueue表中插入一條新記錄。具體包含以下字段:
– ID:消息ID
– TableName:表名
– DataID:數(shù)據(jù)ID
– Operation:操作類(lèi)型
– Version:數(shù)據(jù)版本號(hào)
7. WsSession表
WsSession表用于管理WebSocket連接。每個(gè)WebSocket連接都對(duì)應(yīng)一條WsSession記錄,具體包含以下字段:
– ID:Session ID
– SubscriberID:訂閱者ID
– Token:訂閱者Token
– LastPingTime:上次心跳時(shí)間
8. GlobalConfig表
GlobalConfig表用于記錄全局配置參數(shù),例如WebSocket地址等。
以上表格的設(shè)計(jì)可以極大地減少數(shù)據(jù)傳輸?shù)臅r(shí)間和避免數(shù)據(jù)的丟失。同時(shí),這種設(shè)計(jì)的表結(jié)構(gòu)也比較簡(jiǎn)單,可以很方便地使用ORM框架進(jìn)行操作。
三、實(shí)現(xiàn)細(xì)節(jié)
在實(shí)現(xiàn)并發(fā)推送時(shí),還需要注意以下幾個(gè)細(xì)節(jié):
1. 數(shù)據(jù)庫(kù)更新時(shí)的事務(wù)處理
由于多個(gè)終端會(huì)同時(shí)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),因此在更新數(shù)據(jù)庫(kù)時(shí)需要進(jìn)行事務(wù)處理,以保證數(shù)據(jù)的一致性。
具體來(lái)說(shuō),需要將DataLog表和DataVersion表的更新操作放在同一個(gè)事務(wù)中進(jìn)行。當(dāng)DataLog表中插入新記錄時(shí),需要在DataVersion表中更新相應(yīng)的版本號(hào)。這樣,在推送新數(shù)據(jù)時(shí),就可以根據(jù)DataVersion表中的版本號(hào)來(lái)判斷數(shù)據(jù)是否已經(jīng)更新。
2. 心跳包的處理
WebSocket連接需要定時(shí)發(fā)送心跳包,以保持連接的有效性。在接收到心跳包時(shí),需要及時(shí)更新WsSession表中的LastPingTime字段,防止連接超時(shí)。
3. 消息的推送
每當(dāng)一條數(shù)據(jù)發(fā)生變化時(shí),需要將相應(yīng)的消息推送給所有訂閱者。由于WebSocket連接的特性,需要使用異步方式來(lái)推送消息。具體來(lái)說(shuō),可以使用隊(duì)列方式,將待推送的消息存入MessageQueue表中。使用獨(dú)立的線(xiàn)程來(lái)處理隊(duì)列中的消息,使用WebSocket協(xié)議將消息推送給相應(yīng)的訂閱者即可。
四、
本文介紹了一種高效實(shí)現(xiàn)數(shù)據(jù)同步的方法——并發(fā)推送數(shù)據(jù)庫(kù)設(shè)計(jì)。通過(guò)對(duì)數(shù)據(jù)庫(kù)進(jìn)行一定的設(shè)計(jì),可以極大地減少數(shù)據(jù)傳輸?shù)臅r(shí)間和避免數(shù)據(jù)的丟失。同時(shí),在實(shí)現(xiàn)過(guò)程中還需要遵循一些細(xì)節(jié),比如事務(wù)處理、心跳包的處理以及消息的推送等。
在實(shí)際應(yīng)用中,我們可以靈活地根據(jù)具體情況來(lái)調(diào)整數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)細(xì)節(jié),以達(dá)到更好的效果。
相關(guān)問(wèn)題拓展閱讀:
- 如何設(shè)計(jì)好mysql數(shù)據(jù)庫(kù)?
- 如何搭建大數(shù)據(jù)云平臺(tái)具備要素高并發(fā)
如何設(shè)計(jì)好mysql數(shù)據(jù)庫(kù)?
不能肆核山單純的說(shuō)好,或者不好,這需要根據(jù)你的系統(tǒng)實(shí)際需要。
如果你的系統(tǒng)并發(fā)要求,用戶(hù)量不高,這樣的設(shè)裂中計(jì)就顯得沒(méi)有必要,因?yàn)樾?,少,運(yùn)行速度也是很快的。
如果你的應(yīng)用用戶(hù)多,并發(fā)高,數(shù)據(jù)量大你這樣設(shè)計(jì)是可以的,雖然增加了數(shù)據(jù)量,磁盤(pán)開(kāi)銷(xiāo),但是換來(lái)氏伏的是高效運(yùn)行。是OK的。
如何搭建大數(shù)據(jù)云平臺(tái)具備要素高并發(fā)
所謂的大數(shù)據(jù)平臺(tái)不是獨(dú)立存在的,凱弊比如百度是依賴(lài)搜索引擎獲得大數(shù)據(jù)并開(kāi)展業(yè)務(wù)的,阿里是通過(guò)電子商務(wù)交易獲得大數(shù)據(jù)并開(kāi)展業(yè)務(wù)的,騰訊是通過(guò)社交獲得大數(shù)據(jù)并開(kāi)始業(yè)務(wù)的,所以說(shuō)大數(shù)據(jù)平臺(tái)不是獨(dú)立存在的,重點(diǎn)是如何搜集和沉淀數(shù)據(jù),如何分析數(shù)據(jù)并挖掘數(shù)據(jù)的價(jià)值。
我可能還不夠資格回答這個(gè)問(wèn)題,沒(méi)有經(jīng)歷過(guò)一個(gè)公司大數(shù)據(jù)平臺(tái)從無(wú)到有到復(fù)雜的過(guò)程。不過(guò)說(shuō)說(shuō)看法吧,也算是梳理一下想法找找噴。
這是個(gè)需求驅(qū)動(dòng)的過(guò)程。
曾經(jīng)聽(tīng)過(guò)spotify的分享,印象很深的是,他們分享說(shuō),他們的hadoop集群之一次故障是因?yàn)椋瑱C(jī)器放在靠窗的地方,太陽(yáng)曬了當(dāng)機(jī)了(笑)。從簡(jiǎn)單的沒(méi)有機(jī)房放在自家窗前的集群到一直到現(xiàn)在復(fù)雜的數(shù)據(jù)平臺(tái),這是一個(gè)不斷演進(jìn)的過(guò)程。
對(duì)小公司來(lái)說(shuō),大概自己找一兩臺(tái)機(jī)器架個(gè)集群算算,也算是大數(shù)據(jù)平臺(tái)了。在初創(chuàng)階段,數(shù)據(jù)量會(huì)很小,不需要多大的規(guī)模。這時(shí)候組件選擇也很隨意,Hadoop一套,任務(wù)調(diào)度用腳本或者輕量的框架比如luigi之類(lèi)的,數(shù)據(jù)分析可能hive還不如導(dǎo)入RMDB快。監(jiān)控和部署也許都沒(méi)盯祥族時(shí)間整理,用腳本或者輕量的監(jiān)控,大約是沒(méi)有g(shù)anglia、nagios,puppet什么的。這個(gè)階段也許算是技術(shù)積累,用傳統(tǒng)手段還是真大數(shù)據(jù)平臺(tái)都是兩可的事情,但是為了今后的擴(kuò)展性,這時(shí)候上Hadoop也許是不錯(cuò)的選擇。
當(dāng)進(jìn)入高速發(fā)展期,也許擴(kuò)容會(huì)跟不上計(jì)劃,不少公司可能會(huì)遷移平臺(tái)到云上,比如AWS阿里云什么的。小規(guī)模高速發(fā)展的平臺(tái),這種方式應(yīng)該是經(jīng)濟(jì)實(shí)惠的,省了運(yùn)維和管理的成本,擴(kuò)容比較省心。要解決的是選擇平臺(tái)本身提供的服務(wù),計(jì)算成本,打通數(shù)據(jù)出入的通道。整個(gè)數(shù)據(jù)平臺(tái)本身如果走這條路,可能就已經(jīng)基本成型了。走這條路的比較有名的應(yīng)該是netflix。
也有一個(gè)階段,你發(fā)現(xiàn)云服務(wù)的費(fèi)用太高,雖然省了你很多事,但是花錢(qián)嗖嗖的。幾個(gè)老板一合計(jì),再玩下去下個(gè)月工資發(fā)布出來(lái)了。然后無(wú)奈之下公司開(kāi)始往私有集群遷移。這時(shí)候你大概需要一群靠譜的運(yùn)維,幫你監(jiān)管機(jī)器,之前兩三臺(tái)機(jī)器登錄上去看看狀態(tài)換個(gè)磁盤(pán)什么的也許就不可能了,你面對(duì)的是成百上千臺(tái)主機(jī),有些關(guān)鍵服務(wù)必須保證穩(wěn)定,有些是數(shù)據(jù)節(jié)點(diǎn),磁盤(pán)三天兩頭損耗,網(wǎng)絡(luò)可能被壓得不堪重負(fù)。你需要一個(gè)靠譜的人設(shè)計(jì)網(wǎng)絡(luò)布局,設(shè)計(jì)運(yùn)維規(guī)范,架設(shè)監(jiān)控,值班團(tuán)隊(duì)走起7*24小時(shí)隨時(shí)準(zhǔn)備出臺(tái)。然后上面再有平臺(tái)組真的大數(shù)據(jù)平臺(tái)走起。
然后是選型,如果有技術(shù)實(shí)力,可以直接用社區(qū)的一整套,自己管起來(lái),監(jiān)控部署什么的自己走起。這個(gè)階段部署監(jiān)控和用戶(hù)管理什么的都不可能像兩三個(gè)節(jié)點(diǎn)那樣人肉搞了,配置管理,部署管理都需要專(zhuān)門(mén)的平臺(tái)和組件;定期Review用戶(hù)的作業(yè)和使用情況,決定是否擴(kuò)容,清理數(shù)據(jù)等等。否則等機(jī)器和業(yè)務(wù)進(jìn)一步增加,團(tuán)隊(duì)可能會(huì)死的很慘,疲于奔命,每天事故不斷,進(jìn)入惡性循環(huán)。
當(dāng)然有金錢(qián)實(shí)力的大戶(hù)可以找Cloudera,Hortonworks,國(guó)內(nèi)可以找華為星環(huán),會(huì)省不少事,適合非互聯(lián)網(wǎng)土豪。當(dāng)然互聯(lián)網(wǎng)公司也有用這些東西的,比如Ebay。
接下去你可能需要一些重量的組件幫你做一些事情。
比如你的宴宏數(shù)據(jù)接入,之前可能找個(gè)定時(shí)腳本或者爬log發(fā)包找個(gè)服務(wù)器接收寫(xiě)入HDFS,現(xiàn)在可能不行了,這些大概沒(méi)有高性能,沒(méi)有異常保障,你需要更強(qiáng)壯的解決方案,比如Flume之類(lèi)的。
你的業(yè)務(wù)不斷壯大,老板需要看的報(bào)表越來(lái)越多,需要訓(xùn)練的數(shù)據(jù)也需要清洗,你就需要任務(wù)調(diào)度,比如oozie或者azkaban之類(lèi)的,這些系統(tǒng)幫你管理關(guān)鍵任務(wù)的調(diào)度和監(jiān)控。
數(shù)據(jù)分析人員的數(shù)據(jù)大概可能漸漸從RDBMS搬遷到集群了,因?yàn)閭鹘y(tǒng)數(shù)據(jù)庫(kù)已經(jīng)完全hold不住了,但他們不會(huì)寫(xiě)代碼,所以你上馬了Hive。然后很多用戶(hù)用了Hive覺(jué)得太慢,你就又上馬交互分析系統(tǒng),比如Presto,Impala或者SparkSQL。
你的數(shù)據(jù)科學(xué)家需要寫(xiě)ML代碼,他們跟你說(shuō)你需要Mahout或者Spark MLLib,于是你也部署了這些。
至此可能數(shù)據(jù)平臺(tái)已經(jīng)是工程師的日常工作場(chǎng)所了,大多數(shù)業(yè)務(wù)都會(huì)遷移過(guò)來(lái)。這時(shí)候你可能面臨很多不同的問(wèn)題。
比如各個(gè)業(yè)務(wù)線(xiàn)數(shù)據(jù)各種數(shù)據(jù)表多的一塌糊涂,不管是你還是寫(xiě)數(shù)據(jù)的人大概都不知道數(shù)據(jù)從哪兒來(lái),接下去到哪兒去。你就自己搞了一套元數(shù)據(jù)管理的系統(tǒng)。
你分析性能,發(fā)現(xiàn)你們的數(shù)據(jù)都是上百Column,各種復(fù)雜的Query,裸存的Text格式即便壓縮了也還是慢的要死,于是你主推用戶(hù)都使用列存,Parquet,ORC之類(lèi)的。
又或者你發(fā)現(xiàn)你們的ETL很長(zhǎng),中間生成好多臨時(shí)數(shù)據(jù),于是你下狠心把pipeline改寫(xiě)成Spark了。
再接下來(lái)也許你會(huì)想到花時(shí)間去維護(hù)一個(gè)門(mén)戶(hù),把這些零散的組件都整合到一起,提供統(tǒng)一的用戶(hù)體驗(yàn),比如一鍵就能把數(shù)據(jù)從數(shù)據(jù)庫(kù)chua一下拉到HDFS導(dǎo)入Hive,也能一鍵就chua一下再搞回去;點(diǎn)幾下就能設(shè)定一個(gè)定時(shí)任務(wù),每天跑了給老板自動(dòng)推送報(bào)表;或者點(diǎn)一下就能起一個(gè)Storm的topology;或者界面上寫(xiě)幾個(gè)Query就能查詢(xún)Hbase的數(shù)據(jù)。這時(shí)候你的數(shù)據(jù)平臺(tái)算是成型了。
當(dāng)然,磕磕碰碰免不了。每天你都有新的問(wèn)題和挑戰(zhàn),否則你就要失業(yè)了不是?
你發(fā)現(xiàn)社區(qū)不斷在解決你遇到過(guò)的問(wèn)題,于是你們架構(gòu)師每天分出很多時(shí)間去看社區(qū)的進(jìn)展,有了什么新工具,有什么公司發(fā)布了什么項(xiàng)目解決了什么問(wèn)題,興許你就能用上。
上了這些亂七八糟的東西,你以為就安生了?Hadoop平臺(tái)的一個(gè)大特點(diǎn)就是坑多。尤其是新做的功能新起的項(xiàng)目。對(duì)于平臺(tái)組的人,老板如果知道這是天然坑多的平臺(tái),那他也許會(huì)很高興,因?yàn)楦M(jìn)社區(qū),幫忙修bug,一起互動(dòng)其實(shí)是很提升公司影響力的實(shí)情。當(dāng)然如果老板不理解,你就自求多福吧,招幾個(gè)老司機(jī),出了問(wèn)題能馬上帶路才是正道。當(dāng)然團(tuán)隊(duì)的技術(shù)積累不能不跟上,因?yàn)閿?shù)據(jù)平臺(tái)還是亂世,三天不跟進(jìn)你就不知道世界是什么樣了。任何一個(gè)新技術(shù),都是坑啊坑啊修啊修啊才完善的。如果是關(guān)鍵業(yè)務(wù)換技術(shù),那需要小心再小心,技術(shù)主管也要有足夠的積累,能夠駕馭,知道收益和風(fēng)險(xiǎn)。
你好,您應(yīng)該是景區(qū)或者文旅部門(mén)機(jī)構(gòu),這個(gè)問(wèn)題深入展開(kāi)不是一句兩句能講清楚地哈,簡(jiǎn)單說(shuō)一下目前現(xiàn)狀:目前全國(guó)范圍內(nèi)搭建的規(guī)范還沒(méi)有,各地從金額來(lái)說(shuō)幾千萬(wàn)到幾十萬(wàn)的方式都有,金額特別大的項(xiàng)目大概率是基建和裝修及硬件采買(mǎi)。如果是一個(gè)基礎(chǔ)設(shè)施完善的機(jī)構(gòu),基本是信息集成,包括票務(wù)、攝像、投訴、客流、停車(chē)場(chǎng)管理、廣播通信(一般在應(yīng)急平臺(tái)上)、口差洞碑等;如果基礎(chǔ)設(shè)施落后,個(gè)人建議也沒(méi)有必要花太多錢(qián)去搞基建,你建設(shè)的目的是為了應(yīng)用,直接找相應(yīng)的數(shù)據(jù)服務(wù)公司就好了,自己又不用培養(yǎng)數(shù)據(jù)方面的人才,直接使用數(shù)據(jù)服務(wù)很方便,每年付費(fèi)也比一下投入大量資金用于基建只有一個(gè)空殼子要好,現(xiàn)在國(guó)內(nèi)科技公司越來(lái)下沉行業(yè),大量的案例應(yīng)用服務(wù)基本滿(mǎn)足大部分客戶(hù)需求了,沒(méi)必要自己照搬一套在自己本地。據(jù)我了解百度騰訊阿里都有文旅服務(wù)的部門(mén),也有專(zhuān)注拆橋做虛御枯文旅數(shù)據(jù)市場(chǎng)服務(wù)的,好像叫海鰻,他們海字輩的企業(yè)一堆,都針對(duì)不同行業(yè)。我作為文旅管委會(huì)的從業(yè)者,還是建議直接買(mǎi)服務(wù),我們自己景區(qū)建的中心都沒(méi)有數(shù)據(jù),領(lǐng)導(dǎo)也走了,晾在那每人管了,太浪費(fèi)了。
關(guān)于并發(fā)推送數(shù)據(jù)庫(kù)設(shè)計(jì)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專(zhuān)業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專(zhuān)注成都高端網(wǎng)站建設(shè)定制開(kāi)發(fā)服務(wù),為客戶(hù)提供專(zhuān)業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開(kāi)發(fā),營(yíng)銷(xiāo)網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
文章題目:高效實(shí)現(xiàn)數(shù)據(jù)同步——并發(fā)推送數(shù)據(jù)庫(kù)設(shè)計(jì) (并發(fā)推送數(shù)據(jù)庫(kù)設(shè)計(jì))
文章轉(zhuǎn)載:http://fisionsoft.com.cn/article/djgcijp.html


咨詢(xún)
建站咨詢(xún)
