Storage Synchronization

Synchronizing data with long-term storage and achieving optimal performance using Hub.

Without with

For code written outside of a with code block, whenever you update any aspect of a dataset, the update is immediately pushed to the dataset's long-term storage location. Due to the sheer number of discreet write operations, there may be a significant increase in runtime. In the example below, an update is pushed to AWS S3 for every call to the .append() command inside of the for loop.

import hub
dataset_path = 's3://bucket_name/dataset_name'
ds = hub.empty(dataset_path) # Dataset is stored on AWS S3
ds.create_tensor('my_tensor')
for i in range(10):
ds.my_tensor_1.append(i) # Long-term storage is updated after
# every append command

With with

To reduce the runtime when using Hub, the with syntax below significantly improves performance because it only pushes updates to long-term storage after the code block inside the with statement has been executed, or when the local cache is full. This significantly reduces the number of discreet write operations, thereby increasing the speed by up to 100X.

ds = hub.empty(dataset_path)
with ds:
ds.create_tensor('my_tensor')
for i in range(10):
ds.my_tensor_2.append(i)
# Long-term storage is updated at the end of the code block inside 'with'