Начало работы

В этой инструкции вы развернете одноузловой локальный кластер YDB и выполните простые запросы к базе данных.

Разверните кластер YDB

Разверните кластер YDB из архива с исполняемым файлом или используйте Docker-образ.

Примечание

В настоящее время поддерживается сборка только для Linux. Сборки для Windows и macOS будут добавлены позже.

  1. Создайте рабочую директорию и перейдите в нее:

    mkdir ~/ydbd && cd ~/ydbd
    
  2. Скачайте и запустите скрипт установки:

    curl https://binaries.ydb.tech/local_scripts/install.sh | bash
    

    Будет загружен и распакован архив с исполняемым файлом ydbd, библиотеками, конфигурационными файлами, а также скриптами для запуска и остановки кластера.

  3. Запустите кластер в одном из режимов хранения данных:

    • Данные в памяти:

      ./start.sh ram
      

      При хранении данных в памяти остановка кластера приведет к их потере.

    • Данные на диске:

      ./start.sh disk
      

      При первом запуске скрипта в рабочей директории будет создан файл ydb.data размером 80 ГБ. Убедитесь, что у вас есть достаточно свободного места для его создания.

    Результат:

    Starting storage process...
    Initializing storage ...
    Registering database ...
    Starting database process...
    
    Database started. Connection options for YDB CLI:
    
    -e grpc://localhost:2136 -d /Root/test
    
  1. Загрузите актуальную версию Docker-образа:

    docker pull cr.yandex/yc/yandex-docker-local-ydb:latest
    

    Убедитесь, что загрузка прошла успешно:

    docker image list | grep cr.yandex/yc/yandex-docker-local-ydb
    

    Результат:

    cr.yandex/yc/yandex-docker-local-ydb   latest    c37f967f80d8   6 weeks ago     978MB
    
  2. Запустите Docker-контейнер:

    docker run -d --rm --name ydb-local -h localhost \
      -p 2135:2135 -p 2136:2136 -p 8765:8765 \
      -v $(pwd)/ydb_certs:/ydb_certs -v $(pwd)/ydb_data:/ydb_data \
      -e YDB_DEFAULT_LOG_LEVEL=NOTICE \
      -e GRPC_TLS_PORT=2135 -e GRPC_PORT=2136 -e MON_PORT=8765 \
      cr.yandex/yc/yandex-docker-local-ydb:latest
    

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

Подключитесь к БД

Вы можете использовать для подключения к базе данных YDB Embedded UI кластера или интерфейс командной строки YDB CLI.

  1. Откройте в браузере страницу:

    http://localhost:8765
    
  2. В блоке Database list выберите базу данных:

    • /Root/test — если вы развернули кластер с помощью исполняемого файла;
    • /local — если вы использовали Docker-образ.
  1. Установите YDB CLI:

    • Для Linux или macOS:

      curl -sSL https://storage.yandexcloud.net/yandexcloud-ydb/install.sh | bash
      

      Примечание

      Скрипт дополнит переменную PATH, только если его запустить в командной оболочке bash или zsh. Если вы запустили скрипт в другой оболочке, добавьте путь до CLI в переменную PATH самостоятельно.

    • Для Windows:

      @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://storage.yandexcloud.net/yandexcloud-ydb/install.ps1'))"
      

      Укажите, нужно ли добавить путь к исполняемому в переменную окружения PATH:

      Add ydb installation dir to your PATH? [Y/n]
      

      Примечание

      YDB CLI использует символы Юникода в выводе некоторых команд. При некорректном отображении таких символов в консоли Windows, переключите кодировку на UTF-8:

      chcp 65001
      

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

  2. Сохраните параметры соединения с БД в профиле YDB CLI:

    ydb config profile create quickstart --endpoint grpc://localhost:2136 --database <path_database>
    
    • path_database — путь базы данных. Укажите одно из значений:

      • /Root/test — если вы развернули кластер с помощью исполняемого файла;
      • /local — если вы использовали Docker-образ.
  3. Проверьте подключение к БД:

    ydb --profile quickstart scheme ls
    

    Результат:

    .sys_health .sys
    

Выполните запросы к БД

Выполните запросы к базе данных используя YDB Embedded UI кластера или интерфейс командной строки YDB CLI.

  1. Создайте таблицы в базе данных:

    В блоке Query введите текст запроса:

    CREATE TABLE series (
        series_id Uint64 NOT NULL,
        title Utf8,
        series_info Utf8,
        release_date Date,
        PRIMARY KEY (series_id)
    );
    
    CREATE TABLE seasons (
        series_id Uint64,
        season_id Uint64,
        title Utf8,
        first_aired Date,
        last_aired Date,
        PRIMARY KEY (series_id, season_id)
    );
    
    CREATE TABLE episodes (
        series_id Uint64,
        season_id Uint64,
        episode_id Uint64,
        title Utf8,
        air_date Date,
        PRIMARY KEY (series_id, season_id, episode_id)
    );
    

    Нажмите кнопку Run Script.

  2. Добавьте данные в созданные таблицы:

    В блоке Query введите текст запроса:

    UPSERT INTO series (series_id, title, release_date, series_info)
    VALUES
        (
            1,
            "IT Crowd",
            Date("2006-02-03"),
            "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry."),
        (
            2,
            "Silicon Valley",
            Date("2014-04-06"),
            "Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley."
        )
        ;
    
    UPSERT INTO seasons (series_id, season_id, title, first_aired, last_aired)
    VALUES
        (1, 1, "Season 1", Date("2006-02-03"), Date("2006-03-03")),
        (1, 2, "Season 2", Date("2007-08-24"), Date("2007-09-28")),
        (2, 1, "Season 1", Date("2014-04-06"), Date("2014-06-01")),
        (2, 2, "Season 2", Date("2015-04-12"), Date("2015-06-14"))
    ;
    
    UPSERT INTO episodes (series_id, season_id, episode_id, title, air_date)
    VALUES
        (1, 1, 1, "Yesterday's Jam", Date("2006-02-03")),
        (1, 1, 2, "Calamity Jen", Date("2006-02-03")),
        (2, 1, 1, "Minimum Viable Product", Date("2014-04-06")),
        (2, 1, 2, "The Cap Table", Date("2014-04-13"))
    ;
    

    Нажмите кнопку Run Script.

  3. Выберите данных из таблицы series:

    В блоке Query введите текст запроса:

    SELECT 
        series_id,
        title AS series_title,
        release_date
    FROM series;
    

    Нажмите кнопку Run Script.

    Ниже отобразится результат выполнения запроса:

    series_id	series_title	release_date
    1	IT Crowd	13182
    2	Silicon Valley	16166
    
  4. Удалите данные из таблицы episodes:

    В блоке Query введите текст запроса:

    DELETE
    FROM episodes
    WHERE
        series_id = 2
        AND season_id = 1
        AND episode_id = 2
    ;
    

    Нажмите кнопку Run Script.

  1. Создайте таблицы в базе данных:

    Сохраните текст запроса в файл create-table.sql:

    CREATE TABLE series (
        series_id Uint64 NOT NULL,
        title Utf8,
        series_info Utf8,
        release_date Date,
        PRIMARY KEY (series_id)
    );
    
    CREATE TABLE seasons (
        series_id Uint64,
        season_id Uint64,
        title Utf8,
        first_aired Date,
        last_aired Date,
        PRIMARY KEY (series_id, season_id)
    );
    
    CREATE TABLE episodes (
        series_id Uint64,
        season_id Uint64,
        episode_id Uint64,
        title Utf8,
        air_date Date,
        PRIMARY KEY (series_id, season_id, episode_id)
    );
    

    Выполните запрос:

    ydb --profile quickstart yql --file create-table.sql
    
  2. Добавьте данные в созданные таблицы:

    Сохраните текст запроса в файл upsert.sql:

    UPSERT INTO series (series_id, title, release_date, series_info)
    VALUES
        (
            1,
            "IT Crowd",
            Date("2006-02-03"),
            "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by Ash Atalla and starring Chris O'Dowd, Richard Ayoade, Katherine Parkinson, and Matt Berry."),
        (
            2,
            "Silicon Valley",
            Date("2014-04-06"),
            "Silicon Valley is an American comedy television series created by Mike Judge, John Altschuler and Dave Krinsky. The series focuses on five young men who founded a startup company in Silicon Valley."
        )
        ;
    
    UPSERT INTO seasons (series_id, season_id, title, first_aired, last_aired)
    VALUES
        (1, 1, "Season 1", Date("2006-02-03"), Date("2006-03-03")),
        (1, 2, "Season 2", Date("2007-08-24"), Date("2007-09-28")),
        (2, 1, "Season 1", Date("2014-04-06"), Date("2014-06-01")),
        (2, 2, "Season 2", Date("2015-04-12"), Date("2015-06-14"))
    ;
    
    UPSERT INTO episodes (series_id, season_id, episode_id, title, air_date)
    VALUES
        (1, 1, 1, "Yesterday's Jam", Date("2006-02-03")),
        (1, 1, 2, "Calamity Jen", Date("2006-02-03")),
        (2, 1, 1, "Minimum Viable Product", Date("2014-04-06")),
        (2, 1, 2, "The Cap Table", Date("2014-04-13"))
    ;
    

    Выполните запрос:

    ydb --profile quickstart yql --file upsert.sql
    
  3. Выберите данных из таблицы series:

    Сохраните текст запроса в файл select.sql:

    SELECT 
        series_id,
        title AS series_title,
        release_date
    FROM series;
    

    Выполните запрос:

    ydb --profile quickstart yql --file select.sql
    

    Результат:

    ┌───────────┬──────────────────┬──────────────┐
    | series_id | series_title     | release_date |
    ├───────────┼──────────────────┼──────────────┤
    | 1         | "IT Crowd"       | "2006-02-03" |
    ├───────────┼──────────────────┼──────────────┤
    | 2         | "Silicon Valley" | "2014-04-06" |
    └───────────┴──────────────────┴──────────────┘
    
  4. Удалите данные из таблицы episodes:

    Сохраните текст запроса в файл delete.sql:

    DELETE
    FROM episodes
    WHERE
        series_id = 2
        AND season_id = 1
        AND episode_id = 2
    ;
    

    Выполните запрос:

    ydb --profile quickstart yql --file delete.sql
    

    Просмотрите таблицу episodes:

    ydb --profile quickstart yql --script "SELECT * FROM episodes;"
    

    Результат:

    ┌──────────────┬────────────┬───────────┬───────────┬──────────────────────────┐
    | air_date     | episode_id | season_id | series_id | title                    |
    ├──────────────┼────────────┼───────────┼───────────┼──────────────────────────┤
    | "2006-02-03" | 1          | 1         | 1         | "Yesterday's Jam"        |
    ├──────────────┼────────────┼───────────┼───────────┼──────────────────────────┤
    | "2006-02-03" | 2          | 1         | 1         | "Calamity Jen"           |
    ├──────────────┼────────────┼───────────┼───────────┼──────────────────────────┤
    | "2014-04-06" | 1          | 1         | 2         | "Minimum Viable Product" |
    └──────────────┴────────────┴───────────┴───────────┴──────────────────────────┘
    

    Из таблицы удалена строка о сериале The Cap Table.

Остановите кластер

По окончании работы остановите кластер YDB.

Чтобы остановить кластер, выполните команду в директории ~/ydbd:

./stop.sh

Чтобы остановить Docker-контейнер с кластером, выполните команду:

docker kill ydb-local

Что дальше

  • Изучите концепции YDB.
  • Узнайте подробнее об этих и других способах развертывания YDB.
  • Посмотрите, как работать с БД YDB при помощи SDK.
  • Ознакомьтесь с языком запросов YQL.