Langkah 1: Buat buku besar baru - 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.

Langkah 1: Buat buku besar baru

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

Pada langkah ini, Anda membuat QLDB buku besar Amazon baru bernamavehicle-registration.

Untuk membuat buku besar baru
  1. Tinjau file berikut (Constants.java), yang berisi nilai konstan yang digunakan oleh semua program lain dalam tutorial ini.

    2.x
    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazon.ion.IonSystem; import com.amazon.ion.system.IonSystemBuilder; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.ion.IonObjectMapper; import com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueMapper; /** * Constant values used throughout this tutorial. */ public final class Constants { public static final int RETRY_LIMIT = 4; public static final String LEDGER_NAME = "vehicle-registration"; public static final String STREAM_NAME = "vehicle-registration-stream"; public static final String VEHICLE_REGISTRATION_TABLE_NAME = "VehicleRegistration"; public static final String VEHICLE_TABLE_NAME = "Vehicle"; public static final String PERSON_TABLE_NAME = "Person"; public static final String DRIVERS_LICENSE_TABLE_NAME = "DriversLicense"; public static final String VIN_INDEX_NAME = "VIN"; public static final String PERSON_GOV_ID_INDEX_NAME = "GovId"; public static final String VEHICLE_REGISTRATION_LICENSE_PLATE_NUMBER_INDEX_NAME = "LicensePlateNumber"; public static final String DRIVER_LICENSE_NUMBER_INDEX_NAME = "LicenseNumber"; public static final String DRIVER_LICENSE_PERSONID_INDEX_NAME = "PersonId"; public static final String JOURNAL_EXPORT_S3_BUCKET_NAME_PREFIX = "qldb-tutorial-journal-export"; public static final String USER_TABLES = "information_schema.user_tables"; public static final String LEDGER_NAME_WITH_TAGS = "tags"; public static final IonSystem SYSTEM = IonSystemBuilder.standard().build(); public static final IonObjectMapper MAPPER = new IonValueMapper(SYSTEM); private Constants() { } static { MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); } }
    1.x
    penting

    Untuk paket Amazon Ion, Anda harus menggunakan namespace com.amazon.ion di aplikasi Anda. AWS SDK for Java Tergantung pada paket Ion lain di bawah namespacesoftware.amazon.ion, tetapi ini adalah paket lama yang tidak kompatibel dengan driver. QLDB

    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazon.ion.IonSystem; import com.amazon.ion.system.IonSystemBuilder; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.ion.IonObjectMapper; import com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueMapper; /** * Constant values used throughout this tutorial. */ public final class Constants { public static final int RETRY_LIMIT = 4; public static final String LEDGER_NAME = "vehicle-registration"; public static final String STREAM_NAME = "vehicle-registration-stream"; public static final String VEHICLE_REGISTRATION_TABLE_NAME = "VehicleRegistration"; public static final String VEHICLE_TABLE_NAME = "Vehicle"; public static final String PERSON_TABLE_NAME = "Person"; public static final String DRIVERS_LICENSE_TABLE_NAME = "DriversLicense"; public static final String VIN_INDEX_NAME = "VIN"; public static final String PERSON_GOV_ID_INDEX_NAME = "GovId"; public static final String VEHICLE_REGISTRATION_LICENSE_PLATE_NUMBER_INDEX_NAME = "LicensePlateNumber"; public static final String DRIVER_LICENSE_NUMBER_INDEX_NAME = "LicenseNumber"; public static final String DRIVER_LICENSE_PERSONID_INDEX_NAME = "PersonId"; public static final String JOURNAL_EXPORT_S3_BUCKET_NAME_PREFIX = "qldb-tutorial-journal-export"; public static final String USER_TABLES = "information_schema.user_tables"; public static final String LEDGER_NAME_WITH_TAGS = "tags"; public static final IonSystem SYSTEM = IonSystemBuilder.standard().build(); public static final IonObjectMapper MAPPER = new IonValueMapper(SYSTEM); private Constants() { } static { MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); } }
    catatan

    ConstantsKelas ini mencakup instance dari IonValueMapper kelas Jackson open-source. Anda dapat menggunakan mapper ini untuk memproses data Amazon Ion Anda saat melakukan transaksi baca dan tulis.

    CreateLedger.javaFile ini juga memiliki ketergantungan pada program berikut (DescribeLedger.java), yang menjelaskan status buku besar Anda saat ini.

    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazonaws.services.qldb.AmazonQLDB; import com.amazonaws.services.qldb.model.DescribeLedgerRequest; import com.amazonaws.services.qldb.model.DescribeLedgerResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Describe a QLDB ledger. * * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class DescribeLedger { public static AmazonQLDB client = CreateLedger.getClient(); public static final Logger log = LoggerFactory.getLogger(DescribeLedger.class); private DescribeLedger() { } public static void main(final String... args) { try { describe(Constants.LEDGER_NAME); } catch (Exception e) { log.error("Unable to describe a ledger!", e); } } /** * Describe a ledger. * * @param name * Name of the ledger to describe. * @return {@link DescribeLedgerResult} from QLDB. */ public static DescribeLedgerResult describe(final String name) { log.info("Let's describe ledger with name: {}...", name); DescribeLedgerRequest request = new DescribeLedgerRequest().withName(name); DescribeLedgerResult result = client.describeLedger(request); log.info("Success. Ledger description: {}", result); return result; } }
  2. Kompilasi dan jalankan CreateLedger.java program untuk membuat buku besar bernama. vehicle-registration

    2.x
    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.qldb.AmazonQLDB; import com.amazonaws.services.qldb.AmazonQLDBClientBuilder; import com.amazonaws.services.qldb.model.CreateLedgerRequest; import com.amazonaws.services.qldb.model.CreateLedgerResult; import com.amazonaws.services.qldb.model.DescribeLedgerResult; import com.amazonaws.services.qldb.model.LedgerState; import com.amazonaws.services.qldb.model.PermissionsMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Create a ledger and wait for it to be active. * <p> * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class CreateLedger { public static final Logger log = LoggerFactory.getLogger(CreateLedger.class); public static final Long LEDGER_CREATION_POLL_PERIOD_MS = 10_000L; public static String endpoint = null; public static String region = null; public static AmazonQLDB client = getClient(); private CreateLedger() { } /** * Build a low-level QLDB client. * * @return {@link AmazonQLDB} control plane client. */ public static AmazonQLDB getClient() { AmazonQLDBClientBuilder builder = AmazonQLDBClientBuilder.standard(); if (null != endpoint && null != region) { builder.setEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, region)); } return builder.build(); } public static void main(final String... args) throws Exception { try { client = getClient(); create(Constants.LEDGER_NAME); waitForActive(Constants.LEDGER_NAME); } catch (Exception e) { log.error("Unable to create the ledger!", e); throw e; } } /** * Create a new ledger with the specified ledger name. * * @param ledgerName Name of the ledger to be created. * @return {@link CreateLedgerResult} from QLDB. */ public static CreateLedgerResult create(final String ledgerName) { log.info("Let's create the ledger with name: {}...", ledgerName); CreateLedgerRequest request = new CreateLedgerRequest() .withName(ledgerName) .withPermissionsMode(PermissionsMode.ALLOW_ALL); CreateLedgerResult result = client.createLedger(request); log.info("Success. Ledger state: {}.", result.getState()); return result; } /** * Wait for a newly created ledger to become active. * * @param ledgerName Name of the ledger to wait on. * @return {@link DescribeLedgerResult} from QLDB. * @throws InterruptedException if thread is being interrupted. */ public static DescribeLedgerResult waitForActive(final String ledgerName) throws InterruptedException { log.info("Waiting for ledger to become active..."); while (true) { DescribeLedgerResult result = DescribeLedger.describe(ledgerName); if (result.getState().equals(LedgerState.ACTIVE.name())) { log.info("Success. Ledger is active and ready to use."); return result; } log.info("The ledger is still creating. Please wait..."); Thread.sleep(LEDGER_CREATION_POLL_PERIOD_MS); } } }
    1.x
    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazonaws.services.qldb.AmazonQLDB; import com.amazonaws.services.qldb.AmazonQLDBClientBuilder; import com.amazonaws.services.qldb.model.CreateLedgerRequest; import com.amazonaws.services.qldb.model.CreateLedgerResult; import com.amazonaws.services.qldb.model.DescribeLedgerResult; import com.amazonaws.services.qldb.model.LedgerState; import com.amazonaws.services.qldb.model.PermissionsMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Create a ledger and wait for it to be active. * * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class CreateLedger { public static final Logger log = LoggerFactory.getLogger(CreateLedger.class); public static final Long LEDGER_CREATION_POLL_PERIOD_MS = 10_000L; public static AmazonQLDB client = getClient(); private CreateLedger() { } /** * Build a low-level QLDB client. * * @return {@link AmazonQLDB} control plane client. */ public static AmazonQLDB getClient() { return AmazonQLDBClientBuilder.standard().build(); } public static void main(final String... args) throws Exception { try { create(Constants.LEDGER_NAME); waitForActive(Constants.LEDGER_NAME); } catch (Exception e) { log.error("Unable to create the ledger!", e); throw e; } } /** * Create a new ledger with the specified ledger name. * * @param ledgerName * Name of the ledger to be created. * @return {@link CreateLedgerResult} from QLDB. */ public static CreateLedgerResult create(final String ledgerName) { log.info("Let's create the ledger with name: {}...", ledgerName); CreateLedgerRequest request = new CreateLedgerRequest() .withName(ledgerName) .withPermissionsMode(PermissionsMode.ALLOW_ALL); CreateLedgerResult result = client.createLedger(request); log.info("Success. Ledger state: {}.", result.getState()); return result; } /** * Wait for a newly created ledger to become active. * * @param ledgerName * Name of the ledger to wait on. * @return {@link DescribeLedgerResult} from QLDB. * @throws InterruptedException if thread is being interrupted. */ public static DescribeLedgerResult waitForActive(final String ledgerName) throws InterruptedException { log.info("Waiting for ledger to become active..."); while (true) { DescribeLedgerResult result = DescribeLedger.describe(ledgerName); if (result.getState().equals(LedgerState.ACTIVE.name())) { log.info("Success. Ledger is active and ready to use."); return result; } log.info("The ledger is still creating. Please wait..."); Thread.sleep(LEDGER_CREATION_POLL_PERIOD_MS); } } }
    catatan
    • Dalam createLedger panggilan, Anda harus menentukan nama buku besar dan mode izin. Sebaiknya gunakan mode STANDARD izin untuk memaksimalkan keamanan data buku besar Anda.

    • Saat Anda membuat buku besar, perlindungan penghapusan diaktifkan secara default. Ini adalah fitur QLDB yang mencegah buku besar dihapus oleh pengguna mana pun. Anda memiliki opsi untuk menonaktifkan perlindungan penghapusan pada pembuatan buku besar menggunakan atau (). QLDB API AWS Command Line Interface AWS CLI

    • Secara opsional, Anda juga dapat menentukan tag untuk dilampirkan ke buku besar Anda.

Untuk memverifikasi koneksi Anda ke buku besar baru, lanjutkan keLangkah 2: Uji konektivitas ke buku besar.