1. 程式人生 > >百度學習筆記--數據傳輸和寫入

百度學習筆記--數據傳輸和寫入

網盤 公司 本地 方便 sftp服務器 排隊 最好的 異常情況 問題

註:轉載於百度-百家號-人人都是產品經理

“”在後端數據量大起來之後,大部分的工作都是在玩數據。就像一捧沙子,左手換到右手,右手指縫間分流而出,再由另一雙手接住。所以作為產品經理,不不僅要知道數據從哪來,還要理清楚獲取數據之後的運算邏輯,異常規則,以及異常情況,數據日誌等等“”

一、跨服務器數據傳輸

(1)公司的後端數據之所以在不同的數據庫上,本質是為了解耦數據,提高單個數據庫的運算速度。多個子系統之間的交互,其本質就是數據傳輸。

數據傳輸的方式:MQ(隊列)、HTTP接口,otter,爬取,導入

(2)MQ適用於公司內部,數據量大,規律性強,批量往來的數據。一般的配置是一方推出增量數據,另一方被動消費,像排隊一樣,不用設定頻率。

(3)http接口是最常用的。加interface,也叫做protocol。

如果數據源是一缸水,那麽接口就像是鑿了一個口。所有接口必須是在數據源這邊,由數據放定義接口。

接口規則就像過濾器一樣,設定推送前的篩選。轉化等運算規則、這就是接口的核心內容。

接口交互數據可以是主動推送,也可以是請求獲取。

  • 主動推送一般是數據生產法一旦更新,則觸發推送,將所需字段對應值傳遞過去。
  • 請求獲取就是數據需求方傳遞請求參數(請求參數一般是一個條件或幾個條件)數據生產方則按照協議響應,給出滿足條件的數據到請求方(也就是返回參數)

(4)接口定義是開發的事情,但是產品需要確定出範圍:

 接口定義的規則是什麽?傳參合返回參數是什麽?重復傳參時是跳過還是再次獲取(一般是再次獲取)?必傳參數是什麽?是否回傳接收結果給數據生產方?

(5)確保接口獲取的數據及時

除了生產數據需要及時向下遊推送之外,還有基礎數據的更新也需要及時給下遊同步,有時要做到同時。

方法是兩種:觸發式和定時腳本

1、觸發式就是一旦一個參數值滿足條件則觸發。

2、腳本式一般用在請求獲取數據的時候。因為不知道數據源商貿時候更新,所以一般用定時腳本執行請求任務。

請求的頻率需要與更新的頻率相協調,比如:每次取6小時內更新的數據。每2小時取一次,則不會有問題。但是若每天取一次就會有漏掉,也就是取數據的頻率要高於更新頻率。

(6)數據量大的時候,可以用otter:

  • 方案1:直接請求對方的接口:數據多的時候請求就多,會占資源。
  • 方案2:為保證數據本身及時,otter是最好的,也就是庫對庫的傳輸。

otter方法:

1.數據全在一個表中。

2.本地庫建一個相同的表。

(7)爬取數據

一些第三方公司為了保密,會把文件存在網盤或網頁上,比如:第三方支付公司與協議公司約定好賬號密碼,登錄到SFTP篩選出需要的數據然後解析後保存到本地,這也實現了一個服務器之間的轉移。

(8)導入:數據量大的,且有規則數據也可以通過導入的方式。

文檔一般用csv格式,文件較小,兼容性好,然後需要定義好excel表格對於字段的關系即可。上傳時需要對文件檢驗,檢驗出錯就全部不予導入。

(9)爬取第三方數據防止丟包機制

案例:到SFTP服務器抓取並解析字段,寫入數據表。

方案:

1.斷抓補抓:例如,4號抓修改時間為3號的數據。5號斷抓,則6號抓取4,5號的數據。7號抓取6號的數據。

2.抓空補抓:網關的每次抓取若抓空(獲取的數據為0)則下次繼續抓。直到3次都未取到,則不再補救。

二、數據寫入

(1)先落地到中間表

如果獲取後還要在本地進行規制運算,則最好先落地到中間表,再由中間表寫入最終表。比如:從A系統獲取的數據取到B系統,要進行分揀後再寫入B表。那麽最好先落地到B系統的中間表,然後再由中間表寫入目標表。

好處是,正向數據:可以異步處理,A---->中間表---->最終表,互不影響。

    逆向數據:一旦數據異常,則方便追溯原因。

(2)去重規則:設置去重規則,以便再重復獲取數據時更新、插入或者跳過

註意去重規則一旦改變,則需要考慮到歷史數據對新數據的影響,因為二者的判重維度不一樣,可能會交叉。

(3)數據日誌:目的是記錄數據的來龍去脈,追溯分析bug

(4)單進程鎖

腳本執行的頻率的時候,為了保證數據是按照單進程執行,不交疊,就要設置單進程鎖。比如:一小時一次,8點沒執行9點就不要執行。

另外在跑數據的規則上面,不要設置8點跑->更新時間是7點的數據,一旦小故障,就容易漏取。正確的要麽是更新時間為之前的很長一段時間,要麽就以狀態來判定。

比如:A系統維護了用戶基礎信息(其中有個狀態為是否啟用),B系統取用,但不做數據維護,只用啟用狀態的能用,那麽是否只取啟用狀態的到B,還是兩者狀態都取。

答案是:在數據量差異不大的情況下,取全量

原因之一:若啟用狀態的用戶忽然被A系統禁用,那麽可能該用戶在B系統的生成數據報錯,這時候到中間表看狀態就可以看出問題,而不需要跨系統或跨部門溝通查詢。

百度學習筆記--數據傳輸和寫入