Чтение действительно больших BLOB-объектов без загрузки их в Google Cloud (потоковая передача?)
Пожалуйста помоги!
[+] Что у меня есть: много капель в каждом ведре. Размер BLOB-объектов может варьироваться от менее килобайта до множества гигабайт.
[+] Что я пытаюсь сделать: мне нужно иметь возможность либо передавать данные в этих BLOB-объектах (например, буфер размером 1024 или что-то в этом роде), либо читать их порциями определенного размера в Python. Дело в том, что я не думаю, что могу просто выполнить bucket.get_blob(), потому что, если бы этот BLOB-объект был TeraByte, я бы не смог иметь его в физической памяти.
[+] Что я на самом деле пытаюсь сделать: проанализировать информацию внутри блобов, чтобы определить ключевые слова
[+] То, что я прочитал: много документации о том, как писать в облаке Google в виде кусков, а затем использовать compose для сшивания его вместе (не полезно вообще)
Много документации по функциям предварительной выборки Java (должен быть Python)
Облачные API Google
Если бы кто-нибудь мог указать мне правильное направление, я был бы очень благодарен! Спасибо
1 ответ
Таким образом, я нашел способ сделать это, создав файл-подобный объект в python, а затем используя API-интерфейс Google-Cloud.download_to_file() с этим файловым объектом.
Это по сути потоковые данные. код Python выглядит примерно так
def getStream(blob):
stream = open('myStream','wb', os.O_NONBLOCK)
streaming = blob.download_to_file(stream)
Флаг os.O_NONBLOCK позволяет читать во время записи в файл. Я до сих пор не проверял это с действительно большими файлами, поэтому, если кто-нибудь знает лучшую реализацию или видит потенциальную ошибку с этим, пожалуйста, прокомментируйте. Спасибо!