Driver Amazon QLDB untuk Node.js - referensi Cookbook - Amazon Quantum Ledger Database (Amazon QLDB)

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

Driver Amazon QLDB untuk Node.js - referensi Cookbook

Panduan referensi ini menunjukkan kasus penggunaan umum driver QLDB Amazon untuk Node.js. Ini menyediakan JavaScript dan contoh TypeScript kode yang menunjukkan cara menggunakan driver untuk menjalankan operasi dasar buat, baca, dan hapus atau create, read, update, and delete (CRUD). Ini juga mencakup contoh kode untuk memproses data Amazon Ion. Selain itu, panduan ini menyoroti praktik terbaik untuk membuat transaksi idempoten dan menerapkan kendala keunikan.

Mengimpor driver

Contoh kode berikut mengimpor driver.

JavaScript
var qldb = require('amazon-qldb-driver-nodejs'); var ionjs = require('ion-js');
TypeScript
import { QldbDriver, TransactionExecutor } from "amazon-qldb-driver-nodejs"; import { dom, dumpBinary, load } from "ion-js";
catatan

Contoh ini juga mengimpor paket Amazon Ion (ion-js). Anda memerlukan paket ini untuk memproses data Ion saat menjalankan beberapa operasi data dalam referensi ini. Untuk mempelajari selengkapnya, lihat Bekerja dengan Amazon Ion.

Beri contoh driver

Contoh kode berikut membuat sebuah instance dari driver yang menghubungkan ke nama ledger tertentu menggunakan pengaturan default.

JavaScript
const qldbDriver = new qldb.QldbDriver("vehicle-registration");
TypeScript
const qldbDriver: QldbDriver = new QldbDriver("vehicle-registration");

Operasi CRUD

QLDB menjalankan operasi buat, membaca, memperbarui, dan menghapus (CRUD) sebagai bagian dari transaksi.

Awas

Sebagai praktik terbaik, buatlah transaksi tulis Anda benar-benar idempoten.

Melakukan transaksi idempoten

Kami menyarankan Anda melakukan transaksi tulis idempoten untuk menghindari efek samping yang tidak terduga dalam kasus percobaan ulang. Transaksi idempoten jika dapat berjalan beberapa kali dan menghasilkan hasil yang identik setiap kali.

Misalnya, pertimbangkan transaksi yang memasukkan dokumen ke dalam tabel bernamaPerson. Transaksi pertama-tama harus memeriksa apakah dokumen sudah ada dalam tabel atau tidak. Tanpa pemeriksaan ini, tabel mungkin berakhir dengan dokumen duplikat.

Misalkan QLDB berhasil melakukan transaksi di sisi server, tetapi klien kali keluar sambil menunggu respon. Jika transaksi tidak idempoten, dokumen yang sama dapat dimasukkan lebih dari sekali dalam kasus percobaan ulang.

Menggunakan indeks untuk menghindari pemindaian tabel penuh

Kami juga menyarankan Anda menjalankan pernyataan dengan klausaWHERE predikat menggunakan operator kesetaraan pada bidang yang diindeks atau ID dokumen; misalnya,WHERE indexedField = 123 atauWHERE indexedField IN (456, 789). Tanpa pencarian yang diindeks ini, QLDB perlu melakukan pemindaian tabel, yang dapat menyebabkan batas waktu transaksi atau konflik kontrol konkurensi (OCC) yang optimis.

Untuk informasi lebih lanjut tentang OCC, lihatModel Konkurensi Amazon QLDB.

Transaksi yang dibuat secara implisit

Metode QldbDriver.executeLambda menerima fungsi lambda yang menerima instance TransactionExecutor, yang dapat Anda gunakan untuk menjalankan pernyataan. ContohTransactionExecutor membungkus transaksi yang dibuat secara implisit.

Anda dapat menjalankan pernyataan dalam fungsi lambda dengan menggunakan metode eksekusi dari pelaksana transaksi. Pengemudi secara implisit melakukan transaksi ketika fungsi lambda kembali.

catatan

executeMetode ini mendukung tipe Amazon Ion dan tipe asli Node.js. Jika Anda meneruskan tipe asli Node.js sebagai argumenexecute, driver mengubahnya menjadi tipe Ion menggunakanion-js paket (asalkan konversi untuk tipe data Node.js yang diberikan didukung). Untuk tipe data dan aturan konversi yang didukung, lihat Ion JavaScript DOM README.

Bagian berikut menunjukkan cara menjalankan operasi CRUD dasar, menentukan logika percobaan ulang kustom, dan menerapkan batasan keunikan.

Membuat Tabel

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { await txn.execute("CREATE TABLE Person"); }); })();
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { await txn.execute('CREATE TABLE Person'); }); }());

Membuat indeks

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { await txn.execute("CREATE INDEX ON Person (GovId)"); }); })();
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { await txn.execute('CREATE INDEX ON Person (GovId)'); }); }());

Membaca dokumen

JavaScript
(async function() { // Assumes that Person table has documents as follows: // { "GovId": "TOYENC486FH", "FirstName": "Brent" } await qldbDriver.executeLambda(async (txn) => { const results = (await txn.execute("SELECT * FROM Person WHERE GovId = 'TOYENC486FH'")).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());
TypeScript
(async function(): Promise<void> { // Assumes that Person table has documents as follows: // { "GovId": "TOYENC486FH", "FirstName": "Brent" } await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { const results: dom.Value[] = (await txn.execute("SELECT * FROM Person WHERE GovId = 'TOYENC486FH'")).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());

Menggunakan parameter kueri

Contoh kode berikut menggunakan parameter jenis query asli.

JavaScript
(async function() { // Assumes that Person table has documents as follows: // { "GovId": "TOYENC486FH", "FirstName": "Brent" } await qldbDriver.executeLambda(async (txn) => { const results = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', 'TOYENC486FH')).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());
TypeScript
(async function(): Promise<void> { // Assumes that Person table has documents as follows: // { "GovId": "TOYENC486FH", "FirstName": "Brent" } await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { const results: dom.Value[] = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', 'TOYENC486FH')).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());

Contoh kode berikut menggunakan parameter kueri tipe Ion.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { const govId = ionjs.load("TOYENC486FH"); const results = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', govId)).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { const govId: dom.Value = load("TOYENC486FH"); const results: dom.Value[] = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', govId)).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());

Contoh kode berikut menggunakan beberapa parameter query.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { const results = (await txn.execute('SELECT * FROM Person WHERE GovId = ? AND FirstName = ?', 'TOYENC486FH', 'Brent')).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { const results: dom.Value[] = (await txn.execute('SELECT * FROM Person WHERE GovId = ? AND FirstName = ?', 'TOYENC486FH', 'Brent')).getResultList(); for (let result of results) { console.log(result.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(result.get('FirstName')); // prints [String: 'Brent'] } }); }());

Contoh kode berikut menggunakan daftar parameter query.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { const govIds = ['TOYENC486FH','LOGANB486CG','LEWISR261LL']; /* Assumes that Person table has documents as follows: { "GovId": "TOYENC486FH", "FirstName": "Brent" } { "GovId": "LOGANB486CG", "FirstName": "Brent" } { "GovId": "LEWISR261LL", "FirstName": "Raul" } */ const results = (await txn.execute('SELECT * FROM Person WHERE GovId IN (?,?,?)', ...govIds)).getResultList(); for (let result of results) { console.log(result.get('GovId')); console.log(result.get('FirstName')); /* prints: [String: 'TOYENC486FH'] [String: 'Brent'] [String: 'LOGANB486CG'] [String: 'Brent'] [String: 'LEWISR261LL'] [String: 'Raul'] */ } }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { const govIds: string[] = ['TOYENC486FH','LOGANB486CG','LEWISR261LL']; /* Assumes that Person table has documents as follows: { "GovId": "TOYENC486FH", "FirstName": "Brent" } { "GovId": "LOGANB486CG", "FirstName": "Brent" } { "GovId": "LEWISR261LL", "FirstName": "Raul" } */ const results: dom.Value[] = (await txn.execute('SELECT * FROM Person WHERE GovId IN (?,?,?)', ...govIds)).getResultList(); for (let result of results) { console.log(result.get('GovId')); console.log(result.get('FirstName')); /* prints: [String: 'TOYENC486FH'] [String: 'Brent'] [String: 'LOGANB486CG'] [String: 'Brent'] [String: 'LEWISR261LL'] [String: 'Raul'] */ } }); }());
catatan

Ketika Anda menjalankan kueri tanpa pencarian yang diindeks, itu akan memanggil pemindaian tabel penuh. Dalam contoh ini, kami sarankan memiliki indeks diGovId lapangan untuk mengoptimalkan kinerja. Tanpa indeks aktifGovId, kueri dapat memiliki lebih banyak latensi dan juga dapat menyebabkan pengecualian konflik OCC atau batas waktu transaksi.

Memasukkan dokumen

Contoh kode berikut menyisipkan tipe data asli.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { // Check if doc with GovId:TOYENC486FH exists // This is critical to make this transaction idempotent const results = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', 'TOYENC486FH')).getResultList(); // Insert the document after ensuring it doesn't already exist if (results.length == 0) { const doc = { 'FirstName': 'Brent', 'GovId': 'TOYENC486FH', }; await txn.execute('INSERT INTO Person ?', doc); } }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { // Check if doc with GovId:TOYENC486FH exists // This is critical to make this transaction idempotent const results: dom.Value[] = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', 'TOYENC486FH')).getResultList(); // Insert the document after ensuring it doesn't already exist if (results.length == 0) { const doc: Record<string, string> = { 'FirstName': 'Brent', 'GovId': 'TOYENC486FH', }; await txn.execute('INSERT INTO Person ?', doc); } }); }());

Contoh kode berikut menyisipkan tipe data Ion.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { // Check if doc with GovId:TOYENC486FH exists // This is critical to make this transaction idempotent const results = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', 'TOYENC486FH')).getResultList(); // Insert the document after ensuring it doesn't already exist if (results.length == 0) { const doc = { 'FirstName': 'Brent', 'GovId': 'TOYENC486FH', }; // Create a sample Ion doc const ionDoc = ionjs.load(ionjs.dumpBinary(doc)); await txn.execute('INSERT INTO Person ?', ionDoc); } }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { // Check if doc with GovId:TOYENC486FH exists // This is critical to make this transaction idempotent const results: dom.Value[] = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', 'TOYENC486FH')).getResultList(); // Insert the document after ensuring it doesn't already exist if (results.length == 0) { const doc: Record<string, string> = { 'FirstName': 'Brent', 'GovId': 'TOYENC486FH', }; // Create a sample Ion doc const ionDoc: dom.Value = load(dumpBinary(doc)); await txn.execute('INSERT INTO Person ?', ionDoc); } }); }());

Transaksi ini menyisipkan dokumen ke dalamPerson tabel. Sebelum memasukkan, pertama-tama memeriksa apakah dokumen sudah ada di tabel. Cek ini membuat transaksi idempoten di alam. Bahkan jika Anda menjalankan transaksi ini beberapa kali, itu tidak akan menyebabkan efek samping yang tidak diinginkan.

catatan

Dalam contoh ini, kami sarankan memiliki indeks diGovId lapangan untuk mengoptimalkan kinerja. Tanpa indeks aktifGovId, pernyataan dapat memiliki lebih banyak latensi dan juga dapat menyebabkan pengecualian konflik OCC atau batas waktu transaksi.

Memasukkan beberapa dokumen dalam satu pernyataan

Untuk menyisipkan beberapa dokumen dengan menggunakanSISIPKAN pernyataan tunggal, Anda dapat melewati parameter daftar jenis untuk pernyataan sebagai berikut.

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

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

Memperbarui dokumen

Contoh kode berikut menggunakan tipe data asli.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { await txn.execute('UPDATE Person SET FirstName = ? WHERE GovId = ?', 'John', 'TOYENC486FH'); }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { await txn.execute('UPDATE Person SET FirstName = ? WHERE GovId = ?', 'John', 'TOYENC486FH'); }); }());

Contoh kode berikut menggunakan tipe data Ion.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { const firstName = ionjs.load("John"); const govId = ionjs.load("TOYENC486FH"); await txn.execute('UPDATE Person SET FirstName = ? WHERE GovId = ?', firstName, govId); }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { const firstName: dom.Value = load("John"); const govId: dom.Value = load("TOYENC486FH"); await txn.execute('UPDATE Person SET FirstName = ? WHERE GovId = ?', firstName, govId); }); }());
catatan

Dalam contoh ini, kami sarankan memiliki indeks diGovId lapangan untuk mengoptimalkan kinerja. Tanpa indeks aktifGovId, pernyataan dapat memiliki lebih banyak latensi dan juga dapat menyebabkan pengecualian konflik OCC atau batas waktu transaksi.

Menghapus dokumen

Contoh kode berikut menggunakan tipe data asli.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { await txn.execute('DELETE FROM Person WHERE GovId = ?', 'TOYENC486FH'); }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { await txn.execute('DELETE FROM Person WHERE GovId = ?', 'TOYENC486FH'); }); }());

Contoh kode berikut menggunakan tipe data Ion.

JavaScript
(async function() { await qldbDriver.executeLambda(async (txn) => { const govId = ionjs.load("TOYENC486FH"); await txn.execute('DELETE FROM Person WHERE GovId = ?', govId); }); }());
TypeScript
(async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { const govId: dom.Value = load("TOYENC486FH"); await txn.execute('DELETE FROM Person WHERE GovId = ?', govId); }); }());
catatan

Dalam contoh ini, kami sarankan memiliki indeks diGovId lapangan untuk mengoptimalkan kinerja. Tanpa indeks aktifGovId, pernyataan dapat memiliki lebih banyak latensi dan juga dapat menyebabkan pengecualian konflik OCC atau batas waktu transaksi.

Menjalankan beberapa pernyataan dalam transaksi

TypeScript
// This code snippet is intentionally trivial. In reality you wouldn't do this because you'd // set your UPDATE to filter on vin and insured, and check if you updated something or not. async function insureCar(driver: QldbDriver, vin: string): Promise<boolean> { return await driver.executeLambda(async (txn: TransactionExecutor) => { const results: dom.Value[] = (await txn.execute( "SELECT insured FROM Vehicles WHERE vin = ? AND insured = FALSE", vin)).getResultList(); if (results.length > 0) { await txn.execute( "UPDATE Vehicles SET insured = TRUE WHERE vin = ?", vin); return true; } return false; }); };

Logika coba lagi

executeLambdaMetode pengemudi memiliki mekanisme coba ulang bawaan yang mencoba ulang transaksi jika terjadi pengecualian yang dapat dicoba ulang (seperti batas waktu atau konflik OCC). Jumlah maksimum upaya coba lagi dan strategi backoff dapat dikonfigurasi.

Batas percobaan ulang default adalah4, dan strategi backoff default adalah defaultBackoffFunctiondengan basis10 milidetik. Anda dapat mengatur konfigurasi coba ulang per contoh driver dan juga per transaksi dengan menggunakan instance RetryConfig.

Contoh kode berikut menentukan logika coba lagi dengan batas percobaan ulang kustom dan strategi cadangan khusus untuk instance driver.

JavaScript
var qldb = require('amazon-qldb-driver-nodejs'); // Configuring retry limit to 2 const retryConfig = new qldb.RetryConfig(2); const qldbDriver = new qldb.QldbDriver("test-ledger", undefined, undefined, retryConfig); // Configuring a custom backoff which increases delay by 1s for each attempt. const customBackoff = (retryAttempt, error, transactionId) => { return 1000 * retryAttempt; }; const retryConfigCustomBackoff = new qldb.RetryConfig(2, customBackoff); const qldbDriverCustomBackoff = new qldb.QldbDriver("test-ledger", undefined, undefined, retryConfigCustomBackoff);
TypeScript
import { BackoffFunction, QldbDriver, RetryConfig } from "amazon-qldb-driver-nodejs" // Configuring retry limit to 2 const retryConfig: RetryConfig = new RetryConfig(2); const qldbDriver: QldbDriver = new QldbDriver("test-ledger", undefined, undefined, retryConfig); // Configuring a custom backoff which increases delay by 1s for each attempt. const customBackoff: BackoffFunction = (retryAttempt: number, error: Error, transactionId: string) => { return 1000 * retryAttempt; }; const retryConfigCustomBackoff: RetryConfig = new RetryConfig(2, customBackoff); const qldbDriverCustomBackoff: QldbDriver = new QldbDriver("test-ledger", undefined, undefined, retryConfigCustomBackoff);

Contoh kode berikut menetapkan logika percobaan ulang dengan batas percobaan ulang kustom dan strategi cadangan khusus untuk eksekusi lambda tertentu. Konfigurasi ini untukexecuteLambda menimpa logika coba ulang yang diatur untuk instance driver.

JavaScript
var qldb = require('amazon-qldb-driver-nodejs'); // Configuring retry limit to 2 const retryConfig1 = new qldb.RetryConfig(2); const qldbDriver = new qldb.QldbDriver("test-ledger", undefined, undefined, retryConfig1); // Configuring a custom backoff which increases delay by 1s for each attempt. const customBackoff = (retryAttempt, error, transactionId) => { return 1000 * retryAttempt; }; const retryConfig2 = new qldb.RetryConfig(2, customBackoff); // The config `retryConfig1` will be overridden by `retryConfig2` (async function() { await qldbDriver.executeLambda(async (txn) => { await txn.execute('CREATE TABLE Person'); }, retryConfig2); }());
TypeScript
import { BackoffFunction, QldbDriver, RetryConfig, TransactionExecutor } from "amazon-qldb-driver-nodejs" // Configuring retry limit to 2 const retryConfig1: RetryConfig = new RetryConfig(2); const qldbDriver: QldbDriver = new QldbDriver("test-ledger", undefined, undefined, retryConfig1); // Configuring a custom backoff which increases delay by 1s for each attempt. const customBackoff: BackoffFunction = (retryAttempt: number, error: Error, transactionId: string) => { return 1000 * retryAttempt; }; const retryConfig2: RetryConfig = new RetryConfig(2, customBackoff); // The config `retryConfig1` will be overridden by `retryConfig2` (async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { await txn.execute('CREATE TABLE Person'); }, retryConfig2); }());

Menerapkan kendala keunikan

QLDB tidak mendukung indeks unik, tetapi Anda dapat menerapkan perilaku ini dalam aplikasi Anda.

Misalkan Anda ingin menerapkan kendala keunikan padaGovId bidang dalamPerson tabel. Untuk melakukan ini, Anda dapat menulis transaksi yang melakukan hal berikut:

  1. Menegaskan bahwa tabel tidak memiliki dokumen yang ada dengan ditentukanGovId.

  2. Masukkan dokumen jika pernyataan berlalu.

Jika transaksi yang bersaing secara bersamaan melewati pernyataan, hanya satu dari transaksi yang akan berhasil dilakukan. Transaksi lainnya akan gagal dengan pengecualian konflik OCC.

Contoh kode berikut menunjukkan cara menerapkan logika kendala keunikan ini.

JavaScript
const govId = 'TOYENC486FH'; const document = { 'FirstName': 'Brent', 'GovId': 'TOYENC486FH', }; (async function() { await qldbDriver.executeLambda(async (txn) => { // Check if doc with GovId = govId exists const results = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', govId)).getResultList(); // Insert the document after ensuring it doesn't already exist if (results.length == 0) { await txn.execute('INSERT INTO Person ?', document); } }); })();
TypeScript
const govId: string = 'TOYENC486FH'; const document: Record<string, string> = { 'FirstName': 'Brent', 'GovId': 'TOYENC486FH', }; (async function(): Promise<void> { await qldbDriver.executeLambda(async (txn: TransactionExecutor) => { // Check if doc with GovId = govId exists const results: dom.Value[] = (await txn.execute('SELECT * FROM Person WHERE GovId = ?', govId)).getResultList(); // Insert the document after ensuring it doesn't already exist if (results.length == 0) { await txn.execute('INSERT INTO Person ?', document); } }); })();
catatan

Dalam contoh ini, kami sarankan memiliki indeks diGovId lapangan untuk mengoptimalkan kinerja. Tanpa indeks aktifGovId, pernyataan dapat memiliki lebih banyak latensi dan juga dapat menyebabkan pengecualian konflik OCC atau batas waktu transaksi.

Bekerja dengan Amazon Ion

Bagian berikut menunjukkan cara menggunakan modul Amazon Ion untuk memproses data Ion.

Mengimpor modul Ion

JavaScript
var ionjs = require('ion-js');
TypeScript
import { dom, dumpBinary, dumpText, load } from "ion-js";

Membuat jenis Ion

Contoh kode berikut membuat objek Ion dari teks Ion.

JavaScript
const ionText = '{GovId: "TOYENC486FH", FirstName: "Brent"}'; const ionObj = ionjs.load(ionText); console.log(ionObj.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(ionObj.get('FirstName')); // prints [String: 'Brent']
TypeScript
const ionText: string = '{GovId: "TOYENC486FH", FirstName: "Brent"}'; const ionObj: dom.Value = load(ionText); console.log(ionObj.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(ionObj.get('FirstName')); // prints [String: 'Brent']

Contoh kode berikut membuat objek Ion dari kamus Node.js.

JavaScript
const aDict = { 'GovId': 'TOYENC486FH', 'FirstName': 'Brent' }; const ionObj = ionjs.load(ionjs.dumpBinary(aDict)); console.log(ionObj.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(ionObj.get('FirstName')); // prints [String: 'Brent']
TypeScript
const aDict: Record<string, string> = { 'GovId': 'TOYENC486FH', 'FirstName': 'Brent' }; const ionObj: dom.Value = load(dumpBinary(aDict)); console.log(ionObj.get('GovId')); // prints [String: 'TOYENC486FH'] console.log(ionObj.get('FirstName')); // prints [String: 'Brent']

Mendapatkan dump biner Ion

JavaScript
// ionObj is an Ion struct console.log(ionjs.dumpBinary(ionObj).toString()); // prints 224,1,0,234,238,151,129,131,222,147,135,190,144,133,71,111,118,73,100,137,70,105,114,115,116,78,97,109,101,222,148,138,139,84,79,89,69,78,67,52,56,54,70,72,139,133,66,114,101,110,116
TypeScript
// ionObj is an Ion struct console.log(dumpBinary(ionObj).toString()); // prints 224,1,0,234,238,151,129,131,222,147,135,190,144,133,71,111,118,73,100,137,70,105,114,115,116,78,97,109,101,222,148,138,139,84,79,89,69,78,67,52,56,54,70,72,139,133,66,114,101,110,116

Mendapatkan dump teks Ion

JavaScript
// ionObj is an Ion struct console.log(ionjs.dumpText(ionObj)); // prints {GovId:"TOYENC486FH",FirstName:"Brent"}
TypeScript
// ionObj is an Ion struct console.log(dumpText(ionObj)); // prints {GovId:"TOYENC486FH",FirstName:"Brent"}

Untuk informasi selengkapnya tentang Ion, lihat dokumentasi Amazon Ion di GitHub. Untuk contoh kode lebih lanjut bekerja dengan Ion di QLDB, lihatBekerja dengan tipe data Amazon Ion di Amazon QLDB.