Достаточно часто возникает потребность проведения периодических вычислений и подготовки консолидированного отчета по самодостаточным данным. Т.е. по данным, которые хранятся в виде файлов. Это могут быть данные, набранные из открытых источников, различные документы и excel таблицы, выгрузки из корпоративных систем. Данные в сыром виде могут занимать как несколько мегабайт, так и несколько гигабайт. Данные могут быть обезличенными, либо содержать конфиденциальную информацию. В том случае, когда код вычислений помещается в репозиторий, а работа ведется более чем одним человеком более чем на одном компьютере, возникает проблема сохранения консистентности кода и данных. При этом необходимо еще обеспечить соблюдение разных прав доступа к коду и данным. Что делать?

Является продолжением предыдущих публикаций.

RStudio сейчас активно разрабатывают пакет pins для решения этой проблемы. К сожалению, применяемые бэкенд решения несколько непопулярны и дороговаты для применения на просторах нашей страны. AWS, Azure, Google cloud… за каждый чих надо платить, и за хранение и за трафик. Аутентификацию AWS4 pins пока не поддерживает, так что Yandex cloud пока тоже в стороне, хотя и он не бесплатен.

С другой стороны, команды аналитиков, работающих над конкретными задачами, как правило, невелики (не более 5-10 человек). Многие используют Google drive, One drive и пр., в платном или бесплатном формате. Почему бы не воспользоваться уже приобретенными ресурсами? Ниже предлагается один из возможных workflow.

Общий план

 

  1. Вычисления должны проводиться локально на машине, а значит на машине должна быть актуальная реплика всех необходимых для проведения вычислений данных.
  2. Код должен быть под системой контроля версий. Данные туда не должны никоим образом попадать (потенциальные объем и конфиденциальность). Будем хранить реплику данных либо в отдельной папке в проекте (включив ее в .gitignore), либо во внешней относительно проекта директории.
  3. Хранилищем мастер данных будет выступать google drive. Права на доступ к директориям развешиваем в нем же.

Осталось дело за малым. Необходимо реализовать функционал синхронизации локальной реплики данных с облаком. Авторизация и аутентификация обеспечивается google.

Ниже код.

library(googledrive)
library(memoise)
# синхронизация кэша с google disk
drive_user()
updateGdCache(here::here("data/"), cloud_folder = "XXX___jZnIW3jdkbdxK0iazx7t63Dc")

 

Функция для синхронизации кэша

В качестве пути указываем идентификатор папки в google drive, можно взять его из адресной строки браузера. Идентификатор будет неизменным, даже если папка будет перемещаться в драйве.

Просто, компактно, удобно и бесплатно.

Пара замечаний

 

  1. Есть проблемы с кодировкой у gargle 0.4.0 версии. Надо грузить dev версию. Подробнее здесь.
  2. Есть проблемы с авторизацией на RStudio Server «Unable to authorize from RStudio Server #79 {Closed}», но идеи по обходному пути можно поглядеть здесь.

Privacy Preference Center