En esta página se describe cómo realizar lecturas en Spanner fuera del contexto de las transacciones de solo lectura y de lectura y escritura. Si se da alguna de las siguientes situaciones, consulta la página Transacciones:
Si necesitas escribir en función del valor de una o varias lecturas, debes ejecutar la lectura como parte de una transacción de lectura y escritura. Para obtener más información, consulta Transacciones de lectura y escritura.
Si vas a hacer varias llamadas de lectura que requieran una vista coherente de tus datos, debes ejecutar las lecturas como parte de una transacción de solo lectura. Para obtener más información, consulta el artículo sobre transacciones de solo lectura.
Leer tipos
Spanner te permite determinar la actualidad de los datos cuando los lees. Para ello, ofrece dos tipos de lecturas:
- Una lectura sólida es una lectura en una marca de tiempo actual y tiene la garantía de ver todos los datos que se han confirmado hasta el inicio de esta lectura. Spanner usa de forma predeterminada lecturas sólidas para atender las solicitudes de lectura.
- Una lectura inactiva se lee en una marca de tiempo en el pasado. Si tu aplicación es sensible a la latencia, pero tolera los datos obsoletos, las lecturas obsoletas pueden ofrecer ventajas de rendimiento.
Para elegir el tipo de lectura que quieras, define un límite de marca de tiempo en la solicitud de lectura. Sigue estas prácticas recomendadas al elegir un límite de marca de tiempo:
Elige lecturas fuertes siempre que sea posible. Esta es la marca de tiempo predeterminada de las lecturas de Spanner, incluidas las transacciones de solo lectura. Se garantiza que las lecturas sólidas observarán los efectos de todas las transacciones que se hayan confirmado antes del inicio de la operación, independientemente de la réplica que reciba la lectura. Por este motivo, las lecturas sólidas simplifican el código de las aplicaciones y hacen que estas sean más fiables. Consulta más información sobre las propiedades de coherencia de Spanner en TrueTime y coherencia externa.
De forma opcional, para reducir la latencia de lectura de las transacciones de solo lectura que requieren una coherencia sólida, puedes asignar el estado región de concesión de lectura a regiones que no sean líderes, de lectura y escritura o de solo lectura. Para ello, usa concesiones de lectura de Spanner. Las regiones de concesión de lectura ayudan a tu base de datos a reducir la latencia de lectura fuerte en instancias birregionales o multirregionales. Sin embargo, las escrituras experimentan una latencia mayor cuando usas el bloqueo de lectura.
Si la latencia hace que las lecturas sólidas no sean viables en algunas situaciones, utiliza lecturas obsoletas (obsolescencia limitada u obsolescencia exacta) para mejorar el rendimiento en los casos en los que no necesites que las lecturas sean lo más recientes posible. Como se describe en la página Replicación, 15 segundos es un valor de obsolescencia razonable para obtener un buen rendimiento.
Leer datos con un rol de base de datos
Si eres usuario del control de acceso pormenorizado, debes seleccionar un rol de base de datos para ejecutar instrucciones y consultas SQL, así como para realizar operaciones de filas en una base de datos. El rol que elijas se mantendrá durante toda la sesión hasta que lo cambies.
Para obtener instrucciones sobre cómo realizar una lectura con un rol de base de datos, consulta Acceder a una base de datos con un control de acceso pormenorizado.
Métodos de lectura única
Spanner admite métodos de lectura única (es decir, una lectura fuera del contexto de una transacción) en una base de datos para lo siguiente:
- Ejecutar la lectura como una instrucción de consulta de SQL o mediante la API de lectura de Spanner.
- Realizar una lectura fuerte desde una sola fila o varias filas en una tabla.
- Realizar una lectura inactiva de una sola fila o varias filas en una tabla.
- Leer desde una sola fila o varias filas en un índice secundario.
Si quieres dirigir lecturas únicas a una réplica o región específicas en una configuración de instancia multirregional o en una configuración regional personalizada con una o varias regiones de solo lectura opcionales, consulta Lecturas dirigidas.
En las siguientes secciones se describe cómo usar los métodos de lectura con las bibliotecas de cliente de Spanner.
Ejecutar una consulta
A continuación, se muestra cómo ejecutar una instrucción de consulta SQL en una base de datos.
GoogleSQL
C++
Usa ExecuteQuery() para ejecutar una instrucción de consulta SQL en una base de datos.
C#
Usa ExecuteReaderAsync() para consultar la base de datos.
Go
Usa Client.Single().Query para consultar la base de datos.
Java
Usa ReadContext.executeQuery para consultar la base de datos.
Node.js
Usa Database.run para consultar la base de datos.
PHP
Usa Database::execute para consultar la base de datos.
Python
Usa Database.execute_sql para consultar la base de datos.
Ruby
Usa Client#execute para consultar la base de datos.
Consulta las referencias de sintaxis de consultas y funciones y operadores de SQL al crear una instrucción SQL.
Realizar una lectura fuerte
A continuación, se muestra cómo realizar una lectura fuerte de cero o más filas desde una base de datos.
GoogleSQL
C++
El código para leer datos es el mismo que en el ejemplo anterior para consultar Spanner ejecutando una consulta SQL.
C#
El código para leer datos es el mismo que en el ejemplo anterior para consultar Spanner ejecutando una consulta SQL.
Go
Usa Client.Single().Read para leer filas de la base de datos.