Google Cloud Search SDK 包含 Google 提供的若干个配置参数,可供所有连接器使用。了解如何调整这些设置可以极大地简化数据索引。本指南列出了在索引编制过程中可能出现的几个问题以及用于解决这些问题的设置。
FullTraversalConnector 的索引吞吐量较低
下表列出了可提高 FullTraversalConnector 吞吐量的配置设置:
设置 | 说明 | 默认值 | 可尝试的配置更改 |
---|---|---|---|
traverse.partitionSize |
要在提取其他 APIOperation() 之前分批处理的 ApiOperation() 数量。SDK 会等到当前分区处理完毕后再提取其他项。此设置取决于可用内存量。较小的分区(例如大小为 50 或 100 的分区)需要的内存较少,但 SDK 需要等待的时间较长。 |
50 | 如果您的可用内存较多,可尝试将 partitionSize 增加到 1000 或更大值。 |
batch.batchSize |
一起进行批处理的请求数。在分区结束时,SDK 会等待分区中的所有批处理请求得到处理。批次越大,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 | 请尝试以 10 的倍数为增量增加 threadPoolSize 。 |
最后,考虑使用 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 秒。 |