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


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


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


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



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

    Share post

    Comments 37

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

      Допустим, «любой может опубликовать данные». У меня сразу возникают вопросы, на которые в статье не дано ответов:
      • На каких условиях (за деньги/бесплатно)?
      • Если за деньги, то сколько это стоит и чем это лучше покупки своего/своих VPS?
      • Если бесплатно, то какие гарантии сохранности данных?
        +2
        Бесплатно. О монетизации ещё не думал. Задумка — GitHub для данных.
          +1
          Соответственно второй вопрос: «какие гарантии сохранности данных?»
          Ну и сразу вытекает третий, более технический и ближе к тематике «хабра» — «как будете от меня защищаться, если я начну Вам свои зашифрованные бакапы выкладывать?»)
            0
            Сохранности с технической точки зрения (репликация, бекапы) или какие гарантии того что завтра сервис не перестанет существовать?

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

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

              PS. Если что, я не пытаюсь «очернить» идею. Идея — хорошая. Но вопросы по реализации есть.
                +1
                Сейчас данные которые есть, загружены мной, по-этому бекапа базы вполне хватает)
                Сервис распределенный, хостится в Public Cloud OVH и Scaleway. Репликация MySQL и бекапы.

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

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

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

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

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

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

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

                    4. Не пожалели бы ;)
                      0
                      3) Противоправный контент будет удален

                      А адалт разрешен? :)
                        0
                        Если это законно)
                          –1
                          Есть такой датесет, myda.space/vk_for_men, только тссс
                          image
              +1

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


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

                0
                Версионирование простое, ручное) т.е. пользователь вручную создает новую версию и заливает данные.
                  0
                  Нет, совместного редактирования нет.
                    0
                    А где-то можно посмотреть на ваш проект?
                      0

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

                    0
                    Не планируется свою реализацию выложить на github?
                      –2
                      Возможно. Раскпутка Open Source проекта не проще чем проприетарного. А мативации меньше. Не охото чтоб он лежал никому ненужный с 5 лайками.
                        +1

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

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

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

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

                          Для каждого набора данных можно указать лицензию (Public Domain, Creative Commons,… или свою). Если лицензия позволяет пользоваться, пусть пользуются, на то они и открытые данные.
                          –1
                          Сейчас бы держать данные у третьего лица.
                            +2
                            Да это же круто! Спасибо огромное, успехов!
                              0
                              удалите 3 основных бага которые раздражают:
                              — периодически меняется язык, сделайте привязку к одному источнику временных настроек
                              — при нажатии поиск сверху выпадающую ерунду никак не закрыт и приходится перезагружать страницу
                              — сделайте простой приход в 1-2 клика для перехода из личного кабинета в публичный кабинет

                              и, в идеале, дополнительные доки всех фишечек, а то я у меня лыжи все не едут :(
                                0
                                Спасибо, исправим в ближайшее время.
                                  0
                                  а так идея хорошая, буду пользоваться, когда выйдет из тестирования)
                                0
                                А что с производительностью?
                                  0
                                  Сервис хорошо масштабирувется. Если будет высокая нагрузка, просто добавим ресурсов.
                                • UFO just landed and posted this here
                                  • UFO just landed and posted this here
                                    • UFO just landed and posted this here
                                      +1
                                      Не смог импортировать простенькую таблицу из Excel, я что-то не так делаю?
                                      Importing Data
                                      image
                                      image

                                      Причем таблица просматривается нормально, до момента самого импорта.
                                        0
                                        Похоже на баг с кодировкий. А могли бы вы прилать ссылку на файл?

                                    Only users with full accounts can post comments. Log in, please.