後端產品經理筆記:數據傳輸和寫入

產品經理 腳本語言 Excel 科技 人人都是產品經理 2018-11-28

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

後端產品經理筆記:數據傳輸和寫入

本文繼數據庫之後,梳理了數據交互筆記,有興趣的朋友可以一起交流。

一、跨服務器數據傳輸

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

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

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

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

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

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

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

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

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

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

比如下圖:每小時/次取對方表中第一頁最新的50條數據。超過的數據下個小時繼續取。

後端產品經理筆記:數據傳輸和寫入

(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個)則下次繼續抓。直到三次都未取到。則不再補救。

二、數據寫入

(1)先落地到中間表

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

好處是,正向數據:可以異步處理,A——>中間表——>最終表,互相不影響。逆向數據:一旦數據異常,則方便追溯原因。

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

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

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

產品經理告訴開發加日誌,開發就會再後臺加,因為log4j開源代碼定義了5個主要級別的log:FATAL、ERROR、WARN、INFO、DEBUG,一般可以配置INFO或DEBUG級別的日誌。如果需要保留的時間長,則可以將其保存到本地。

本地的需求可以展示給用戶看,比如可以從以下維度展示:

(4)單進程鎖

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

另外在跑數據的規則上面,不要設置8點跑更新時間7點的,一旦小故障,就容易漏取。正確的要麼是更新時間為當前之前更久的,要麼就以狀態來限定, 比如:取is_use為否的。

(5)同步基礎數據的時候 是否提前過濾

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

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

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

本文由 @ 環滁皆山也 原創發佈於人人都是產品經理。未經許可,禁止轉載

題圖來自 Pexels,基於 CC0 協議

相關推薦

推薦中...