В предыдущей статье я объяснил, что такое база данных квантового реестра, преимущества, варианты использования, чем она отличается от обычных баз данных и как она связана с блокчейном. В этой статье показано, как настроить Amazon QLDB и использовать его в нашем приложении Nodejs в качестве базы данных. Я считаю это более реалистичной реализацией. Надеюсь, это руководство поможет вам начать работу с QLDB без особой головной боли.



Резюме:

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

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

Сначала войдем в AWS и откроем Amazon QLDB из сервисов:

Затем на панели инструментов QLDB создайте бухгалтерскую книгу, нажав «Создать бухгалтерскую книгу»:

Создание реестра займет около минуты. После создания бухгалтерской книги нажмите Редактор запросов на боковой панели, а затем выберите вновь созданную базу данных в раскрывающемся меню Главная книга.

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

PartiQL: один язык запросов для всех ваших данных:

Прежде чем идти дальше, мы должны быть знакомы с языком запросов к базам данных - PartiQL и с тем, почему Amazon представила его в нескольких своих специализированных базах данных, включая QLDB. Amazon объявила о поддержке PartiQL для собственных нужд в запросах и преобразовании огромных объемов и разнообразных данных - не только табличных данных SQL, но также вложенных и полуструктурированных данных. PartiQL имеет возможность эффективно запрашивать данные независимо от того, где (базы данных SQL или базы данных NoSQL) или в каком формате (модель документа JSON или модель строк таблицы) они хранятся. Поскольку QLDB - это база данных без SQL (Semi-SQL и Semi-NoSQL), которая может хранить полуструктурированные данные модели документа в формате строк таблицы, PartiQL идеально подходит для QLDB. PartiQL обратно совместим с SQL, запросы аналогичны SQL. Таким образом, он может использовать существующих разработчиков SQL, чтобы предложить надежные способы запроса и управления огромными объемами и разнообразием данных.

Синтаксис PartiQL:

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

Давайте создавать, обновлять, читать, удалять оценки учащихся из базы данных.

Создать:

Чтобы сохранить оценки учеников в базе данных, нам сначала нужно создать таблицу. Приступим к созданию таблицы с именем «Студенты» с PartiQL. Вот запрос на создание таблицы

CREATE TABLE <table name>
EX:
CREATE TABLE Students

Легко, правда? Итак, теперь у нас есть пустая таблица "Студенты". Добавим в него оценки студента. После успешного выполнения запроса он вернет уникальный documentId для каждого сохраненного документа.

INSERT INTO <table name> `<Student Document JSON>`
EX:
INSERT INTO Students `{"Name":"John Doe", "StudentId":"S1", "Marks":{"Physics":84,"Maths":92,"English":88}}`

Прочитано:

Мы можем вернуть данные всех студентов из таблицы или вернуть данные одного студента в зависимости от определенного условия. например, возвращение оценок ученика по имени «Джон Доу» или вернувшегося ученика с оценками по физике 86.

SELECT * FROM <table name> //Returns all Rows in Table
EX:
SELECT * FROM Students
SELECT FROM * <table name> AS <alias>
WHERE alias.<field name> = <value>   //Returns Rows where <field name> =<value>
EX:
SELECT * FROM Students AS s WHERE s.Name='John Doe' //Returns Rows where Student Name is "John Doe"
SELECT * FROM Students AS s WHERE s.Marks.Physics=86 //Returns a student row whose Physics marks are 86

Обновление:

Теперь, когда у вас есть данные для работы, вы можете начать вносить изменения в данные учащихся. Например, предположим, что вы неправильно записали оценки Джона Доу по физике и хотите обновить его оценки по физике с 86 до 84. Это делает запрос ниже. Вы также можете обновить всю строку записи, как показано ниже.

UPDATE Students AS s
SET s.Marks.Physics=84 WHERE s.Name='John Doe'
UPDATE Students AS s
SET s= {
"Name":"John Doe",
"StudentId":"S2", 
"Marks":{
   "Physics":78,
   "Maths":89,
   "English":86
    }
}
WHERE s.Name='John Doe'

Удалить:

Вы можете использовать оператор DELETE для удаления определенных данных учащихся из таблицы на основе определенного условия. например, если вы хотите удалить ученика по имени «Джон Доу», или вы даже можете удалить всю таблицу, как показано ниже.

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

DELETE FROM Students AS s
WHERE s.Name = 'John Doe' //Delete a student named "John Doe"
DROP TABLE Students //Deletes whole table from the ledger.

История:

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

SELECT * FROM history(Students) AS s
WHERE s.data.Name = 'John Doe'
SELECT * FROM history(Students)

Теперь вы можете иметь базовое представление о синтаксисе QLDB'S PartiQL. Если вы хотите узнать больше об операторах PartiQL, типах данных, операторах, см. Справочник Amazon по QLDB PartiQL. На данный момент мы работали только с консолью QLDB, верно? В следующем разделе давайте фактически создадим приложение nodejs, которое может обращаться к нашей базе данных, запрашивать и обновлять данные.

Настройка клиента Nodejs:

Перейдите в Консоль IAM и в разделе пользователи нажмите на предпочитаемого пользователя, перейдите на вкладку Учетные данные безопасности и нажмите Создать ключ доступа. ». как только вы нажмете на, он сгенерирует ключ доступа, а во всплывающем окне отобразятся сгенерированные идентификатор ключа доступа и секретный ключ. убедитесь, что вы скопировали и сохраните их в безопасности и конфиденциальности, поскольку они нужны нам для подключения к нашему экземпляру QLDB.

Если Amazon была компанией по производству автомобилей, и вы хотели купить у нее машину, они попросят вас собрать автомобильные запчасти из 20 различных магазинов, которые также принадлежат им, и попросят вас собрать их самостоятельно, как можно лучше, используя обширную документацию. они предоставляют. Мне потребовалось больше недели, чтобы понять, как настроить QLDB для приложения Node.js с помощью официального драйвера Nodejs, который они предоставили для развертывания, а затем фактически развернуть его. Это было не на должном уровне. Итак, после долгой борьбы я наконец нашел эту более простую, прямую и настраиваемую реализацию QLDB.

Примечание. Модуль QLDB, который я использую здесь, не является официальным модулем. Однако он использует официальный AWS SDK и официальный драйвер QLDB nodejs и делает простейшую реализацию драйвера QLDB. Я нашел его очень полезным и простым в использовании.

Установка:

npm install --save qldb

Реализация:

Итак, чтобы подключиться к нашему экземпляру QLDB, нам необходимо предоставить учетные данные, которые мы сгенерировали ранее, и регион, где настроен наш QLDB, имя реестра. Поскольку QLDB использует для хранения формат документов Amazon Ion, нам сначала нужно преобразовать наши данные JSON в формат Ion с помощью класса ionize, а затем сохранить их в базе данных. Метод execute модуля qldb позволяет выполнять любой запрос PartiQL, который мы обсуждали ранее.

Поэтому попробуйте создать грубое приложение (Todo или Notes) с помощью этого модуля и предоставить его REST API. Я уже создал приложение для начинающих, использующее этот модуль, и представил его как REST и GraphQL API. Я рекомендую вам это проверить. Все ресурсы, связанные с этой статьей, можно найти на GitHub здесь.

Работать с нами!

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