Pull to refresh

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

Reading time3 min
Views7.2K


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


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


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


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


Задача сервиса обеспечить надежное хранение данных и быстрый (близкий к реальному времени) доступ к ним из любой точки мира через API. MyDataSpace можно сравнить с гео-сервисами Гугл или Яндекса. Только Гугл и Яндекс сами собирают данные, а на нашем сервисе это делают пользователи. Мы только обеспечиваем надежный доступ к ним.


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


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

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


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


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



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 и он позволяет получать уведомления об изменении интересующих вас данных в реальном времени. Благодаря чему возможно сделать, например, такое:



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


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



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


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


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


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



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

Tags:
Hubs:
Total votes 38: ↑36 and ↓2+34
Comments37

Articles