MyDataSpace — сервис публикации данных

image


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


Очевидно, что ждать, когда государственные органы начнут публиковать данные в готовом для использования виде, не имеет смысла. К тому же открытые данные не ограничиваются только государственными данными.


Поэтому представляю вашему вниманию проект MyDataSpace, который призван сделать открытые данные более доступными всем желающим.


MyDataSpace — это сервис публикации данных. Любой может опубликовать данные и любой же может получить доступ к ним через веб-интерфейс или API.


Вот основные возможности сервиса:


  • Любой желающий может опубликовать данные бесплатно
  • Опубликованные данные доступны всем
  • Лайки и комментарии
  • Поиск по репозиториям данных: полнотекстовый поиск, хештеги, категории, сортировка по популярности, фильтрация по источникам
  • Визуализация данных: карты, графики, таблицы, интеграция с Codepen
  • Импорт данных из файлов различных форматов (CSV, XLS, XML, ODT, JSON и др.)
  • API, который позволяет сделать с данными практически всё что угодно
  • Доступ к данным через WebSocket, уведомления об изменении данных в реальном времени
  • Выполнение пользовательского JavaScript на сервере по расписанию
  • Хранение файлов (автоматическое создание превьюшек разных размеров для картинок)
  • Возможность создать веб-сайт с адресом имя-набора-данных.myda.space
  • Древовидная структура данных
  • Версионирование данных
  • Авторизация через социальные сети


Теперь подробнее по некоторым пунктам.


Импорт данных


Веб-интерфейс для импорта реализован на базе OpenRefine. Это инструмент для очистки наборов данных и для выполнения сложных операций с данными. У него есть свой язык GREL похожий на формумы Exel и OpenOffice.


2a991598cdb43e80ee1a73364f27fcae.gif


OpenRefine сложен в освоении, зато имеет открытый исходный код и безграничные возможности по обработке данных разных форматов — JSON, JSONL, XML. Также от позволяет импортировать данные из ODT, XLS, XLSX и даже из Google Docs.


Из недостатков можно отметить то, что OpenRefine загружает все данные в память единовременно и это ограничивает размер импортируемого через него файла. Но для импорта больших файлов (> 500 мб) есть API.


Древовидная структура данных


В отличие от аналогов таких как data.word или Firebase, данные хранятся в древовидном виде. К каждому элементу данных можно обратиться по абсолютному пути, как к файлу в файловой системе. Например, так можно узнать стоимость биткойна на бирже WEX 5 марта 2018 года в 14:45 (по UTC):


https://api.mydataspace.net/v1/entities?root=exchange_rates&path=btc_usd/wex/2018-03-05_14-45


Все дополнительные сервисы являются частью этого дерева. Благодаря этому у нас есть единый API для чтения/изменения данных, добавления задач, загрузки файлов и создания визуализаций.


API


MyDataSpace — не просто хранилище данных. Его можно использовать как бекенд для сайта или мобильного приложения. Поэтому API проектировался так, чтобы дать пользователю максимальные возможности по работе с данными:


  • Полнотекстовый поиск
  • Сортировка и фильтрация по любым полям
  • Группировка по геокординатам, временным интервалам и др.
  • Фасеты (фасет — это список значений указанного поля с указанием количества документов с этим значением поля, пример — панель фильтров на сайте МВидео или DNS).


Данные хранятся в множестве шардов MySQL и индексируются в ElasticSearch. Так-как Elastic используется только как индекс, мы можем легко мигрировать на новые версии, менять маппинги не боясь потерять данные и не останавливая работу сервиса.


API доступен в 2 вариантах:


  • RESTful API
  • WebSocket API


По возможностям они одинаковые, за исключением того, что для WebSocket есть SDK и он позволяет получать уведомления об изменении интересующих вас данных в реальном времени. Благодаря чему возможно сделать, например, такое:


og365tpzm1ww67buuawlr1m_9bu.gif


Версионирование данных


Все открытые данные в государственных источниках версионируются. Наш сервис без такой возможности тоже был бы неполноценен.


rwbxk125v767mnusmdsfmky2ei8.gif


Выполнение пользовательского JavaScript на сервере


Пользователи могут писать небольшие программы на JavaScript, которые будут выполняться по расписанию (раз в час, сутки, неделю, месяц) на сервере. Такие программы полезны для обновления данных из удаленного источника.


Программа на сервере выполняется в песочнице как в браузере (можно, например, подключить jQuery), это позволяет отлаживать программу непосредственно в вашем браузере перед тем как отправить её на выполнение на сервер.


Так как на сервере используется nodejs 8+, пользователю доступны последние фичи JavaScript (классы, async/await, и др.).


qvyp2kywcotghbc-exsz8ixlekc.gif


Пост уже получится достаточно большой, так что продолжение следует.

© Habrahabr.ru