Как загрузить большой файл SQLite в хранилище объектов с помощью OpenStack Swift (через Python)
У меня есть экземпляр Object Storage в IBM Bluemix, и я пытаюсь загрузить файл SQLite размером ~32 ГБ. Вот мой код Python, который использует OpenStack Swift API (с удаленными учетными данными):
import swiftclient
conn = swiftclient.Connection(key="pw",authurl="url",auth_version='3',os_options={"project_id": "project_id","user_id": "user_id","region_name": "region"})
container_name = 'containerName'
file_name = 'file.sqlite'
with open(file_name, 'rb') as sqlite_file:
conn.put_object(container_name,file_name,sqlite_file)
Я проверил этот код с небольшим HTML-файлом, и он загрузил без проблем. Когда я изменил файл на файл SQLite, он работал в течение> 5 часов и в конечном итоге выдал ошибку "reports.exceptions.ConnectionError: [Errno 32] Broken pipe". Что я делаю неправильно?
1 ответ
Вам нужно будет прочитать о поддержке Swift DLO/SLO и манифестах. Вот сообщение в блоге, которое может помочь с контекстом того, что является манифестами и различиями между поддержкой статических крупных объектов и динамических крупных объектов.
По сути, я бы рекомендовал следующий подход:
- Загрузите / установите двоичный файл Python-SwiftClient
- Используйте его команду загрузки вместе с вашими учетными данными хранилища объектов из службы Bluemix. В приведенной выше статье об этом обсуждается этот подход. Обратите внимание на команду загрузки, использование флага --use-slo и возможность определять размер создаваемых объединенных сегментов. Грубо говоря, вызов будет выглядеть так:
$ swift --os-auth-url=https://identity.open.softlayer.com/v3 --os-user- id=some_hex_value --os-password="weird_characters" --os-project-id=another_hex_value --os-region-name=dallas -V 3 upload my_object_storage_container_name -S int_seg_size_in_bytes my_local_large_file_with_some_extension --use-slo
my_local_large_file_with_some_extension segment 3
my_local_large_file_with_some_extension segment 1
my_local_large_file_with_some_extension segment 2
my_local_large_file_with_some_extension segment 0
my_local_large_file_with_some_extension/1443450560.000000/160872806/52428800/00000002
my_local_large_file_with_some_extension/1443450560.000000/160872806/52428800/00000003
my_local_large_file_with_some_extension/1443450560.000000/160872806/52428800/00000001
my_local_large_file_with_some_extension/1443450560.000000/160872806/52428800/00000000
my_local_large_file_with_some_extension
Удачи.