Комментарии 6
Было бы неплохо рассмотреть предложенные кейсы в формате сравнения с решением аналогичной задачи посредствам обычного файлового хранилища, чтобы были более очевидны плюсы и минусы использования той или иной технологии.
Стоит, наверное, ещё отметить что при создании префикса в ключе объекта, в ряде систем, эти префиксы, отображаются как вложенные в бакет папки (каталоги). Если предполагается использовать бакеты с большим количеством файлов, то без таких префиксов, просто невозможно работать через инструменты с GUI.
В MinIO SDK, чтобы положить объект в бакет, нужно знать его размер
а вот что нам говорит документация на сайте minio
// Upload unknown sized input stream.
minioClient.putObject(
PutObjectArgs.builder().bucket("my-bucketname").object("my-objectname").stream(
inputStream, -1, 10485760)
.contentType("video/mp4")
.build());
кому верить то?
Прежде всего пример выше на Java, а речь в статье про Go SDK (как и все примеры на Go). И там особенность какая, у метода PutObject есть параметр objectSize int64, и его так же можно поставить в -1, но явно говорят:
objectSize
int64
Size of the object being uploaded. Pass -1 if stream size is unknown (Warning: passing -1 will allocate a large amount of memory)
Потому так и написано, что нужно знать размер (иначе может быть больно) :)
то что статья про Go понимаешь только к середине статьи. Да и вообще в тэгах не написано что статья для Go, а позиционирует себя как некое универсальное описание. Грузить файл с неизвестным размером в режиме потока это нормальная практика и никаких супер расходов памяти на java не будет (ограничивается размером буфера). Соответсвенно следует писать статью о чем знаешь (или не знашь) - про s3 на го.
А вообще статья не понятно для кого: для новичков она слишком пустая и посредственная, для тех кто что-то слышал про s3 она также не дает новой информации. Не понятно за что ей накидали плюсов. На хабре есть более информативное чтиво. А вообще лучше читать доку
S3: возможности протокола и паттерны использования