Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если приложение передает данные с помощью клиентской библиотеки служба хранилища Azure для JavaScript, существуют несколько факторов, которые могут повлиять на скорость, использование памяти и даже на успех или сбой запроса. Чтобы максимизировать производительность и надежность передачи данных, важно заблаговременно настраивать параметры передачи клиентской библиотеки в зависимости от среды, в которой работает ваше приложение.
В этой статье рассматриваются некоторые рекомендации по настройке параметров передачи данных. При правильной настройке клиентская библиотека может эффективно распределять данные по нескольким запросам, что может привести к повышению скорости операций, использованию памяти и стабильности сети.
Настройка производительности для отправки
Правильная настройка параметров передачи данных является ключом к надежной производительности для отправки. Передача хранилища секционируется на несколько подтрансферов на основе значений этих аргументов. Максимальный поддерживаемый размер передачи зависит от версии операции и службы, поэтому обязательно проверьте документацию, чтобы определить ограничения. Дополнительные сведения об ограничениях размера передачи для хранилища BLOB-объектов см. в разделе "Целевые объекты масштабирования" для хранилища BLOB-объектов.
Настройка параметров передачи для отправки
Свойства можно настроить в BlockBlobParallelUploadOptions , чтобы повысить производительность операций передачи данных. В следующей таблице перечислены свойства, которые можно настроить, а также описание:
Собственность | Описание |
---|---|
blockSize |
Максимальный размер блока для передачи в каждом запросе в рамках процесса загрузки. Дополнительные сведения см. в разделе blockSize. |
maxSingleShotSize |
Если размер данных меньше или равен этому значению, он передается в один раз, а не разбивается на блоки. Если данные загружаются одним потоком, размер блока не учитывается. Значение по умолчанию — 256 МБ. При настройке этого свойства необходимо использовать значение меньше или равно 256 МБ. Дополнительные сведения см. в статье maxSingleShotSize. |
concurrency |
Максимальное количество параллельных запросов, выдаваемых в любое время в рамках одной параллельной передачи. |
Примечание.
Клиентские библиотеки будут использовать значения по умолчанию для каждого параметра передачи данных, если они не указаны. Эти значения по умолчанию обычно эффективны в среде центра обработки данных, но, скорее всего, не подходят для домашнего использования. Плохо настроенные параметры передачи данных могут привести к чрезмерно длительным операциям и даже времени ожидания запросов. Рекомендуется проактивно протестировать эти значения и настроить их на основе потребностей приложения и среды.
максимальный размер одиночного кадра
Значение maxSingleShotSize
— это максимальный размер BLOB в байтах для загрузки одним запросом.
Если размер данных меньше или равен maxSingleShotSize
, большой двоичный объект отправляется с одиночным запросом Put Blob. Если размер большого двоичного объекта больше maxSingleShotSize
или если размер большого двоичного объекта неизвестен, большой двоичный объект отправляется в блоки с помощью ряда вызовов Put Block , за которым следует Put Block List
.
Важно отметить, что указанное значение blockSize
не ограничивает заданное maxSingleShotSize
значение. Аргумент maxSingleShotSize
определяет отдельное ограничение размера для запроса на выполнение всей операции одновременно без подтрансферов. Часто бывает так, что вы хотите, чтобы maxSingleShotSize
было по крайней мере таким же большим, как значение blockSize
, если не больше. В зависимости от размера передачи данных этот подход может быть более производительным, так как передача выполняется с одним запросом и позволяет избежать затрат на несколько запросов.
Если вы не уверены, какое значение лучше всего подходит для вашей ситуации, безопасный параметр — задать maxSingleShotSize
то же значение, которое используется для blockSize
.
blockSize
Значение blockSize
— это максимальная длина передачи в байтах при загрузке блочного BLOB по частям.
Как упоминалось ранее, это значение не ограничиваетmaxSingleShotSize
, которое может быть больше, чем blockSize
.
Для эффективного перемещения данных клиентские библиотеки могут не всегда достигать значения blockSize
каждого трансфера. В зависимости от операции максимальный поддерживаемый размер передачи может отличаться. Дополнительные сведения об ограничениях размера передачи для хранилища BLOB-объектов см. на диаграмме в разделе Целевые показатели масштабируемости для хранилища BLOB-объектов.
Пример кода
В следующем примере кода показано, как задать значения для BlockBlobParallelUploadOptions и включить параметры в рамках вызова метода отправки. Значения, указанные в примерах, не предназначены для рекомендации. Чтобы правильно настроить эти значения, необходимо учитывать конкретные потребности приложения.
// Specify data transfer options
const uploadOptions = {
blockSize: 4 * 1024 * 1024, // 4 MiB max block size
concurrency: 2, // maximum number of parallel transfer workers
maxSingleShotSize: 8 * 1024 * 1024, // 8 MiB initial transfer size
}
// Create blob client from container client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
// Upload blob with transfer options
await blockBlobClient.uploadFile(localFilePath, uploadOptions);
В этом примере мы установили максимальное количество параллельных работников передачи на 2, используя свойство concurrency
. Мы также устанавливаем maxSingleShotSize
на значение 8 МиБ. Если размер блоба меньше 8 МиБ, для завершения операции загрузки требуется только один запрос. Если размер большого двоичного объекта превышает 8 МиБ, большой двоичный объект отправляется в блоки с максимальным размером 4 МиБ, который мы определяем в свойстве blockSize
.
Рекомендации по производительности отправки
Во время отправки клиентские библиотеки хранилища разделяют заданный поток отправки на несколько подзагрузок на основе параметров конфигурации, определенных BlockBlobParallelUploadOptions
. Каждая подзагрузка осуществляет отдельный вызов операции REST. В этом примере операция называется Put Block. Клиентская библиотека хранилища управляет этими операциями REST параллельно (в зависимости от параметров передачи) для завершения полной отправки.
Примечание.
Блочные большие двоичные объекты имеют максимальное количество блоков в 50 000 блоков. Максимальный размер вашего блочного BLOB может быть увеличен в 50 000 раз на block_size
.
Буферизация во время отправки
Уровень REST API хранилища не поддерживает возобновление операции загрузки REST, если она была прервана; отдельные передачи либо завершаются, либо теряются. Чтобы обеспечить надежность передачи данных, клиентские библиотеки хранилища буферизируют данные для каждого отдельного вызова REST перед началом загрузки. Помимо ограничений скорости сети, это поведение буферизации является причиной для рассмотрения меньшего значения blockSize
, даже при последовательной передаче. Уменьшение значения blockSize
уменьшает максимальный объем данных, буферизуемых по каждому запросу, и каждое повторение неудачного запроса. Если во время передачи данных определенного размера возникают частые тайм-ауты, снижение значения blockSize
уменьшает время буферизации и может привести к повышению производительности.
Настройка производительности для загрузки
Настройка параметров передачи данных для скачивания доступна только при использовании метода downloadToBuffer . Этот метод загружает объект Blob параллельно в буфер на основе значений, определенных в BlobDownloadToBufferOptions. Другие методы скачивания не поддерживают настройки параметров передачи данных.
Настройка параметров передачи для скачивания
При использовании downloadToBuffer
метода можно настроить следующие значения для скачивания:
- blockSize: максимальный размер блока для передачи каждого запроса.
- параллелизм: максимальное число параллельных запросов, выданных в любое время в рамках одной параллельной передачи.
Рекомендации по повышению производительности для загрузки
При загрузке с использованием downloadToBuffer
клиентские библиотеки хранилища разбивают заданный запрос загрузки на несколько субзагрузок на основании параметров конфигурации, определённых BlobDownloadToBufferOptions
. Каждая подзагрузка имеет собственный выделенный вызов операции REST. В зависимости от параметров передачи клиентские библиотеки управляют этими операциями REST параллельно, чтобы завершить полную загрузку.
Пример кода
В следующем примере кода показано, как задать значения для BlobDownloadToBufferOptions и включить параметры в рамках вызова метода downloadToBuffer. Значения, указанные в примерах, не предназначены для рекомендации. Чтобы правильно настроить эти значения, необходимо учитывать конкретные потребности приложения.
// Specify data transfer options
const downloadToBufferOptions = {
blockSize: 4 * 1024 * 1024, // 4 MiB max block size
concurrency: 2, // maximum number of parallel transfer workers
}
// Download data to buffer
const result = await client.downloadToBuffer(offset, count, downloadToBufferOptions);
Связанный контент
- Чтобы узнать больше о факторах, которые могут повлиять на производительность операций Azure Storage, ознакомьтесь со статьей «Задержка в хранилище Blob».
- Чтобы просмотреть список рекомендаций по проектированию для оптимизации производительности приложений с помощью хранилища BLOB-объектов, см. статью Контрольный Список Производительности и Масштабируемости для Хранилища BLOB-объектов.