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 будет индексировать только элементы с этими статусами. | Один обработчик проверяет все статусы | Поэкспериментируйте, опрашивая разных traverser на предмет разных статусов. |
Дополнительную информацию о параметрах файла конфигурации см. в разделе «Параметры конфигурации, предоставленные Google» .
Тайм-ауты или прерывания SDK при загрузке больших файлов
Если при загрузке больших файлов у вас возникли тайм-ауты или прерывания SDK, укажите большее время ожидания с помощью traverser.timeout= s
(где s = количество секунд). Это значение определяет, сколько времени рабочие потоки должны обрабатывать элемент. Тайм-аут по умолчанию в SDK составляет 60 секунд для потоков traverser. Кроме того, если у вас возникли тайм-ауты отдельных запросов API, используйте следующие методы для увеличения значений тайм-аута запросов:
Параметр тайм-аута запроса | Описание | По умолчанию |
---|---|---|
indexingService.connectTimeoutSeconds | Тайм-аут соединения для индексации запросов API. | 120 секунд. |
indexingService.readTimeoutSeconds | Истекло время ожидания для индексации запросов API. | 120 секунд. |