Думаю многие уже наслышаны о пользе открытых данных. То здесь, то там открытые данные экономят бюджет, помогают бизнесу и многое другое. Тем не менее качество государственных открытых данных все ещё оставляет желать лучшего. Это сильно тормозит прогресс в этом направлении.
Очевидно, что ждать, когда государственные органы начнут публиковать данные в готовом для использования виде не имеет смысла. К тому же открытые данные не ограничиваются только государственными данными.
Поэтому представляю вашему вниманию проект 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, и др.).
Пост уже получится достаточно большой, так что продолжение следует.