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 要求模式 (ASYNCHRONOUS
或 SYNCHRONOUS
)。
如要進一步瞭解設定檔參數,請參閱Google 提供的設定參數。
ListTraversalConnector 的索引處理量偏低
根據預設,實作 ListTraversalConnnector 的連接器會使用單一遍歷器為項目建立索引。如要提高索引編製輸送量,您可以建立多個遍歷器,每個遍歷器都有自己的設定,專注於特定項目狀態 (NEW_ITEM
、MODIFIED
等)。下表列出可提升輸送量的設定:
設定 | 說明 | 預設 | 可嘗試的設定變更 |
---|---|---|---|
repository.traversers = t1, t2, t3, ... | 建立一或多個個別的遍歷器,其中 t1, t2, t3, ... 是每個遍歷器的專屬名稱。每個具名遍歷器都有自己的設定集,並使用遍歷器的專屬名稱識別,例如 traversers.t1.hostload 和 traversers.t2.hostload | 一個遍歷器 | 使用這項設定新增其他遍歷器 |
traversers.t1.hostload = n | 識別要用於同時為項目建立索引的執行緒數量 n。 | 5 | 您可以根據想對存放區施加的負載量,嘗試調整 n。請從 10 以上的值開始。 |
schedule.pollQueueIntervalSecs = s | 識別重新輪詢前等待的秒數 s。只要 API 在輪詢回應中傳回項目,內容連接器就會持續輪詢項目。如果輪詢回應為空白,連接器會等待 s 秒,然後再試一次。這項設定僅供 ListingConnector 使用 | 10 | 請嘗試將值調低至 1。 |
traverser.t1.pollRequest.statuses = status1, status2, … | 指定要建立索引的項目狀態,包括 status1、status2、…。舉例來說,將 status1 設為 NEW_ITEM ,並將 status2 設為 MODIFIED ,可指示遍歷器 t1 只為具有這些狀態的項目建立索引。 | 一個遍歷器會檢查所有狀態 | 您可以實驗讓不同的遍歷器輪詢不同的狀態。 |
如要進一步瞭解設定檔參數,請參閱Google 提供的設定參數。
上傳大型檔案時,SDK 逾時或中斷
如果上傳大型檔案時發生 SDK 逾時或中斷情形,請使用 traverser.timeout=s
指定較長的逾時時間 (其中 s = 秒數)。這個值會指出工作執行緒處理項目所需的時間長度。SDK 中,遍歷器執行緒的預設逾時時間為 60 秒。此外,如果個別 API 要求發生逾時問題,請使用下列方法增加要求逾時值:
要求逾時參數 | 說明 | 預設 |
---|---|---|
indexingService.connectTimeoutSeconds |
建立索引 API 要求的連線逾時時間。 | 120 秒。 |
indexingService.readTimeoutSeconds |
為 Indexing API 要求設定讀取逾時。 | 120 秒。 |