Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров3.6K

Вот что говорит википедия про 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.

Следующий код демонстрирует простоту использования 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.

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

Смотрите описание и код проекта на github

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

Теги:
Хабы:
Всего голосов 10: ↑2 и ↓8-6
Комментарии8

Публикации

Истории

Работа

Go разработчик
161 вакансия

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн