Привет! Меня зовут Андрей Шмиг, я основатель и разработчик платформы DataHub — Crowd Data Sourcing at Hand, своего рода GitHub для данных. В этой статье покажу, каким образом можно монетизировать имеющиеся у вас структурированные и неструктурированные данные будь вы разработчик, data‑scientist или ML‑специалист.

Предыдущие статьи

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

Полный список связанных статей:

Типы репозиториев данных

Платформа DataHub поддерживает три типа репозиториев:

  • FREE (бесплатный);

  • SPONSORED (спонсируемый);

  • COMMERCIAL (коммерческий).

Первые два типа репозитория данных позволяют получать бесплатный доступ к данным, а отличаются только возможностью финансирования автора для поддержания репозитория данных в актуальном состоянии. Например, логично было бы репозиторий данных со списком стран мира сделать типа FREE, а репозиторий с данными со списком улиц города (если представим, что эти данные требуют обновления с некой периодичностью) типа SPONSORED.

COMMERCIAL тип репозитория данных поддерживает несколько форматов (способов) оплаты доступа к данным:

  • Pay per row;

  • Pay per query;

  • Pay by function;

О каждом из этих форматов расскажу ниже.

Меняем тип репозитория данных

Из прошлой статьи у нас остался демо‑репозиторий, который мы и будем использовать сейчас — база стран всего мира (демо).

Переходим в режим редактирования репозитория данных — его основной информации:

Переключаем репозиторий с типа FREE на тип COMMERCIAL:

Тип репозитория данных COMMERCIAL поддерживает три режима (формата) оплаты за доступ к данным:

  • Pay per row;

  • Pay per query;

  • Pay by function;

Pay per row: при использовании данного режима (формата) оплаты стоимость конечной выборки данных зависит от количества строк (rows) в результате выполнения запроса через Visual Query Builder или Predefined Queries. В поле со стоимостью указывается стоимость 1 строки данных, а конечная стоимость вычисляется как произведение стоимости одной строки данных на общее количество в результатирующей выборке.

Pay per query: при использовании данного режима (формата) оплаты стоимость конечной выборки фиксирована и не зависит от количества строк (rows) в результатирующей выборке. В поле со стоимостью указывается стоимость одного запроса к репозиторию данных, вне зависимости от количества строк (rows), которые были в ответе.

Pay by function: при использовании данного режима (формата) оплаты стоимость конечной выборки вычисляется указанной JS‑функцией, которая на входе получает объект с полями storage и rows. Поле storage — объект с информацией о хранилище к которому выполняется запрос, а rows — результатирующий набор данных полученный в результате выполнения запроса либо через Visual Query Builder, либо через Predefined Queries.

JS‑функция формирования стоимости должна возвращать значение типа Number — в любом другом случае платформа установит стоимость выборки данных равной нулю (0.00)

На выполнение функции даётся 10с, после чего выполнение прерывается и значение стоимости устанавливается в 0.00 рублей. В функции доступны глобальные объекты Math и некоторые другие.

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

Как вы уже, наверно, догадались — коммерческий репозиторий может быть бесплатным (точнее — к части данных предоставлять бесплатный доступ, например, к демо‑данным), если в соответствующих полях указывать нулевые стоимости строк / запросов.

Воспользуюсь Pay per row форматом оплаты и установлю стоимость одной строки данных равно 0.5 коп. Сохраню репозиторий и перейду в публичное его представление.

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

Так как до Predefined Queries мы ещё не дошли в наших статьях — воспользуюсь демонстрацией Visual Query Builder на главном экране репозитория.

Переключаемся на вкладку Builder и выбираем таблицу countries:

В прошлой статье мы создавали эту таблицу и добавляли в неё три страны. В левом нижнем углу видим, что в выборке (без каких‑либо других условий) содержится 3 строки (rows) и стоимость этой выборки 1.50 ₽

Если мы добавим какое‑то условие во вкладке Conditions и изменим количество строк в выборке, то автоматически пересчитается и стоимость:

Конечный пользователь может выбрать один из форматов в которых необходимо выгрузить данные — JSON, XML, XLS и по клику на кнопку «Download» получить необходимый набор данных (только в том случае, если на балансе будет достаточно средств для списания).

Надеюсь, что возможности DataHub позволят вам монетизировать имеющиеся у вас данные эффективно!


В следующих статьях рассмотрим с вами возможности предоставления более гибких способов доступа к данным репозитория конечным пользователям через Predefined Queries.


Если вам понравилась статья — ставьте лайк и оставляйте комментарий. Подписывайтесь на мой блог про DataHub на Хабре, а так же на Телеграм канал поддержки сервиса.

Мой публичный профиль на DataHub — @aashmig.

Буду рад ответить на ваши вопросы и дополнить статью.

Комментарии (15)


  1. TsarS
    21.04.2023 08:23
    +1

    А я попробовал. Долго думал сначала (я не читал предыдущую статью) как добавить Storage — окей, оказалось справа в меню. Создал базу - тут все ок. Создал таблицу запросом (хотя можно было бы как-нибудь в Wizard добавить форму создания таблицы), нашел кнопку запуска запроса, нажал и .... не знаю, создал таблицу или нет. Таблица появилась после перезагрузки страницы. Пытаюсь загрузить данные в таблицу, но не могу попасть в нее из Storage — если нажать на edit, то я только могу отредактировать название базы и кодировку.

    Если заходишь в свой репозиторий, то, при редактировании, настройки (например, цена) сбрасывается.

    Не получилось, в общем. Идея хорошая, но требуется тестирование и UX/UI (сугубо мое мнение)

    P.S. Ну и ошибки в таком формате выдавать не очень. Будто вы в режиме dev, их лучше все-таки в логи класть, а пользователю выдавать что-то вроде "Упсс, что-то пошло не так, попробуйте что-то там вот так"


    1. AndrewShmig Автор
      21.04.2023 08:23

      нашел кнопку запуска запроса, нажал и .... не знаю, создал таблицу или нет.

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

      Пытаюсь загрузить данные в таблицу, но не могу попасть в нее из Storage — если нажать на edit, то я только могу отредактировать название базы и кодировку.

      Чтобы перейти в Storage определенный достаточно кликнуть по названию хранилища или в выпадающем меню перейти в Wizard. Как тут можно упростить UI/UX, чтобы было более очевидным? Готов прислушаться к мнению.

      Если заходишь в свой репозиторий, то, при редактировании, настройки (например, цена) сбрасывается.

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

      P.S. Ну и ошибки в таком формате выдавать не очень.

      Отчасти соглашусь с вами, в качестве оправдания - альфа-версия сервиса. До беты дотянуть могу, но тесты были локальными.

      Спасибо за обратную связь! По UI/UX думаю, в любом случае, буду - хотел собрать предварительную информацию, где эти самые проблемы и в каких местах всплывут.


    1. AndrewShmig Автор
      21.04.2023 08:23

      Насчет ошибки... а какое действие вы пытались выполнить?


      1. TsarS
        21.04.2023 08:23

        На данный момент ошибка с Access Denied выдается просто при заходе в Storages


        1. AndrewShmig Автор
          21.04.2023 08:23

          Разбираюсь, спасибо.


        1. AndrewShmig Автор
          21.04.2023 08:23

          Разобрался, но для этого сделаю чуть позже обновление. Чтобы ошибка не появлялась нужно пересоздать хранилище после которого она появилась - вижу, что у вас их было несколько создано.


    1. AndrewShmig Автор
      21.04.2023 08:23

      хотя можно было бы как-нибудь в Wizard добавить форму создания таблицы

      А что именно в этой форме ожидаете увидеть?


      1. TsarS
        21.04.2023 08:23
        +1

        Ну как, например, в phpMyAdmin - "добавить таблицу", "добавить поле", "поставить тип поля"


        1. AndrewShmig Автор
          21.04.2023 08:23

          Понял. В качестве ориентира держу не PhpMyAdmin, а MySQL Workbench для редактора в MySQL Wizard.


  1. TsarS
    21.04.2023 08:23
    +1

    Чтобы перейти в Storage определенный достаточно кликнуть по названию хранилища или в выпадающем меню перейти в Wizard. Как тут можно упростить UI/UX, чтобы было более очевидным? Готов прислушаться к мнению.

    Именно так я и сделал - и ничего никуда не перешло. Надо бы протестировать (ошибок никаких не выдало, браузер Chrome 112.0.5615.122 , Win 10)


    1. AndrewShmig Автор
      21.04.2023 08:23

      Mac OS, Version 112.0.5615.137 (Official Build) (x86_64) - только что проверил, открывается всё. Попробую, конечно, потом на Win проверить, но может что-то локально случилось...


  1. leha_gorbunov
    21.04.2023 08:23
    +2

    Данные имеющие ценность будут занимать ооочень много места. И платить будут именно за такие подборки, на которые уходит много времени и ресурсов. Если, конечно, это не для торговли ПД ? Или для этого ?


    1. AndrewShmig Автор
      21.04.2023 08:23

      Нет, не для торговли ПД.


  1. Upsarin01
    21.04.2023 08:23
    +1

    Короче не работет и вообще не удобно...

    Заходишь в созданную БД кидаешь данные, и они не попадают туда...

    Из CSV/XML закинуть нельзя...

    Engine: InnoDB

    Row Format: Dynamic

    Table Rows: 127

    Avg Row Length: 129 bytes

    Data Length: 16 KiB

    Index Length: 0 bytes

    Auto increment:

    Create time: 2023-04-21T09:34:39.000Z

    Update time: 2023-04-21T09:34:39.000Z

    Collation: utf8mb3_general_ci

    И как итог:

    No data created.

    The result set is an object that represents a set of data returned

    from a data source, usually as the result of a query. The result set contains

    rows and columns to hold the requested data elements.


    1. AndrewShmig Автор
      21.04.2023 08:23

      Из CSV/XML закинуть нельзя...

      На данный момент, действительно, нет такой возможности - в списке фич есть. В ближайшее время добавлю импорт / экспорт в трёх форматах.

      Заходишь в созданную БД кидаешь данные, и они не попадают туда...

      Что именно вы туда кидаете и в каком формате?

      Готов помочь разобраться.