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 |
建立索引 API 要求的讀取逾時。 | 120 秒。 |