Про использование S3 storage как key-value database

от автора

Вот что говорит википедия про Amazon S3: онлайновая веб-служба предлагаемая Amazon Web Services, предоставляющая возможность для хранения и получения любого объема данных в любое время из любой точки сети так называемый файловый хостинг. С помощью Amazon S3 достигается высокая масштабируемость, надежность, высокая скорость и недорогая инфраструктура хранения данных. Впервые появилась в марте 2006 года в США и в ноябре 2007 года в Европе.

На сегодняшний день S3 storage получила очень большое распространение и поддерживается практически всеми облачными провайдерами. Из описания S3 storage мы видим, что эта штука предназначена для хранения файлов с быстрым доступом к ним из всего мира. И это стереотип! Все, кто недостаточно знаком с S3, считают, что этот сервис предназначен для хранения файлов.

Точно такое же мнение про S3 storage было и у меня до тех пор, пока я не попал в мой текущий проект по разработке онлайн игры для десктопа. Изучая серверную часть проекта, я был удивлён, что мы не используем какую либо базу данных, а пишем все в S3. Сначала это сильно шокировало меня, но пообщавшись с разработчиками я пришёл к выводу, что мы не только не проигрываем, используя S3, а наоборот выигрываем. 

По сути, мы используем S3 как key-value базу данных, и после проведения ряда тестов я убедился, что производительность такого решения в ряде случаев намного выше, чем производительность современных key-value баз данных. Вы просто забываете про описание, про файловый хостинг и оперируете понятиями key-value. И в случае использования для этих целей S3 storage: имя объекта S3 — это key, а содержимое объекта — это value. И всё становится легко и понятно! Вы проектируете базу, хранящуюся на S3, также как обычную key-value базу данных.

Ну и для того чтобы окончательно абстрагироваться от того, что S3 — это файловый хостинг, и для облегчения использования S3 storage как key-value базы данных, был написан пакет s3teo на языке Go:

https://github.com/teonet-go/teos3

Следующий код демонстрирует простоту использования S3 storage как key-value:

// Connect to S3 storage con, err := teos3.Connect(accessKey, secretKey, endpoint, secure) if err != nil {     log.Fatalln(err) }  // Set key to teos3 Map err = con.Map.Set(key, data) if err != nil {     log.Fatalln(err) }  // Get key from TeoS3 Map data, err := con.Map.Get(key) if err != nil {     log.Fatalln(err) }

Проект содержит пример, описание в README и документацию на go.dev:  https://pkg.go.dev/github.com/teonet-go/teos3

Кроме пакета teos3, в проекте присутствует утилита s3cp для копирования файлов на s3 storage. Эта утилита построена на функциях пакета teos3.

Смотрите описание и код проекта на github: https://github.com/teonet-go/teos3

Спасибо за внимание!
С уважением,
Кирилл Щерба.
kirill@scherba.ru


ссылка на оригинал статьи https://habr.com/ru/post/697542/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *