Contenidos de revistas en Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Contenidos de revistas en Amazon QLDB

En Amazon QLDB, elbitácoraes el registro transaccional inmutable que almacena el historial completo y verificable de todos los cambios en sus datos. La revista es solo para agregar y se compone de un conjunto secuenciado y encadenado de hash deblocksque contienen los datos confirmados y otros metadatos del sistema. QLDB escribe un bloque encadenado en el diario de una transacción.

En esta sección se proporciona un ejemplo de un bloque de diario con datos de ejemplo y se describe el contenido de un bloque.

Ejemplo de bloque

Un bloque de diario contiene metadatos de transacciones junto con entradas que representan las revisiones de documentos que se confirmaron en la transacción y elPartiQLdeclaraciones que los comprometían.

A continuación se muestra un ejemplo de bloque con datos de ejemplo.

nota

Este ejemplo de bloque se ofrece solo con fines informativos. Los valores hash que se muestran no son valores hash reales calculados.

{
  blockAddress:{
    strandId:"4o5UuzWSW5PIoOGm5jPA6J",
    sequenceNo:25
  },
  transactionId:"3gtB8Q8dfIMA8lQ5pzHAMo",
  blockTimestamp:2022-06-08T18:46:46.512Z,
  blockHash:{{QS5lJt8vRxT30L9OGL5oU1pxFTe+UlEwakYBCrvGQ4A=}},
  entriesHash:{{buYYc5kV4rrRtJAsrIQnfnhgkzfQ8BKjI0C2vFnYQEw=}},
  previousBlockHash:{{I1UKRIWUgkM1X6042kcoZ/eN1rn0uxhDTc08zw9kZ5I=}},
  entriesHashList:[
    {{BUCXP6oYgmug2AfPZcAZup2lKolJNTbTuV5RA1VaFpo=}},
    {{cTIRkjuULzp/4KaUEsb/S7+TG8FvpFiZHT4tEJGcANc=}},
    {{3aktJSMyJ3C5StZv4WIJLu/w3D8mGtduZvP0ldKUaUM=}},
    {{GPKIJ1+o8mMZmPj/35ZQXoca2z64MVYMCwqs/g080IM=}}
  ],
  transactionInfo:{
    statements:[
      {
        statement:"INSERT INTO VehicleRegistration VALUE ?",
        startTime:2022-06-08T18:46:46.063Z,
        statementDigest:{{KY2nL6UGUPs5lXCLVXcUaBxcEIop0Jvk4MEjcFVBfwI=}}
      },
      {
        statement:"SELECT p_id FROM Person p BY p_id WHERE p.FirstName = ? and p.LastName = ?",
        startTime:2022-06-08T18:46:46.173Z,
        statementDigest:{{QS2nfB8XBf2ozlDx0nvtsliOYDSmNHMYC3IRH4Uh690=}}
      },
      {
        statement:"UPDATE VehicleRegistration r SET r.Owners.PrimaryOwner.PersonId = ? WHERE r.VIN = ?",
        startTime:2022-06-08T18:46:46.278Z,
        statementDigest:{{nGtIA9Qh0/dwIplOR8J5CTeqyUVtNUQgXfltDUo2Aq4=}}
      },
      {
        statement:"DELETE FROM DriversLicense l WHERE l.LicenseNumber = ?",
        startTime:2022-06-08T18:46:46.385Z,
        statementDigest:{{ka783dcEP58Q9AVQ1m9NOJd3JAmEvXLjzl0OjN1BojQ=}}
      }
    ],
    documents:{
      HwVFkn8IMRa0xjze5xcgga:{
        tableName:"VehicleRegistration",
        tableId:"HQZ6cgIMUi204Lq1tT4oaJ",
        statements:[0,2]
      },
      IiPTRxLGJZa342zHFCFT15:{
        tableName:"DriversLicense",
        tableId:"BvtXEB1JxZg0lJlBAtbtSV",
        statements:[3]
      }
    }
  },
  revisions:[
    {
      hash:{{FR1IWcWew0yw1TnRklo2YMF/qtwb7ohsu5FD8A4DSVg=}}
    },
    {
      blockAddress:{
        strandId:"4o5UuzWSW5PIoOGm5jPA6J",
        sequenceNo:25
      },
      hash:{{6TTHbcfIVdWoFC/j90BOZi0JdHzhjSXo1tW+uHd6Dj4=}},
      data:{
        VIN:"1N4AL11D75C109151",
        LicensePlateNumber:"LEWISR261LL",
        State:"WA",
        City:"Seattle",
        PendingPenaltyTicketAmount:90.25,
        ValidFromDate:2017-08-21,
        ValidToDate:2020-05-11,
        Owners:{
          PrimaryOwner:{
            PersonId:"3Ax20JIix5J2ulu2rCMvo2"
          },
          SecondaryOwners:[]
        }
      },
      metadata:{
        id:"HwVFkn8IMRa0xjze5xcgga",
        version:0,
        txTime:2022-06-08T18:46:46.492Z,
        txId:"3gtB8Q8dfIMA8lQ5pzHAMo"
      }
    },
    {
      blockAddress:{
        strandId:"4o5UuzWSW5PIoOGm5jPA6J",
        sequenceNo:25
      },
      hash:{{ZVF/f1uSqd5DIMqzI04CCHaCGFK/J0Jf5AFzSEk0l90=}},
      metadata:{
        id:"IiPTRxLGJZa342zHFCFT15",
        version:1,
        txTime:2022-06-08T18:46:46.492Z,
        txId:"3gtB8Q8dfIMA8lQ5pzHAMo"
      }
    }
  ]
}

En el navegadorrevisions, es posible que algunos objetos de revisión solo contengan unhashvalor y ningún otro atributo. Se trata de revisiones del sistema solo internas que no contienen datos de usuario. Los hashes de estas revisiones forman parte de la cadena completa de hash de la revista, que es necesaria para la verificación criptográfica.

Bloque de contenido

Un bloque de diario tiene los subcampos siguientes:

blockAddress

La ubicación del bloque en el diario. Una dirección es unaAmazon Ionestructura que tiene dos campos:strandIdysequenceNo.

Por ejemplo: {strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}

transactionId

El ID único de la transacción que confirmó el bloque.

blockTimestamp

La marca de tiempo en la que se confirmó el bloqueo en el diario.

blockHash

El valor hash de 256 bits que representa el bloque de forma única. Este es el hash de la concatenación deentriesHashypreviousBlockHash.

entriesHash

El hash que representa todas las entradas del bloque, incluidas las entradas del sistema solo internas. Este es el hash raíz delÁrbol de Merkleen el que los nodos hoja constan de todos los hashes deentriesHashList.

previousBlockHash

El hash del bloque encadenado anterior del diario.

entriesHashList

La lista de hashes que representan cada entrada dentro del bloque. Esta lista puede incluir los siguientes hashes de entrada:

  • El hash de iones que representatransactionInfo. Este valor se calcula tomando el hash de iones de todotransactionInfoEstructura.

  • El hash raíz del árbol Merkle en el que los nodos hoja constan de todos los hashes derevisions.

  • Hash que representan metadatos del sistema solo internos. Es posible que estos hashes no existan en todos los bloques.

transactionInfo

Una estructura de Amazon Ion que contiene información sobre las declaraciones de la transacción que comprometieron el bloqueo. Esta estructura tiene los campos siguientes:

  • statements— La lista de instrucciones de PartiQL ystartTimecuando empezaron a correr. Cada instrucción tiene unstatementDigesthash, que se requiere para calcular el hash deltransactionInfoEstructura.

  • documents— Las identificaciones de los documentos que actualizaron las declaraciones. Cada documento incluye eltableNameytableIdal que pertenece y el índice de cada declaración que lo actualizó.

revisions

La lista de revisiones de documentos que se confirmaron en el bloque. Cada estructura de revisión contiene todos los campos devista comprometidade la revisión.

Esto también puede incluir hashes que representan revisiones del sistema solo internas que forman parte de toda la cadena de hash de una revista.

Aplicación de muestra

Para ver un ejemplo de código Java que valida la cadena de hash de una revista con datos exportados, consulte la GitHub repositoryaws-muestras/amazon-qldb-dmv-samplejava. Esta aplicación de ejemplo incluye los siguientes archivos de clases:

  • ValidateQldbHashChain.java: contiene código de aprendizaje que exporta bloques de diario de un libro mayor y utiliza los datos exportados para validar la cadena hash entre bloques.

  • JournalBlock.java— Contiene un método denominadoverifyBlockHash()que demuestra cómo calcular cada componente hash individual dentro de un bloque. Este método se llama mediante el código del tutorial deValidateQldbHashChain.java.

Para obtener instrucciones acerca de cómo descargar e instalar esta aplicación de ejemplo completa, consulteInstalación de la aplicación de ejemplo Java de Amazon QLDB. Antes de ejecutar el código del tutorial, asegúrese de seguir los pasos 1 a 3 de laTutorial de Javapara configurar un libro mayor de muestra y cargarlo con datos de ejemplo.

Véase también

Para obtener más información acerca de las revistas de QLDB, consulte los siguientes temas: