調整連接器設定

Google Cloud Search SDK 包含多個 Google 提供的設定參數,所有連接器都會使用這些參數。瞭解如何調整這些設定,可大幅簡化資料的索引處理作業。本指南列出索引期間可能出現的幾個問題,以及用來解決這些問題的設定。

FullTraversalConnector 的索引處理量偏低

下表列出可改善 FullTraversalConnector 傳輸量的設定:

設定 說明 預設 可嘗試的設定變更
traverse.partitionSize 在擷取其他 APIOperation() 之前,要以批次處理的 ApiOperation() 數量。SDK 會等待目前的分割區處理完畢,再擷取其他項目。這項設定取決於可用的記憶體量。較小的區隔大小 (例如 50 或 100) 需要較少記憶體,但會讓 SDK 等待的時間變長。 50 如果您有大量可用的記憶體,請嘗試將 partitionSize 增加到 1000 以上。
batch.batchSize 一起分批處理的要求數量。分區結束後,SDK 會等待分區中的所有批次要求處理完畢。批次檔案越大,等待時間就會越長。 10 請嘗試降低批次大小。
batch.maxActiveBatches 可同時執行的批次數量上限。 20 如果您降低 batchSize,應根據下列公式調整 maxActiveBatches

maxActiveBatches = (partitionSize / batchSize) + 50。舉例來說,如果 partititionSize 為 1000,batchSize 為 5,maxActiveBatches 應為 250。額外的 50 是重試要求的緩衝區。這項增加可讓連接器在未阻斷的情況下,將所有要求分批處理。
traverse.threadPoolSize 連接器建立的執行緒數量,以便進行平行處理。單一疊代器會以序列方式擷取作業 (通常為 RepositoryDoc 物件),但 API 呼叫會使用 threadPoolSize 個執行緒並行處理。每個執行緒一次處理一個項目。預設值為 50,最多只能同時處理 50 個項目,且處理個別項目 (包括索引要求) 大約需要 4 秒。 50 請嘗試將 threadPoolSize 乘以 10 的倍數。

最後,建議您使用 setRequestMode() 方法變更 API 要求模式 (ASYNCHRONOUSSYNCHRONOUS)。

如要進一步瞭解設定檔參數,請參閱「Google 提供的設定參數」。

ListTraversalConnector 的索引處理量偏低

根據預設,實作 ListTraversalConnnector 的連接器會使用單一穿越器為項目建立索引。如要提高索引處理量,您可以建立多個穿越器,每個穿越器都會專注於特定項目狀態 (NEW_ITEMMODIFIED 等) 的設定。下表列出可改善吞吐量的設定:

設定說明預設可嘗試的設定變更
repository.traversers = t1, t2, t3, ...建立一或多個個別的 traverser,其中 t1, t2, t3, ... 是每個個別名稱。每個命名檢查器都有一組設定,可透過檢查器的專屬名稱識別,例如 traversers.t1.hostloadtraversers.t2.hostload一個檢查器使用這項設定新增其他檢索器
traversers.t1.hostload = n指出要用於同時為項目建立索引的執行緒數量 n5根據您想在存放區放置的工作負載量,嘗試調整 n。一開始可先設定 10 以上的值。
schedule.pollQueueIntervalSecs = s指定重新輪詢前等待的秒數 (s)。只要 API 在輪詢回應中傳回項目,內容連接器就會繼續輪詢項目。當輪詢回應為空白時,連接器會等待 s 秒後再重試。這項設定僅供 ListingConnector 使用10請嘗試將其調低至 1。
traverser.t1.pollRequest.statuses = status1, status2, …指定要索引項目的狀態:status1status2。舉例來說,將 status1 設為 NEW_ITEM,並將 status2 設為 MODIFIED,即可指示檢索器 t1 僅索引具有這些狀態的項目。一個檢查器會檢查所有狀態嘗試使用不同的檢查器輪詢不同的狀態。

如要進一步瞭解設定檔參數,請參閱「Google 提供的設定參數」。

上傳大型檔案時,SDK 逾時或中斷

如果您在上傳大型檔案時遇到 SDK 逾時或中斷情形,請使用 traverser.timeout=s 指定較長的逾時時間 (其中 s = 秒數)。這個值會指出 worker 執行緒處理項目的時間長度。SDK 中跨越器執行緒的預設逾時時間為 60 秒。此外,如果個別 API 要求逾時,請使用下列方法增加要求逾時值:

要求逾時參數 說明 預設
indexingService.connectTimeoutSeconds 索引 API 要求的連線逾時。 120 秒。
indexingService.readTimeoutSeconds Indexing API 要求的讀取逾時時間。 120 秒。