# #php #google-bigquery #bigdata
Вопрос:
У меня есть простой сокращатель URL (PHP), в котором я отслеживаю клики. Каждый клик сохраняется в базе данных (в настоящее время mysql) в отдельной строке, потому что мне также нужна информация об устройстве, стране и т.д.
Это отлично работает, но когда таблица растет и растет, запросы становятся медленными, поэтому я хочу перейти на BigQuery (я знаю, что они во многом отличаются, но я думаю, что это то, что мне нужно?).
Я знаю, что выбор может занять несколько секунд в BigQuery. НО — я не могу найти информацию о том, насколько быстры вставки? Могу ли я использовать его так же, как с традиционной базой данных, enter -> save click to DB -> redirect url -> exit process
или эта вставка также медленная, и мне нужно разработать (или использовать для этого какое-либо существующее решение/сервис) что-то, чтобы задерживать вставки или вставлять несколько одновременно с функцией пакетной/потоковой передачи в BigQuery (мне трудно понять ее назначение). Может enter -> put visit to Redis cache -> redirect -> exit
быть, а затем сохранить это в БД как отдельное задание?
Ответ №1:
Вы можете проверить политику квот для потоковых вставок. По умолчанию вставка потока BigQuery позволяет использовать 1 ГБ в секунду для каждого проекта, если идентификатор вставки не заполнен. С помощью insertId он обеспечит ограничение по умолчанию в 500 000 строк в секунду для каждого проекта в мультирегионах США и ЕС. Документ BigQuery предполагает, что если у вас есть приложение, которое собирает большой объем данных в режиме реального времени, потоковые вставки могут быть хорошим выбором.
Скорость вставок BigQuery зависит от многих динамических факторов, и нет никакой контрольной информации о скорости. Вы можете самостоятельно провести тест, чтобы определить скорость для вашей среды. В общем, потоковая вставка BigQuery предназначена для небольшого обновления данных в режиме реального времени, она легкая и быстрая. Пакетная или загрузка, с другой стороны, принимает загрузку файлов и предназначена для более крупных и тяжелых обновлений. Вам нужно будет сохранить все новые строки в файле, а затем загрузить файл в BigQuery.
Что касается вашего второго вопроса, то существует компромисс между скоростью и объемом. Вы можете выбрать либо вариант, либо гибрид, в зависимости от ваших требований. Лучше всего запустить тест, чтобы выяснить, какой вариант лучше всего подходит для вашей среды. Если вы делаете это внутри потока приложений , то обновления происходят в режиме реального времени, но вы можете не выполнять слишком много обновлений из-за ограничений квот. Если вы делаете это в фоновом режиме, обновления выполняются в меньшем объеме в режиме реального времени, но вы можете воспользоваться преимуществами пакетной загрузки и вставить гораздо больше строк в BigQuery.
Комментарии:
1. Спасибо за советы, но, к сожалению, это не дает полного ответа на мой вопрос. Я до сих пор не знаю, как быстро выполняется вставка и следует ли это делать внутри потока приложений или в фоновом режиме, что и было главным пунктом этого вопроса 😉 Извините, если это было недостаточно ясно
2. Привет @norr, я обновил ответ на основе вашего комментария.