QLDBDriver Amazon untuk Node.js - Tutorial mulai cepat - Database Buku Besar Amazon Quantum (AmazonQLDB)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

QLDBDriver Amazon untuk Node.js - Tutorial mulai cepat

penting

Pemberitahuan akhir dukungan: Pelanggan yang ada akan dapat menggunakan Amazon QLDB hingga akhir dukungan pada 07/31/2025. Untuk detail selengkapnya, lihat Memigrasi QLDB Buku Besar Amazon ke Amazon Aurora Postgre. SQL

Dalam tutorial ini, Anda belajar cara mengatur aplikasi sederhana menggunakan QLDB driver Amazon untuk Node.js. Panduan ini mencakup langkah-langkah untuk menginstal driver, dan contoh singkat JavaScript dan TypeScript kode dari dasar membuat, membaca, memperbarui, dan menghapus (CRUD) operasi. Untuk contoh lebih mendalam yang menunjukkan operasi ini dalam aplikasi sampel lengkap, lihat. Tutorial Node.js

catatan

Jika berlaku, beberapa langkah memiliki contoh kode yang berbeda untuk setiap versi utama QLDB driver yang didukung untuk Node.js.

Prasyarat

Sebelum memulai, pastikan Anda melakukan hal berikut:

  1. Lengkapi driver Prasyarat untuk Node.js, jika Anda belum melakukannya. Ini termasuk mendaftar AWS, memberikan akses terprogram untuk pengembangan, dan menginstal Node.js.

  2. Buat buku besar bernamaquick-start.

    Untuk mempelajari cara membuat buku besar, lihat Operasi dasar untuk QLDB buku besar Amazon atau Langkah 1: Buat buku besar baru di Memulai dengan konsol.

Jika Anda menggunakan TypeScript, Anda juga harus melakukan langkah-langkah pengaturan berikut.

Untuk menginstal TypeScript
  1. Instal TypeScript paket. QLDBDriver berjalan pada TypeScript 3.8.x.

    $ npm install --global typescript@3.8.0
  2. Setelah paket diinstal, jalankan perintah berikut untuk memastikan bahwa TypeScript compiler diinstal.

    $ tsc --version

Untuk menjalankan kode dalam langkah-langkah berikut, perhatikan bahwa Anda harus terlebih dahulu mentranspile TypeScript file Anda ke JavaScript kode yang dapat dieksekusi, sebagai berikut.

$ tsc app.ts; node app.js

Langkah 1: Siapkan proyek Anda

Pertama, siapkan proyek Node.js Anda.

  1. Buat folder untuk aplikasi Anda.

    $ mkdir myproject $ cd myproject
  2. Untuk menginisialisasi proyek Anda, masukkan npm perintah berikut dan jawab pertanyaan yang diajukan selama penyiapan. Anda dapat menggunakan default untuk sebagian besar pertanyaan.

    $ npm init
  3. Instal QLDB driver Amazon untuk Node.js.

    • Menggunakan versi 3.x

      $ npm install amazon-qldb-driver-nodejs --save
    • Menggunakan versi 2.x

      $ npm install amazon-qldb-driver-nodejs@2.2.0 --save
    • Menggunakan versi 1.x

      $ npm install amazon-qldb-driver-nodejs@1.0.0 --save
  4. Instal dependensi peer driver.

    • Menggunakan versi 3.x

      $ npm install @aws-sdk/client-qldb-session --save $ npm install ion-js --save $ npm install jsbi --save
    • Menggunakan versi 2.x atau 1.x

      $ npm install aws-sdk --save $ npm install ion-js@4.0.0 --save $ npm install jsbi@3.1.1 --save
  5. Buat file baru bernama app.js untuk JavaScript, atau app.ts untuk TypeScript.

    Kemudian, secara bertahap tambahkan contoh kode dalam langkah-langkah berikut untuk mencoba beberapa CRUD operasi dasar. Atau, Anda dapat melewati step-by-step tutorial dan menjalankan aplikasi lengkap.

Langkah 2: Inisialisasi driver

Inisialisasi instance driver yang terhubung ke buku besar bernama. quick-start Tambahkan kode berikut ke app.ts file app.js atau Anda.

JavaScript
var qldb = require('amazon-qldb-driver-nodejs'); var https = require('https'); function main() { const maxConcurrentTransactions = 10; const retryLimit = 4; const agentForQldb = new https.Agent({ maxSockets: maxConcurrentTransactions }); const lowLevelClientHttpOptions = { httpAgent: agentForQldb } const serviceConfigurationOptions = { region: "us-east-1" }; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) var retryConfig = new qldb.RetryConfig(retryLimit); var driver = new qldb.QldbDriver("quick-start", serviceConfigurationOptions, lowlevelClientHttpOptions, maxConcurrentTransactions, retryConfig); } main();
TypeScript
import { Agent } from "https"; import { NodeHttpHandlerOptions } from "@aws-sdk/node-http-handler"; import { QLDBSessionClientConfig } from "@aws-sdk/client-qldb-session"; import { QldbDriver, RetryConfig } from "amazon-qldb-driver-nodejs"; function main(): void { const maxConcurrentTransactions: number = 10; const agentForQldb: Agent = new Agent({ maxSockets: maxConcurrentTransactions }); const lowLevelClientHttpOptions: NodeHttpHandlerOptions = { httpAgent: agentForQldb }; const serviceConfigurationOptions: QLDBSessionClientConfig = { region: "us-east-1" }; const retryLimit: number = 4; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) const retryConfig: RetryConfig = new RetryConfig(retryLimit); const driver: QldbDriver = new QldbDriver("quick-start", serviceConfigurationOptions, lowLevelClientHttpOptions, maxConcurrentTransactions, retryConfig); } if (require.main === module) { main(); }
catatan
  • Dalam contoh kode ini, ganti us-east-1 dengan Wilayah AWS tempat Anda membuat buku besar Anda.

  • Untuk mempermudah, contoh kode yang tersisa dalam panduan ini menggunakan driver dengan pengaturan default, seperti yang ditentukan dalam contoh berikut untuk versi 1.x. Anda juga dapat menggunakan instance driver Anda sendiri dengan kustom sebagai RetryConfig gantinya.

JavaScript
var qldb = require('amazon-qldb-driver-nodejs'); var https = require('https'); function main() { var maxConcurrentTransactions = 10; var retryLimit = 4; var agentForQldb = new https.Agent({ keepAlive: true, maxSockets: maxConcurrentTransactions }); var serviceConfigurationOptions = { region: "us-east-1", httpOptions: { agent: agentForQldb } }; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) var retryConfig = new qldb.RetryConfig(retryLimit); var driver = new qldb.QldbDriver("quick-start", serviceConfigurationOptions, maxConcurrentTransactions, retryConfig); } main();
TypeScript
import { QldbDriver, RetryConfig } from "amazon-qldb-driver-nodejs"; import { ClientConfiguration } from "aws-sdk/clients/acm"; import { Agent } from "https"; function main(): void { const maxConcurrentTransactions: number = 10; const agentForQldb: Agent = new Agent({ keepAlive: true, maxSockets: maxConcurrentTransactions }); const serviceConfigurationOptions: ClientConfiguration = { region: "us-east-1", httpOptions: { agent: agentForQldb } }; const retryLimit: number = 4; // Use driver's default backoff function for this example (no second parameter provided to RetryConfig) const retryConfig: RetryConfig = new RetryConfig(retryLimit); const driver: QldbDriver = new QldbDriver("quick-start", serviceConfigurationOptions, maxConcurrentTransactions, retryConfig); } if (require.main === module) { main(); }
catatan
  • Dalam contoh kode ini, ganti us-east-1 dengan Wilayah AWS tempat Anda membuat buku besar Anda.

  • Versi 2.x memperkenalkan parameter opsional baru RetryConfig untuk inisialisasi. QldbDriver

  • Untuk mempermudah, contoh kode yang tersisa dalam panduan ini menggunakan driver dengan pengaturan default, seperti yang ditentukan dalam contoh berikut untuk versi 1.x. Anda juga dapat menggunakan instance driver Anda sendiri dengan kustom sebagai RetryConfig gantinya.

  • Contoh kode ini menginisialisasi driver yang menggunakan kembali koneksi yang ada dengan menyetel opsi keep-alive. Untuk mempelajari lebih lanjut, lihat Rekomendasi pengaturan driver Node.js.

JavaScript
const qldb = require('amazon-qldb-driver-nodejs'); function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); } main();
TypeScript
import { QldbDriver } from "amazon-qldb-driver-nodejs"; function main(): void { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); } if (require.main === module) { main(); }
catatan

Anda dapat mengatur variabel AWS_REGION lingkungan untuk menentukan Wilayah. Untuk informasi selengkapnya, lihat Menyetel Wilayah AWS di Panduan AWS SDK for JavaScript Pengembang.

Langkah 3: Buat tabel dan indeks

Contoh kode berikut menunjukkan cara menjalankan CREATE TABLE dan CREATE INDEX pernyataan.

  1. Tambahkan fungsi berikut yang membuat tabel bernamaPeople.

    JavaScript
    async function createTable(txn) { await txn.execute("CREATE TABLE People"); }
    TypeScript
    async function createTable(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE TABLE People"); }
  2. Tambahkan fungsi berikut yang membuat indeks untuk firstName bidang di atas People meja. Indeks diperlukan untuk mengoptimalkan kinerja kueri dan membantu membatasi pengecualian konflik kontrol konkurensi (OCC) optimis.

    JavaScript
    async function createIndex(txn) { await txn.execute("CREATE INDEX ON People (firstName)"); }
    TypeScript
    async function createIndex(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE INDEX ON People (firstName)"); }
  3. Dalam main fungsi, Anda pertama kali memanggilcreateTable, dan kemudian memanggilcreateIndex.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); await driver.executeLambda(async (txn) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); }); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); }); driver.close(); } if (require.main === module) { main(); }
  4. Jalankan kode untuk membuat tabel dan indeks.

    JavaScript
    $ node app.js
    TypeScript
    $ tsc app.ts; node app.js

Langkah 4: Masukkan dokumen

Contoh kode berikut menunjukkan bagaimana menjalankan INSERT pernyataan. QLDBmendukung bahasa kueri PartiQL SQL (kompatibel) dan format data Amazon Ion (superset dari). JSON

  1. Tambahkan fungsi berikut yang menyisipkan dokumen ke dalam People tabel.

    JavaScript
    async function insertDocument(txn) { const person = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); }
    TypeScript
    async function insertDocument(txn: TransactionExecutor): Promise<void> { const person: Record<string, any> = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); }

    Contoh ini menggunakan tanda tanya (?) sebagai placeholder variabel untuk meneruskan informasi dokumen ke pernyataan. executeMetode ini mendukung nilai di kedua jenis Amazon Ion dan tipe asli Node.js.

    Tip

    Untuk menyisipkan beberapa dokumen dengan menggunakan satu INSERT pernyataan, Anda dapat meneruskan parameter daftar tipe ke pernyataan sebagai berikut.

    // people is a list txn.execute("INSERT INTO People ?", people);

    Anda tidak melampirkan variabel placeholder (?) dalam tanda kurung sudut ganda (<<...>>) saat melewati daftar. Dalam pernyataan PartiQL manual, tanda kurung sudut ganda menunjukkan koleksi tidak berurutan yang dikenal sebagai tas.

  2. Dalam main fungsi, hapus createTable dan createIndex panggilan, dan tambahkan panggilan keinsertDocument.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); await driver.executeLambda(async (txn) => { console.log("Insert document"); await insertDocument(txn); }); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Insert document"); await insertDocument(txn); }); driver.close(); } if (require.main === module) { main(); }

Langkah 5: Kueri dokumen

Contoh kode berikut menunjukkan bagaimana menjalankan SELECT pernyataan.

  1. Tambahkan fungsi berikut yang menanyakan dokumen dari People tabel.

    JavaScript
    async function fetchDocuments(txn) { return await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John"); }
    TypeScript
    async function fetchDocuments(txn: TransactionExecutor): Promise<dom.Value[]> { return (await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John")).getResultList(); }
  2. Dalam main fungsi, tambahkan panggilan berikut fetchDocuments setelah panggilan keinsertDocument.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); var resultList = await driver.executeLambda(async (txn) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); var result = await fetchDocuments(txn); return result.getResultList(); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom } from "ion-js"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); return await fetchDocuments(txn); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } if (require.main === module) { main(); }

Langkah 6: Perbarui dokumen

Contoh kode berikut menunjukkan bagaimana menjalankan UPDATE pernyataan.

  1. Tambahkan fungsi berikut yang memperbarui dokumen dalam People tabel dengan mengubah lastName ke"Stiles".

    JavaScript
    async function updateDocuments(txn) { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); }
    TypeScript
    async function updateDocuments(txn: TransactionExecutor): Promise<void> { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); }
  2. Dalam main fungsi, tambahkan panggilan berikut updateDocuments setelah panggilan kefetchDocuments. Kemudian, hubungi fetchDocuments lagi untuk melihat hasil yang diperbarui.

    JavaScript
    const qldb = require('amazon-qldb-driver-nodejs'); async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); var resultList = await driver.executeLambda(async (txn) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); var result = await fetchDocuments(txn); return result.getResultList(); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } main();
    TypeScript
    import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom } from "ion-js"; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); return await fetchDocuments(txn); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } if (require.main === module) { main(); }
  3. Jalankan kode untuk menyisipkan, menanyakan, dan memperbarui dokumen.

    JavaScript
    $ node app.js
    TypeScript
    $ tsc app.ts; node app.js

Menjalankan aplikasi lengkap

Contoh kode berikut adalah versi lengkap dari app.js danapp.ts. Alih-alih melakukan langkah-langkah sebelumnya satu per satu, Anda juga dapat menjalankan kode ini dari awal hingga akhir. Aplikasi ini menunjukkan beberapa CRUD operasi dasar pada buku besar bernama. quick-start

catatan

Sebelum Anda menjalankan kode ini, pastikan bahwa Anda belum memiliki tabel aktif bernama People dalam quick-start buku besar.

JavaScript
const qldb = require('amazon-qldb-driver-nodejs'); async function createTable(txn) { await txn.execute("CREATE TABLE People"); } async function createIndex(txn) { await txn.execute("CREATE INDEX ON People (firstName)"); } async function insertDocument(txn) { const person = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); } async function fetchDocuments(txn) { return await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John"); } async function updateDocuments(txn) { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); } async function main() { // Use default settings const driver = new qldb.QldbDriver("quick-start"); var resultList = await driver.executeLambda(async (txn) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); var result = await fetchDocuments(txn); return result.getResultList(); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } main();
TypeScript
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom } from "ion-js"; async function createTable(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE TABLE People"); } async function createIndex(txn: TransactionExecutor): Promise<void> { await txn.execute("CREATE INDEX ON People (firstName)"); } async function insertDocument(txn: TransactionExecutor): Promise<void> { const person: Record<string, any> = { firstName: "John", lastName: "Doe", age: 42 }; await txn.execute("INSERT INTO People ?", person); } async function fetchDocuments(txn: TransactionExecutor): Promise<dom.Value[]> { return (await txn.execute("SELECT firstName, age, lastName FROM People WHERE firstName = ?", "John")).getResultList(); } async function updateDocuments(txn: TransactionExecutor): Promise<void> { await txn.execute("UPDATE People SET lastName = ? WHERE firstName = ?", "Stiles", "John"); }; async function main(): Promise<void> { // Use default settings const driver: QldbDriver = new QldbDriver("quick-start"); const resultList: dom.Value[] = await driver.executeLambda(async (txn: TransactionExecutor) => { console.log("Create table People"); await createTable(txn); console.log("Create index on firstName"); await createIndex(txn); console.log("Insert document"); await insertDocument(txn); console.log("Fetch document"); await fetchDocuments(txn); console.log("Update document"); await updateDocuments(txn); console.log("Fetch document after update"); return await fetchDocuments(txn); }); // Pretty print the result list console.log("The result List is ", JSON.stringify(resultList, null, 2)); driver.close(); } if (require.main === module) { main(); }

Untuk menjalankan aplikasi lengkap, masukkan perintah berikut.

JavaScript
$ node app.js
TypeScript
$ tsc app.ts; node app.js