Думаю многие уже наслышаны о пользе открытых данных. То здесь, то там открытые данные экономят бюджет, помогают бизнесу и многое другое. Тем не менее качество государственных открытых данных все ещё оставляет желать лучшего. Это сильно тормозит прогресс в этом направлении.
Очевидно, что ждать, когда государственные органы начнут публиковать данные в готовом для использования виде не имеет смысла. К тому же открытые данные не ограничиваются только государственными данными.
Поэтому представляю вашему вниманию проект MyDataSpace, который призван сделать открытые данные более доступными всем желающим.
MyDataSpace – это сервис публикации данных. Любой может опубликовать данные бесплатно (под свободной или своей лицензией) и любой же может получить доступ к ним через веб-интерфейс или API.
Задача сервиса обеспечить надежное хранение данных и быстрый (близкий к реальному времени) доступ к ним из любой точки мира через API. MyDataSpace можно сравнить с гео-сервисами Гугл или Яндекса. Только Гугл и Яндекс сами собирают данные, а на нашем сервисе это делают пользователи. Мы только обеспечиваем надежный доступ к ним.
Вот основные возможности сервиса:
- Любой желающий может опубликовать данные
- Опубликованные данные доступны всем
- Лайки и комментарии
- Поиск по репозиториям данных: полнотекстовый поиск, хештеги, категории, сортировка по популярности, фильтрация по источникам
- Визуализация данных: карты, графики, таблицы, интеграция с Codepen
- Импорт данных из файлов различных форматов (CSV, XLS, XML, ODT, JSON и др.)
- API, который позволяет сделать с данными практически всё что угодно
- Доступ к данным через WebSocket, уведомления об изменении данных в реальном времени
- Выполнение пользовательского JavaScript на сервере по расписанию
- Хранение файлов (автоматическое создание превьюшек разных размеров для картинок)
- Возможность создать веб-сайт с адресом
имя-набора-данных.myda.space
- Древовидная структура данных
- Версионирование данных
- Авторизация через социальные сети
Теперь подробнее по некоторым пунктам.
Импорт данных
Веб-интерфейс для импорта реализован на базе 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, и др.).
Пост уже получится достаточно большой, так что продолжение следует.
Комментарии (33)
rumkin
05.03.2018 18:42Приветствую, коллега. Делаю "в гараже" похожий проект. Удивительно насколько совпадают решения)
Каким образом реализовано версионирование? Есть совместное редактирование CRDT или CoachDB/PouchDB?
fiftin Автор
05.03.2018 18:55Версионирование простое, ручное) т.е. пользователь вручную создает новую версию и заливает данные.
mouze1976
05.03.2018 19:50Не планируется свою реализацию выложить на github?
fiftin Автор
05.03.2018 19:56Возможно. Раскпутка Open Source проекта не проще чем проприетарного. А мативации меньше. Не охото чтоб он лежал никому ненужный с 5 лайками.
rumkin
06.03.2018 23:57Если подтянуть UI, то можно собрать достаточную аудиторию для привлечения финансирования на Product Hunt и т.п.
old_bear
05.03.2018 21:37Присоединяюсь к предыдущим ораторам по вопросу контроля содержания данных. В случае, если данных будет много, ваши ресурсы могут в итоге полностью уйти на выявление и удаление «противоправного контента». В идеальном интернете ничего такого не надо, а в реальном, на базе ваше проекта начнут клепать приложения с телефонами борделей Москвы и прочее такое. И пока вы будете в очередной раз чистить базу, вас уже торжественно внесут в зал славы имени Роскомнадзора…
Я это всё к тому, что заранее продумать подобные вопросы не менее важно, чем запилить движок базы. Потому что речь не про фабричную линию по выпуску галош, а про нечто, что будет напрямую соприкасаться с большим количеством людей.
Думаю, что тут нужна масштабируемая система контроля к доступу «на запись». Приглашения, рекомендации, совет модераторов, или что-то подобное, что позволит существовать системе в случае внезапного роста популярности.
P.S. Ещё интересная мысль в голову пришла. Вы думали, как защититься от ситуации, когда плодами вашего (и единомышленников) труда по структурированию информации начнут пользоваться наши госструктуры, на халяву получая готовый продукт, за который им будут немалые деньги из бюджета платить?fiftin Автор
06.03.2018 09:34Думаю, что тут нужна масштабируемая система контроля к доступу «на запись».
Будем решать проблемы по мере их поступления :)
Вы думали, как защититься от ситуации, когда плодами вашего (и единомышленников) труда по структурированию информации начнут пользоваться наши госструктуры, на халяву получая готовый продукт, за который им будут немалые деньги из бюджета платить?
Для каждого набора данных можно указать лицензию (Public Domain, Creative Commons,… или свою). Если лицензия позволяет пользоваться, пусть пользуются, на то они и открытые данные.
ruslan399
06.03.2018 16:20удалите 3 основных бага которые раздражают:
— периодически меняется язык, сделайте привязку к одному источнику временных настроек
— при нажатии поиск сверху выпадающую ерунду никак не закрыт и приходится перезагружать страницу
— сделайте простой приход в 1-2 клика для перехода из личного кабинета в публичный кабинет
и, в идеале, дополнительные доки всех фишечек, а то я у меня лыжи все не едут :(
BalinTomsk
06.03.2018 17:06А что с производительностью?
fiftin Автор
06.03.2018 17:17Сервис хорошо масштабирувется. Если будет высокая нагрузка, просто добавим ресурсов.
eugenebb
07.03.2018 21:04Работал над подобной системой, одна из наиболее простых в реализации фич которые существенно подстегнули использование сервиса, был кодогенератор клиента для популярных платформ.
т.е. у вас уже есть знание о структуре и зависимостях между данными, информация о инфраструктуре и т.п., поэтому очень легко сделать генератор исходников под нужную систему.
Пользователю надо только кнопку нажить и copy&paste source code в свой продукт.
сделал бы для JavaScript, TypeScript (js можно из него делать), Java (+android), ObjectiveC/Swift, C#, C++
eugenebb
07.03.2018 21:14Еще идея — если говорите что это «GitHub для данных» и поддерживаете версионность, то можно реализовать git сервер который бы динамически генерировал контент.
т.е. структура типа:
/format/project/hierarchy/tablename
format — xml, csv, json
project — прокет
hierarchy — путь для таблицы
tablename — имя таблицы
сделать read-only относительно просто, думаю будет удобно синхронизировать данные со своим проектом используя стандартный git клиент. Ну а если read/write то вообще шикарно.
eugenebb
07.03.2018 21:29Ну и еще несколько потенциальных направлений развития
- Поддержка odata
- Возможность включения нескольких запросов и получения ответа с несколькими результатами через один http вызов (т.е. сервер берет на себя комбинирование взаимосвязанных данных), в некоторых случаях облегчит жизнь клиенту.
- Всегда хотелось иметь репозиторий с глобальными данными, типа список стран с ISO 3166 кодами, список континентов, городов и т.д. и т.п. Если дать инструмент для комьюнити чтобы создавать и поддерживать такие данные в структурированном формате, думаю нашлись бы желающие, по крайней мере синхронизировать с wikipedia статей
KYuri
Допустим, «любой может опубликовать данные». У меня сразу возникают вопросы, на которые в статье не дано ответов:
fiftin Автор
Бесплатно. О монетизации ещё не думал. Задумка — GitHub для данных.
KYuri
Соответственно второй вопрос: «какие гарантии сохранности данных?»
Ну и сразу вытекает третий, более технический и ближе к тематике «хабра» — «как будете от меня защищаться, если я начну Вам свои зашифрованные бакапы выкладывать?»)
fiftin Автор
Сохранности с технической точки зрения (репликация, бекапы) или какие гарантии того что завтра сервис не перестанет существовать?
Скорость заливки достаточно низкая, размер поля ограничен) Пока такого не было, но думаю будет что-то типа модерации.
KYuri
Допустим, кто-то на самом деле хочет поделиться какими-то своими данными. Если он отдаёт эти данные стороннему сервису для распространения, и не уверен в его надёжности, то он будет вынужден хранить эти данные и у себя. А если он и так хранит эти данные у себя, то почему бы и не отдавать их всем желающим самостоятельно? (Лично я вижу две причины: во-первых, отдав данные внешнему сервису, можно переложить часть проблем, например ограничения трафика, ширины канала, защиты от DDOS и прочих атак на этот сервис, а во-вторых, если этот внешний сервис «раскручен», то пользователи эти данные с большей вероятностью будут искать там, а не на малоизвестном сайте этого человека).
Как это защитит от стеганографии? ;)
PS. Если что, я не пытаюсь «очернить» идею. Идея — хорошая. Но вопросы по реализации есть.
fiftin Автор
Сейчас данные которые есть, загружены мной, по-этому бекапа базы вполне хватает)
Сервис распределенный, хостится в Public Cloud OVH и Scaleway. Репликация MySQL и бекапы.
Ваше видение причин использования сервиса совпадает с моим:) Содержать свой сервер который не приностит денег (хотя бы в перспективе), сомнительная идея.
Не вижу ничего плохого в стеганографии :-) Пусть хранится)
OlvinKSA
Меня вот тоже волнует сохранность: с экономико-социально-политической точки зрения :) Где гарантия, что:
1. сервис будет существовать достаточно долго? Это про то, кто оплачивает банкет. Ресурсы и время не бесплатны в нашем мире. А ещё и вообще про желание его поддерживать.
2. сервис не перестанет предоставлять данные по желанию администрации? Но вопрос, скорее, риторический :)
3. сервис не прикроют (не заблокируют) из-за того, что кто-то залил противоправный контент? (пока не будем определять юрисдикцию)
4. не захлебнётся со временем от наплыва пользователей? Перекликается с п.1.
fiftin Автор
1) На данный момент нельзя сказать как долго будет существовать сервис. Пока он интересен, об будет работать. Но в любом случае данные не пропадут. В случае остановки работы бекапы данных и исходный код проекта будут доступны.
3) Противоправный контент будет удален
4) Наплыв пользователей, это то, чего хотелось бы добиться)
OlvinKSA
1. Это радует :)
3. Весь вопрос в том, как быстро? Не окажется ли слишком поздно? Это, наверное, к вопросу о модераторах и подобных им людях. А также о технологиях автоматической фильтрации/обнаружения.
4. Не пожалели бы ;)
Archey
А адалт разрешен? :)
fiftin Автор
Если это законно)
fiftin Автор
Есть такой датесет, myda.space/vk_for_men, только тссс