Объедините данные партии с данными, хранящимися в BigTable - PullRequest
3 голосов
/ 25 марта 2019

У меня растут данные в GCS, и у меня будет пакетное задание, которое позволяет, скажем, каждый день обрабатывать 1 миллион статей.Мне нужно получить дополнительную информацию для ключей от BigTable (содержащего миллиарды записей).Возможно ли сделать просто поиск с каждым элементом в операции карты?Имеет ли смысл группировать эти поиски и выполнять что-то вроде массового чтения?Или каков наилучший способ для этого варианта использования с использованием scio / beam?

Я обнаружил в Шаблон: большие таблицы поиска в потоковом режиме , что выполнение поиска по каждому запросу рекомендуется для потоковой передачи, однакоЯ не уверен, что не перегрузил бы BigTable пакетным заданием.

У вас, ребята, есть какие-либо общие или конкретные рекомендации, как справиться с этим вариантом использования?

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

Я помогал другим делать это раньше, но в базе данных Database / Beam. Вам нужно будет объединять ключи в пакеты для оптимальной производительности. Где-то между 25 - 100 ключами на партию будет иметь смысл. Если бы вы могли предварительно отсортировать список, чтобы ваши запросы с большей вероятностью обращались к меньшему количеству узлов Cloud Bigtable за запрос.

Вы можете использовать клиент Cloud Bigtable напрямую, просто убедитесь, что вы используете параметр «Использовать массовую», или используйте одноэлементный файл для кэширования клиента.

Это определенно повлияет на ваш кластер Cloud Bigtable, но я не могу сказать вам, сколько. Возможно, вам придется увеличить размер кластера, чтобы другие пользователи Cloud Bigtable не пострадали.

2 голосов
/ 09 апреля 2019

У нас есть помощник BigtableDoFn в Scio. Он не выполняет пакетную обработку, но, по крайней мере, абстрагирует обработку асинхронных запросов в DoFn, поэтому функция processElement / map не блокируется сетевой передачей.

...