update zh-tw content

This commit is contained in:
Gang Yin 2025-06-05 12:45:18 +08:00
parent 6b68c21df1
commit 5965bf0a21
4 changed files with 4 additions and 4 deletions

View File

@ -171,7 +171,7 @@ Unix 工具的另一個特點是使用標準輸入(`stdin`)和標準輸出
如果需要,程式仍然可以直接讀取和寫入檔案,但 Unix 方法在程式不關心特定的檔案路徑、只使用標準輸入和標準輸出時效果最好。這允許 shell 使用者以任何他們想要的方式連線輸入和輸出;該程式不知道或不關心輸入來自哪裡以及輸出到哪裡。(人們可以說這是一種 **松耦合loose coupling****晚期繫結late binding**【15】或 **控制反轉inversion of control**【16】。將輸入 / 輸出佈線與程式邏輯分開,可以將小工具組合成更大的系統。 如果需要,程式仍然可以直接讀取和寫入檔案,但 Unix 方法在程式不關心特定的檔案路徑、只使用標準輸入和標準輸出時效果最好。這允許 shell 使用者以任何他們想要的方式連線輸入和輸出;該程式不知道或不關心輸入來自哪裡以及輸出到哪裡。(人們可以說這是一種 **松耦合loose coupling****晚期繫結late binding**【15】或 **控制反轉inversion of control**【16】。將輸入 / 輸出佈線與程式邏輯分開,可以將小工具組合成更大的系統。
你甚至可以編寫自己的程式,並將它們與作業系統提供的工具組合在一起。你的程式只需要從標準輸入讀取輸入,並將輸出寫入標準輸出,它就可以加入資料處理的管道中。在日誌分析示例中,你可以編寫一個將 Usage-Agent 字串轉換為更靈敏的瀏覽器識別符號,或者將 IP 地址轉換為國家程式碼的工具,並將其插入管道。`sort` 程式並不關心它是否與作業系統的另一部分或者你寫的程式通訊。 你甚至可以編寫自己的程式,並將它們與作業系統提供的工具組合在一起。你的程式只需要從標準輸入讀取輸入,並將輸出寫入標準輸出,它就可以加入資料處理的管道中。在日誌分析示例中,你可以編寫一個將 User-Agent 字串轉換為更靈敏的瀏覽器識別符號,或者將 IP 地址轉換為國家程式碼的工具,並將其插入管道。`sort` 程式並不關心它是否與作業系統的另一部分或者你寫的程式通訊。
但是,使用 `stdin``stdout` 能做的事情是有限的。需要多個輸入或輸出的程式雖然可能卻非常棘手。你沒法將程式的輸出管道連線至網路連線中【17,18】[^iii] 。如果程式直接開啟檔案進行讀取和寫入,或者將另一個程式作為子程序啟動,或者開啟網路連線,那麼 I/O 的佈線就取決於程式本身了。它仍然可以被配置(例如透過命令列選項),但在 Shell 中對輸入和輸出進行佈線的靈活性就少了。 但是,使用 `stdin``stdout` 能做的事情是有限的。需要多個輸入或輸出的程式雖然可能卻非常棘手。你沒法將程式的輸出管道連線至網路連線中【17,18】[^iii] 。如果程式直接開啟檔案進行讀取和寫入,或者將另一個程式作為子程序啟動,或者開啟網路連線,那麼 I/O 的佈線就取決於程式本身了。它仍然可以被配置(例如透過命令列選項),但在 Shell 中對輸入和輸出進行佈線的靈活性就少了。

View File

@ -222,7 +222,7 @@ Unix 和關係資料庫以非常不同的哲學來處理資訊管理問題。Uni
#### 分拆系統vs整合系統 #### 分拆系統vs整合系統
如果分拆確實成為未來的方式,它也不會取代目前形式的資料庫 —— 它們仍然會像以往一樣被需要。為了維護流處理元件中的狀態,資料庫仍然是需要的,並且為批處理和流處理器的輸出提供查詢服務(請參閱 “[批處理工作流的輸出](ch10.md#批處理工作流的輸出)” 與 “[流處理](ch11.md#流處理)”。專用查詢引擎對於特定的工作負載仍然非常重要例如MPP 資料倉庫中的查詢引擎針對探索性分析查詢進行了最佳化,並且能夠很好地處理這種型別的工作負載(請參閱 “[Hadoop 與分散式資料庫的對比](ch10.md#Hadoop與分散式資料庫的對比)” 如果分拆確實成為未來的方式,它也不會取代目前形式的資料庫 —— 它們仍然會像以往一樣被需要。為了維護流處理元件中的狀態,資料庫仍然是需要的,並且為批處理和流處理器的輸出提供查詢服務(請參閱 “[批處理工作流的輸出](ch10.md#批處理工作流的輸出)” 與 “[流處理](ch11.md#流處理)”。專用查詢引擎對於特定的工作負載仍然非常重要例如MPP 資料倉庫中的查詢引擎針對探索性分析查詢進行了最佳化,並且能夠很好地處理這種型別的工作負載(請參閱 “[Hadoop 與分散式資料庫的對比](ch10.md#Hadoop與分散式資料庫的對比)”
執行幾種不同基礎設施的複雜性可能是一個問題每種軟體都有一個學習曲線配置問題和操作怪癖因此部署儘可能少的移動部件是很有必要的。比起使用應用程式碼拼接多個工具而成的系統單一整合軟體產品也可以在其設計應對的工作負載型別上實現更好、更可預測的效能【23】。正如在前言中所說的那樣為了不需要的規模而構建系統是白費精力而且可能會將你鎖死在一個不靈活的設計中。實際上這是一種過早最佳化的形式。 執行幾種不同基礎設施的複雜性可能是一個問題每種軟體都有一個學習曲線配置問題和操作怪癖因此部署儘可能少的移動部件是很有必要的。比起使用應用程式碼拼接多個工具而成的系統單一整合軟體產品也可以在其設計應對的工作負載型別上實現更好、更可預測的效能【23】。正如在前言中所說的那樣為了不需要的規模而構建系統是白費精力而且可能會將你鎖死在一個不靈活的設計中。實際上這是一種過早最佳化的形式。

View File

@ -437,7 +437,7 @@ WHERE family = 'Sharks'
GROUP BY observation_month; GROUP BY observation_month;
``` ```
`date_trunc('month'timestamp)` 函式用於確定包含 `timestamp` 的日曆月份,並返回代表該月份開始的另一個時間戳。換句話說,它將時間戳舍入成最近的月份。 `date_trunc('month', timestamp)` 函式用於確定包含 `timestamp` 的日曆月份,並返回代表該月份開始的另一個時間戳。換句話說,它將時間戳舍入成最近的月份。
這個查詢首先過濾觀察記錄,以只顯示鯊魚家族的物種,然後根據它們發生的日曆月份對觀察記錄果進行分組,最後將在該月的所有觀察記錄中看到的動物數目加起來。 這個查詢首先過濾觀察記錄,以只顯示鯊魚家族的物種,然後根據它們發生的日曆月份對觀察記錄果進行分組,最後將在該月的所有觀察記錄中看到的動物數目加起來。

View File

@ -489,7 +489,7 @@ Actor 模型是單個程序中併發的程式設計模型。邏輯被封裝在 a
三個流行的分散式 actor 框架處理訊息編碼如下: 三個流行的分散式 actor 框架處理訊息編碼如下:
* 預設情況下Akka 使用 Java 的內建序列化,不提供向前或向後相容性。但是,你可以用類似 Prototol Buffers 的東西替代它從而獲得滾動升級的能力【50】。 * 預設情況下Akka 使用 Java 的內建序列化,不提供向前或向後相容性。但是,你可以用類似 Protocol Buffers 的東西替代它從而獲得滾動升級的能力【50】。
* Orleans 預設使用不支援滾動升級部署的自定義資料編碼格式要部署新版本的應用程式你需要設定一個新的叢集將流量從舊叢集遷移到新叢集然後關閉舊叢集【51,52】。像 Akka 一樣,可以使用自定義序列化外掛。 * Orleans 預設使用不支援滾動升級部署的自定義資料編碼格式要部署新版本的應用程式你需要設定一個新的叢集將流量從舊叢集遷移到新叢集然後關閉舊叢集【51,52】。像 Akka 一樣,可以使用自定義序列化外掛。
* 在 Erlang OTP 中對記錄模式進行更改是非常困難的儘管系統具有許多為高可用性設計的功能。滾動升級是可能的但需要仔細計劃【53】。一個新的實驗性的 `maps` 資料型別2014 年在 Erlang R17 中引入的類似於 JSON 的結構可能使得這個資料型別在未來更容易【54】。 * 在 Erlang OTP 中對記錄模式進行更改是非常困難的儘管系統具有許多為高可用性設計的功能。滾動升級是可能的但需要仔細計劃【53】。一個新的實驗性的 `maps` 資料型別2014 年在 Erlang R17 中引入的類似於 JSON 的結構可能使得這個資料型別在未來更容易【54】。