美國公路系統對IT系統的借鑑

2021-07-25 10:02:56 字數 2358 閱讀 7810

本人於12年5月到美國出了兩周的公差,在此期間美國公路系統的發達高效給我留下了深刻的印象。

我們常聽說美國是車輪上的國家,從某種意義上來說,公路系統的效率直接影響了國民的勞動生產率,而公路網的健全也促進了城鄉之間的均衡。

這裡我試圖從效能的角度出發,記錄幾點美國公路系統對it系統的借鑑。

一、讀寫分離

美國公路主要分州際公路、州內公路、鄉村公路3個級別,大致對應中國的高速公路、國道、省道。

其中州際公路是卡車物流的要道,公路的兩個方向之間有很寬的隔離帶。州內公路雖然不一定設定隔離帶,但是至少通過劃線的方式區分行進方向。而鄉村公路由於車流量小,往往只有乙個車道,因此就沒必要區分和標註了。

用it的語言解讀,這個設計相當於讀寫分離。

從需求的角度出發,讀和寫的操作都是正常流程的一部分,從邏輯上來理解並沒有什麼特殊性。但是如果讀和寫針對同乙個資料庫物件,那麼我們就必須考慮併發性的影響:寫操作造成的鎖表會導致讀操作的等待。

按照物件導向的方**,如果讀和寫針對的是同乙個物件,那麼物件經過對映之後,所有操作針對的屬性都應該放在同乙個表中,那麼這種對映關係的邏輯是最簡潔的。

比如對於物件a,要讀屬性1,要寫屬性2,那麼經過對映,相當於讀表a的字段1,寫表a的字段2。由於這兩個屬性放在同乙個表中,那麼對欄位2的寫操作會造成表a中這一行資料的鎖保護,一直要等到鎖保護解除(commit/rollback)才能進行此行資料的讀操作。因此這種設計可能會對效能造成影響。

舉乙個生產系統的例子。

比如工單這個物件,有工單的元資訊如計畫生產日期、產品號、數量等,此外還有工單當前所在製造工位和庫位等資訊。

一旦進入製造環節,那麼工單的元資訊就不會有變動,對它的操作只有讀操作,但是很頻繁,因為每個工位都會讀取。

而工單的當前工位和庫位會不斷地變動,因此會不斷地寫,而每次的寫操作都會造成資料行的鎖保護,因此影響元資訊資料讀取。

因此從效能的角度出發,我們應該將工單的元資訊放在乙個表裡,而將當前工位和庫位等不斷更新的屬性放在另乙個或若干個表裡,從而實現了讀寫分離,這樣寫的操作不會影響讀的操作。

二、冗餘

美國公路系統中有3個例子,可以參照it系統中冗餘的概念進行理解。

1、城市公路**隔離帶

城市公路的2個走向之間有很寬的隔離帶,當道路有轉向時,隔離帶區域縮小,留出乙個車位的面積供左轉向車等待時停泊。

這樣設計的好處是轉向車不會影響直行車,畢竟直行車對總體流量的影響是最大的,因為直行車道的暢通是優先順序最高的。

2、小路等待區域

行駛在大路上的車輛,如果是綠燈,即使要經過路口,車輛的速度保持在正常行駛速度,司機不會減速行駛,因為大家都認為主路的行駛優先順序高。

那麼行駛在小路上的車輛,在駛入大路之前,可能會經過較長時間的等待,以避免和主道車輛爭搶。因此小路在接入大路之前,所設計的區域應允許較多車輛的臨時停留。

3、stop牌

車輛行駛在住宅或辦公區時,在與人車可能交匯的路口設定stop停車警示牌,司機必須在此牌前將汽車減速停車(即使路口無人),確認安全後再通過。

這個舉措表面上看起來是個明顯的冗餘,因為很多路口人車交匯的概率並不高,但是法律規定司機必須在此牌前停車,其意義何在呢?

這是因為事故出現的概率儘管很低,但是作為黑天鵝事件,是很難**的,並且一旦出現事故就會造成堵塞交通的瓶頸。

因此儘管大家都增加了道路停留時間,但是惡性事故出現的概率降低了,因此這個冗餘是合理的。

對於it系統來說,冗餘設計通常也是提公升效能的有效方法。

以資料庫查詢效能來說,通常影響資料庫查詢的有以下3種情況:

1、分組查詢

按照資料庫的設計原理,當進行分組查詢的時候,查詢的字段型別為整型時效率是最高的,如果用字元型字段進行分組,則查詢消耗時間會達成百上千倍之多。

因此當業務需要進行分組查詢的時候,首先我們要在資料庫裡增加冗餘字段,將要分組的字元型資料對映成整型資料,將資料按照整型字段彙總,然後將資料集與對映表關聯,最終得到我們需要的業務資料。

從業務的角度出發,這個增加的整型字段就是冗餘資料,但是它對提公升效能是不可或缺的。

2、全表掃瞄

全表掃瞄是乙個經常碰到的場景,會消耗大量的查詢時間,解決方法很簡單,是建立索引。

對於業務來說,索引也是冗餘資料,但是效果立竿見影。

3、遞迴查詢

對於遞迴的處理是資料庫的弱項,即使資料庫有一些處理遞迴的內建函式,但是往往還是會產生大量的查詢時間。

乙個常見的例子是bom的結構。通常bom採用多級父-子件關係來建立完整的結構,因此在還原時會有大量的遞迴查詢,隨著查詢數量和層級的增加,查詢時間會變得相當長。

對於此類查詢,乙個常見的解決辦法是提前做資料處理,在業務發生之前,將bom的結構查詢出來,並且以展開的平**式儲存到表或物化檢視中,這樣業務發生時直接查詢平表或物化檢視即可。

也將是說,利用業務發生前的冗餘時間,利用與業務邏輯無關的冗餘資料,提前處理從而減少業務發生時的查詢時間。

學會借鑑 乙個美國人對我的幫助

事情是這樣的,我在公司做的乙個winform應用程式出現了一些問題,上頭通過關係請了乙個在微軟工作了10多年的乙個美國人來做顧問,協助我進行專案的完成,在與他的實際接觸中雖然沒有給我技術上足夠的支援,但是從他尋找解決方案以及對專案的規劃學到了很多東西。在這裡我就特別分享一下他在微軟做專案的乙個exc...

spark streaming對系統時間的要求

linux的系統時間可以很容易的被修改 date s 那麼就需要保證所有機器的時間一致性。我們的線上機器是所有機器與一台校準器保持一致 usr sbin ntpdate 10.0.1.128 那麼應用伺服器的機器都是校準過的,但是我們的hadoop集群時間比較參差不齊,原因是因為cdh管理集群時需要...

SAP對ERP系統的概述

erp是enterprise resources planning的縮寫,最初是由美國的gartner group公司在90年代初。根據 gartner group 的定義,erp系統是 一套將財會 分銷 製造和其它業務功能合理整合的應用軟體系統 雖然說erp的概念目前已經不再新鮮,已經是乙個人人都...