Запись и получение бинарных данных
В этом руководстве показано, как записать бинарные данные в шардированный спейс с помощью модуля CRUD, а затем прочитать записанные файлы.
Для хранения бинарных данных используйте тип string или varbinary.
Эти типы имеют одинаковые представления в виде байтов, различается только заголовок MsgPack.
При использовании сериализации типы string и varbinary позволяют определить, в каком формате сериализовать данные при отдаче клиенту.
Самый эффективный способ передачи данных клиенту — передать значение через коннектор без конвертации.
Содержание:
- Пререквизиты
- Запуск стенда и подключение к узлу
- Запись бинарных данных
- Чтение бинарных данных
- Размер бинарных данных
- Остановка стенда
Для выполнения примера требуются:
-
установленный Docker-образ Tarantool DB;
-
приложение Docker Compose;
-
Go;
-
исходные файлы примера
binary_data.
Для успешного запуска должны быть свободны следующие порты:
- 2379
- 3301--3308
- 8081, 8082
Перейдите в папку с примером binary_data:
cd ./docs/docs/ru/assets/examples/binary_data/
Запустите стенд:
make start
Команда развернет стенд, который состоит из:
- кластера Tarantool DB:
- 2 роутера;
- 2 набора реплик по 3 хранилища;
- кластера etcd из 3 узлов;
- 1 узла Tarantool Cluster Manager (TCM).
После запуска должны работать все контейнеры, кроме init_host.
Также после запуска кластера становится доступен веб-интерфейс TCM. Для входа в TCM откройте в браузере адрес http://localhost:8081. Логин и пароль для входа:
- Username:
admin - Password:
secret
В TCM откройте вкладку Tuples. Убедитесь, что в списке есть спейс my_files.
Чтобы продемонстрировать запись бинарных данных в шардированный спейс, в примере используется приложение на языке Go.
Откройте вторую вкладку локального терминала и перейдите в директорию с приложением:
cd ./docs/docs/ru/assets/examples/binary_data/go
Запустите Go-приложение:
go run main.go
Программа читает все файлы из папки go/images и записывает их в Tarantool DB с помощью модуля CRUD.
Чтобы проверить записанные данные, в TCM перейдите на вкладку Tuples и выберите в списке спейс my_files.
Откроется новая вкладка с содержимым кортежей спейса my_files.
Запущенная Go-программа является также веб-сервером, слушающим порт 8082. По запросу в браузере программа получает из запроса запрашиваемое имя файла. После этого по имени файла выполняется запрос в базу данных. Бинарные данные, которые извлечены при этом из базы данных, отображаются браузером в качестве картинки согласно прикреплённому заголовку. Пример запроса:
http://localhost:8082/Dunkan.jpg
Если размер бинарных данных большой, увеличьте максимально возможный размер кортежа перед запуском экземпляра.
Задать такой размер можно с помощью переменной окружения TT_MEMTX_MAX_TUPLE_SIZE.
Для остановки стенда:
- В первом локальном терминале выполните следующую команду:
make stop
- Во втором локальном терминале выполните команду
Ctrl + Z.