image


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


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


Поэтому представляю вашему вниманию проект 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)


  1. KYuri
    05.03.2018 18:20

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

    Допустим, «любой может опубликовать данные». У меня сразу возникают вопросы, на которые в статье не дано ответов:
    • На каких условиях (за деньги/бесплатно)?
    • Если за деньги, то сколько это стоит и чем это лучше покупки своего/своих VPS?
    • Если бесплатно, то какие гарантии сохранности данных?


    1. fiftin Автор
      05.03.2018 18:27

      Бесплатно. О монетизации ещё не думал. Задумка — GitHub для данных.


      1. KYuri
        05.03.2018 18:40

        Соответственно второй вопрос: «какие гарантии сохранности данных?»
        Ну и сразу вытекает третий, более технический и ближе к тематике «хабра» — «как будете от меня защищаться, если я начну Вам свои зашифрованные бакапы выкладывать?»)


        1. fiftin Автор
          05.03.2018 18:47

          Сохранности с технической точки зрения (репликация, бекапы) или какие гарантии того что завтра сервис не перестанет существовать?

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


          1. KYuri
            05.03.2018 19:29

            Сохранности с технической точки зрения (репликация, бекапы) или какие гарантии того что завтра сервис не перестанет существовать?
            Хотя бы с технической — мы же на «хабре» :)
            Допустим, кто-то на самом деле хочет поделиться какими-то своими данными. Если он отдаёт эти данные стороннему сервису для распространения, и не уверен в его надёжности, то он будет вынужден хранить эти данные и у себя. А если он и так хранит эти данные у себя, то почему бы и не отдавать их всем желающим самостоятельно? (Лично я вижу две причины: во-первых, отдав данные внешнему сервису, можно переложить часть проблем, например ограничения трафика, ширины канала, защиты от DDOS и прочих атак на этот сервис, а во-вторых, если этот внешний сервис «раскручен», то пользователи эти данные с большей вероятностью будут искать там, а не на малоизвестном сайте этого человека).

            Пока такого не было, но думаю будет что-то типа модерации.
            Как это защитит от стеганографии? ;)

            PS. Если что, я не пытаюсь «очернить» идею. Идея — хорошая. Но вопросы по реализации есть.


            1. fiftin Автор
              05.03.2018 19:42

              Сейчас данные которые есть, загружены мной, по-этому бекапа базы вполне хватает)
              Сервис распределенный, хостится в Public Cloud OVH и Scaleway. Репликация MySQL и бекапы.

              Ваше видение причин использования сервиса совпадает с моим:) Содержать свой сервер который не приностит денег (хотя бы в перспективе), сомнительная идея.

              Не вижу ничего плохого в стеганографии :-) Пусть хранится)


          1. OlvinKSA
            05.03.2018 20:30

            Меня вот тоже волнует сохранность: с экономико-социально-политической точки зрения :) Где гарантия, что:

            1. сервис будет существовать достаточно долго? Это про то, кто оплачивает банкет. Ресурсы и время не бесплатны в нашем мире. А ещё и вообще про желание его поддерживать.

            2. сервис не перестанет предоставлять данные по желанию администрации? Но вопрос, скорее, риторический :)

            3. сервис не прикроют (не заблокируют) из-за того, что кто-то залил противоправный контент? (пока не будем определять юрисдикцию)

            4. не захлебнётся со временем от наплыва пользователей? Перекликается с п.1.


            1. fiftin Автор
              05.03.2018 20:42

              1) На данный момент нельзя сказать как долго будет существовать сервис. Пока он интересен, об будет работать. Но в любом случае данные не пропадут. В случае остановки работы бекапы данных и исходный код проекта будут доступны.
              3) Противоправный контент будет удален
              4) Наплыв пользователей, это то, чего хотелось бы добиться)


              1. OlvinKSA
                05.03.2018 20:51

                1. Это радует :)

                3. Весь вопрос в том, как быстро? Не окажется ли слишком поздно? Это, наверное, к вопросу о модераторах и подобных им людях. А также о технологиях автоматической фильтрации/обнаружения.

                4. Не пожалели бы ;)


              1. Archey
                06.03.2018 16:19

                3) Противоправный контент будет удален

                А адалт разрешен? :)


                1. fiftin Автор
                  06.03.2018 17:11

                  Если это законно)


                1. fiftin Автор
                  06.03.2018 22:11

                  Есть такой датесет, myda.space/vk_for_men, только тссс
                  image


  1. rumkin
    05.03.2018 18:42

    Приветствую, коллега. Делаю "в гараже" похожий проект. Удивительно насколько совпадают решения)


    Каким образом реализовано версионирование? Есть совместное редактирование CRDT или CoachDB/PouchDB?


    1. fiftin Автор
      05.03.2018 18:55

      Версионирование простое, ручное) т.е. пользователь вручную создает новую версию и заливает данные.


    1. fiftin Автор
      05.03.2018 19:50

      Нет, совместного редактирования нет.


    1. fiftin Автор
      06.03.2018 08:46

      А где-то можно посмотреть на ваш проект?


      1. rumkin
        06.03.2018 14:56

        В течение месяца опубликую.


  1. mouze1976
    05.03.2018 19:50

    Не планируется свою реализацию выложить на github?


    1. fiftin Автор
      05.03.2018 19:56

      Возможно. Раскпутка Open Source проекта не проще чем проприетарного. А мативации меньше. Не охото чтоб он лежал никому ненужный с 5 лайками.


      1. rumkin
        06.03.2018 23:57

        Если подтянуть UI, то можно собрать достаточную аудиторию для привлечения финансирования на Product Hunt и т.п.


  1. tvl
    05.03.2018 21:02

    … Надежный доступ к данных…
    Последнее слово исправьте )


  1. old_bear
    05.03.2018 21:37

    Присоединяюсь к предыдущим ораторам по вопросу контроля содержания данных. В случае, если данных будет много, ваши ресурсы могут в итоге полностью уйти на выявление и удаление «противоправного контента». В идеальном интернете ничего такого не надо, а в реальном, на базе ваше проекта начнут клепать приложения с телефонами борделей Москвы и прочее такое. И пока вы будете в очередной раз чистить базу, вас уже торжественно внесут в зал славы имени Роскомнадзора…
    Я это всё к тому, что заранее продумать подобные вопросы не менее важно, чем запилить движок базы. Потому что речь не про фабричную линию по выпуску галош, а про нечто, что будет напрямую соприкасаться с большим количеством людей.
    Думаю, что тут нужна масштабируемая система контроля к доступу «на запись». Приглашения, рекомендации, совет модераторов, или что-то подобное, что позволит существовать системе в случае внезапного роста популярности.
    P.S. Ещё интересная мысль в голову пришла. Вы думали, как защититься от ситуации, когда плодами вашего (и единомышленников) труда по структурированию информации начнут пользоваться наши госструктуры, на халяву получая готовый продукт, за который им будут немалые деньги из бюджета платить?


    1. fiftin Автор
      06.03.2018 09:34

      Думаю, что тут нужна масштабируемая система контроля к доступу «на запись».

      Будем решать проблемы по мере их поступления :)

      Вы думали, как защититься от ситуации, когда плодами вашего (и единомышленников) труда по структурированию информации начнут пользоваться наши госструктуры, на халяву получая готовый продукт, за который им будут немалые деньги из бюджета платить?

      Для каждого набора данных можно указать лицензию (Public Domain, Creative Commons,… или свою). Если лицензия позволяет пользоваться, пусть пользуются, на то они и открытые данные.


  1. jackfrostfromcuba
    06.03.2018 07:32

    Сейчас бы держать данные у третьего лица.


  1. artalar
    06.03.2018 08:07

    Да это же круто! Спасибо огромное, успехов!


  1. ruslan399
    06.03.2018 16:20

    удалите 3 основных бага которые раздражают:
    — периодически меняется язык, сделайте привязку к одному источнику временных настроек
    — при нажатии поиск сверху выпадающую ерунду никак не закрыт и приходится перезагружать страницу
    — сделайте простой приход в 1-2 клика для перехода из личного кабинета в публичный кабинет

    и, в идеале, дополнительные доки всех фишечек, а то я у меня лыжи все не едут :(


    1. fiftin Автор
      06.03.2018 17:13

      Спасибо, исправим в ближайшее время.


      1. ruslan399
        07.03.2018 09:33

        а так идея хорошая, буду пользоваться, когда выйдет из тестирования)


  1. BalinTomsk
    06.03.2018 17:06

    А что с производительностью?


    1. fiftin Автор
      06.03.2018 17:17

      Сервис хорошо масштабирувется. Если будет высокая нагрузка, просто добавим ресурсов.


  1. eugenebb
    07.03.2018 21:04

    Работал над подобной системой, одна из наиболее простых в реализации фич которые существенно подстегнули использование сервиса, был кодогенератор клиента для популярных платформ.

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

    Пользователю надо только кнопку нажить и copy&paste source code в свой продукт.

    сделал бы для JavaScript, TypeScript (js можно из него делать), Java (+android), ObjectiveC/Swift, C#, C++


  1. eugenebb
    07.03.2018 21:14

    Еще идея — если говорите что это «GitHub для данных» и поддерживаете версионность, то можно реализовать git сервер который бы динамически генерировал контент.

    т.е. структура типа:

    /format/project/hierarchy/tablename

    format — xml, csv, json
    project — прокет
    hierarchy — путь для таблицы
    tablename — имя таблицы

    сделать read-only относительно просто, думаю будет удобно синхронизировать данные со своим проектом используя стандартный git клиент. Ну а если read/write то вообще шикарно.


    1. eugenebb
      07.03.2018 21:29

      Ну и еще несколько потенциальных направлений развития

      • Поддержка odata
      • Возможность включения нескольких запросов и получения ответа с несколькими результатами через один http вызов (т.е. сервер берет на себя комбинирование взаимосвязанных данных), в некоторых случаях облегчит жизнь клиенту.
      • Всегда хотелось иметь репозиторий с глобальными данными, типа список стран с ISO 3166 кодами, список континентов, городов и т.д. и т.п. Если дать инструмент для комьюнити чтобы создавать и поддерживать такие данные в структурированном формате, думаю нашлись бы желающие, по крайней мере синхронизировать с wikipedia статей