Google Cloud Datastore es un servicio de base de datos NoSQL proporcionado por Google Cloud Platform . Es una base de datos totalmente administrada que puede manejar grandes cantidades de datos y forma parte de los numerosos servicios que ofrece Google Cloud Platform. Está diseñada para manejar datos estructurados (principalmente basados en documentos, como el formato JSON ) y también ofrece una plataforma altamente confiable y eficiente para crear aplicaciones escalables. A diferencia de las bases de datos relacionales tradicionales, se trata de un concepto de base de datos sin esquema. Esto proporciona un modelado de datos flexible y cambios de esquema dinámicos sin tiempo de inactividad en los servicios que dependen de esta base de datos. Google Cloud Datastore es una plataforma utilizada para el manejo de datos en aplicaciones móviles, aplicaciones web y también en sistemas IoT. Esto se debe a sus características clave, como el escalado automático, la fuerte consistencia y la integración fluida con otros servicios de Google Cloud. Google Cloud Datastore está diseñado para manejar aplicaciones de software que requieren alta escalabilidad , lecturas y escrituras de baja latencia y administración automática de datos en sistemas distribuidos . Google Cloud Datastore organiza los datos en entidades y propiedades, donde las entidades se agrupan en tipos. Este concepto es similar al de las tablas en las bases de datos relacionales; sin embargo, al tratarse de una base de datos NoSQL, carece de las restricciones de esquema . Cada entidad en Datastore se identifica de forma única mediante una clave. Esta clave puede ser un identificador personalizado definido por el usuario o generarse automáticamente por el sistema.
Google Cloud Datastore ofrece una API y bibliotecas cliente para distintos lenguajes de programación de propósito general, como Python, Java y Node.js. Esta API también cuenta con diferentes versiones para estos lenguajes, lo que permite integrar Cloud Datastore tanto con aplicaciones antiguas como modernas escritas en ellos. Además, ofrece compatibilidad con operaciones asíncronas , lo que permite a los desarrolladores crear sistemas sin bloqueo y de alta capacidad de respuesta. En cuanto a la consistencia de datos, Google Cloud Datastore proporciona una consistencia fuerte para búsquedas de entidades individuales y admite la consistencia eventual para consultas entre múltiples entidades.
Historia
Google Cloud Datastore se anunció el 11 de abril de 2013 como una base de datos de documentos NoSQL totalmente administrada , diseñada para admitir aplicaciones web y móviles a gran escala. Se basaba en el Datastore original utilizado en Google App Engine desde 2008, pero se diseñó para ofrecer características como escalabilidad, mayor disponibilidad y replicación automática de datos en múltiples centros de datos .
Antes del lanzamiento de Cloud Datastore, los desarrolladores de Google App Engine trabajaban con una base de datos integrada que solo funcionaba con aplicaciones de App Engine. Cuando Google Cloud Platform empezó a crecer en el mercado, los desarrolladores buscaban una base de datos que pudieran usar fuera de App Engine para integrarla con sus aplicaciones. Necesitaban mayor flexibilidad y amplia disponibilidad. Cloud Datastore satisfizo esta necesidad al añadir funciones como la fragmentación automática , la indexación y la compatibilidad con la consistencia eventual.
Google lanzó Cloud Firestore en 2018. Se trataba de una nueva base de datos NoSQL con funciones como actualizaciones en tiempo real, soporte sin conexión y una ejecución de consultas más rápida. Su objetivo era reemplazar a Cloud Datastore. Se recomendaba a los nuevos usuarios que utilizaran Firestore. Sin embargo, dado que muchos desarrolladores seguían creando aplicaciones que utilizaban Datastore, Google decidió cambiarle el nombre a "Modo Datastore en Firestore" en 2020. De esta forma, los usuarios existentes podían seguir utilizando las funciones habituales de Datastore, con la opción de actualizar a Firestore más adelante cuando lo necesitaran.
Incluso después del auge de Firestore, Cloud Datastore sigue siendo ampliamente utilizado en aplicaciones heredadas, especialmente en aquellas que requieren una base de datos NoSQL administrada con replicación multirregión robusta y escalado automático . Google Cloud continúa brindando soporte a estos sistemas heredados para que sigan siendo confiables y completamente funcionales en el futuro.
Descripción general
Acceso y gestión
Los usuarios pueden utilizar la base de datos en Google Cloud Datastore mediante la consola de Google Cloud y la herramienta de línea de comandos gcloud. También pueden utilizar bibliotecas cliente para diferentes lenguajes de programación. Según sus necesidades, pueden optar por utilizar una interfaz gráfica o escribir código para interactuar con la base de datos. [ 1 ]
Organización de datos
En Google Cloud Datastore, los datos se organizan en entidades, similares a los registros individuales. Estas entidades se agrupan por tipos, al igual que las tablas en una base de datos tradicional. Sin embargo, a diferencia de las bases de datos relacionales, las entidades del mismo tipo no tienen que seguir una estructura fija (como un esquema predefinido). Pueden tener diferentes conjuntos de propiedades.
Entidades y propiedades
Cada entidad representa un conjunto estructurado de propiedades. Las propiedades son pares clave-valor. Algunos ejemplos de valores son cadenas de texto, números, valores booleanos, marcas de tiempo, matrices y puntos geográficos. La flexibilidad de las propiedades permite a los desarrolladores modelar estructuras de datos complejas sin un esquema rígido.
Claves de entidad
Cada entidad en Datastore se identifica de forma única mediante una clave . Una clave incluye:
- Un ID de proyecto (el identificador del proyecto de Google Cloud),
- Un espacio de nombres opcional (utilizado para multitenencia),
- Un tipo (que define el tipo de entidad),
- Y un nombre o un identificador numérico que distinga a la entidad dentro de su tipo.
Opcionalmente, las entidades pueden agruparse en grupos de entidades para permitir actualizaciones transaccionales que involucren a varias entidades.
Tipos de datos
Google Cloud Datastore admite una variedad de tipos de datos de propiedades, como se muestra a continuación:
- Cadena
- Entero
- Flotar
- Booleano
- Marca de tiempo
- Matriz (Lista)
- Entidad incrustada
- GeoPoint (coordenadas geográficas)
- Datos binarios (Blob)
Esta variedad permite modelar datos estructurados y semiestructurados en diversos tipos de datos.
Consultas e índices
El almacén de datos indexa automáticamente cada propiedad para facilitar las consultas. Para consultas más complejas que involucren varias propiedades, se pueden definir índices compuestos manualmente. La gestión de índices se realiza normalmente mediante un archivo index.yaml o a través de la consola.
GQL
GQL (Google Cloud Datastore Query Language) es un lenguaje de consulta similar a SQL, diseñado para interactuar con Google Cloud Datastore. GQL permite a los usuarios consultar el servicio Datastore mediante sentencias similares a las de SQL, pero específicamente adaptado a la naturaleza NoSQL de esta plataforma. GQL ofrece maneras de filtrar, ordenar y realizar operaciones en las entidades de Datastore sin necesidad de escribir consultas complejas en las API subyacentes de Datastore.
A diferencia de SQL, GQL tiene limitaciones en cuanto a los tipos de uniones [ 2 ] y relaciones que puede manejar. Sin embargo, admite consultas por propiedades, incluyendo igualdad y desigualdad, así como consultas de rango. Los usuarios pueden utilizar GQL para consultar entidades según múltiples condiciones. Esto hace que GQL sea adecuado para una amplia gama de casos de uso, como la recuperación de datos de usuario, catálogos de productos e incluso la actualización de la base de datos.
GQL también admite consultas de ancestros. Esto permite a los usuarios obtener entidades relacionadas según su posición en una jerarquía. Esto es fundamental para aplicaciones que requieren la gestión de datos jerárquicos, como sistemas de gestión de contenido o modelos de datos con relaciones padre-hijo. Si bien GQL simplifica las consultas, opera dentro de las limitaciones del modelo de consistencia eventual de Datastore.
Ejemplo de consulta GQL:
SELECCIONAR * DE Tarea DONDE estado = 'completado' Y prioridad = 'alta' ORDENAR POR creado DESCEsta consulta obtendrá todas las entidades de Tarea con estado "completado" y prioridad "alta". Además, las ordenará por fecha de creación en orden descendente.
Aunque GQL tiene una interfaz fácil de usar para consultar Google Cloud Datastore, al trabajar con consultas y uniones más complejas, necesitamos usar las API nativas de Datastore, como la API de Google Cloud Datastore. Esta API ofrece mayor flexibilidad y control para los desarrolladores. [ 3 ] Por ejemplo, no podemos realizar la siguiente operación de unión:
SELECT * FROM Customer JOIN `Order` ON Customer . customer_id = `Order` . customer_idPodemos implementar una lógica como la del siguiente código. Básicamente, es un proceso de dos pasos. Primero, usamos la API de Datastore para obtener el cliente por su ID. Luego, usamos ese ID de cliente para crear otra consulta y recuperar los pedidos relacionados.
from google.cloud import datastorecliente = almacén de datos.Cliente ()# paso 1 customerkey = client . key ( "Customer" , "C123456" ) customer = client . get ( customerkey )# paso 2 consulta = cliente . consulta ( tipo = "Orden" ) consulta . agregar_filtro ( "id_cliente" , "=" , "C123456" ) pedidos = lista ( consulta . obtener ())Buenas prácticas para desarrolladores
Estrategia de indexación
Por defecto, Cloud Datastore indexa automáticamente todas las propiedades de cada entidad para agilizar las consultas. Sin embargo, al trabajar con consultas complejas que incluyen múltiples filtros u órdenes de clasificación, es necesario definir manualmente índices compuestos en un archivo index.yaml. Los desarrolladores deben revisar cuidadosamente los planes de consulta y gestionar los índices, ya que los índices innecesarios pueden aumentar la latencia de escritura y los costos de almacenamiento. Esto perjudica el rendimiento, por lo que debe evitarse.
Limitaciones de consulta
Datastore no admite uniones, subconsultas ni operaciones de agregación como las que se encuentran en bases de datos relacionales, como MS SQL y MySQL. Por ello, el diseño de aplicaciones suele requerir la desnormalización . Este proceso consiste en almacenar datos relacionados juntos dentro de una única entidad o utilizar grupos de entidades para mantener relaciones jerárquicas. Se requieren filtros de consulta para que coincidan con los índices existentes, y ciertas combinaciones de operaciones de desigualdad y ordenación pueden requerir índices personalizados.
Transacciones y coherencia
Cloud Datastore admite transacciones ACID [ 4 ] para operaciones en entidades dentro de un mismo grupo de entidades. Esto permite actualizaciones seguras de datos relacionados, como entidades padre e hija. Cabe destacar que las búsquedas de entidades individuales y las consultas de ancestros ofrecen una fuerte consistencia; sin embargo, las consultas generales en varios grupos de entidades ofrecen consistencia eventual. [ 5 ]
Soporte de lenguaje y API
Google Cloud Datastore ofrece una interfaz RESTful y una API gRPC. [ 6 ] Esto resulta muy útil para los desarrolladores que necesitan diseñar aplicaciones distribuidas. Estas API ofrecen acceso directo a las funcionalidades de Datastore, como transacciones, consultas y gestión de entidades. Las bibliotecas cliente se basan en estas API y ocultan los detalles complejos. Facilitan el uso de diferentes lenguajes como Python, Java, Go, Node.js y C# al gestionar aspectos como la gestión de conexiones, los reintentos y la serialización. [ 7 ] La API de Datastore también está optimizada para ofrecer un acceso de alto rendimiento y baja latencia. Además, admite operaciones por lotes, consultas de ancestros y lecturas con consistencia fuerte dentro de grupos de entidades. Gracias a estas funcionalidades, los desarrolladores pueden crear aplicaciones escalables sin necesidad de gestionar por sí mismos una infraestructura de base de datos compleja.
Ejecución de consultas
Cuando un usuario envía una solicitud a Google Cloud Datastore para cualquier comando de base de datos, como escribir (insertar, actualizar, eliminar) o leer (obtener o consultar), el sistema GCP sigue una secuencia de pasos predefinida para realizar la tarea requerida, manteniendo al mismo tiempo un rendimiento, particionamiento y consistencia más rápidos.
Escribir comandos (put, update, delete)
A diferencia de los sistemas relacionales tradicionales que analizan consultas SQL y optimizan planes de ejecución, GCP Datastore utiliza una arquitectura de estilo de documento NoSQL. Cada entidad se identifica de forma única mediante una clave compuesta por un tipo, un identificador (o nombre) y, opcionalmente, una clave principal. [ 8 ]
El primer paso en una operación de escritura consiste en autenticar y verificar los permisos de IAM (Administración de Identidades y Accesos) del usuario. Una vez verificada la autorización y si no se detecta ningún problema, mediante una estrategia de particionamiento basada en claves, la solicitud se enruta al grupo de entidades correcto y, posteriormente, a un nodo de Datastore específico. La clave de la entidad determina qué partición debe procesar la solicitud.
Si la escritura se dirige a un único grupo de entidades, Datastore ofrece una consistencia fuerte. Las escrituras se serializan y se aplican de forma consistente. Sin embargo, cuando la escritura afecta a varios grupos de entidades, depende de la consistencia eventual y se deben usar transacciones o escrituras por lotes para gestionar la operación.
Datastore se basa en la infraestructura Spanner de Google Cloud para garantizar una alta durabilidad y disponibilidad de los datos. Cada comando de escritura se duplica en varias zonas de la región seleccionada. Sin embargo, este proceso se abstrae para los desarrolladores, lo que significa que no necesitan comprender los detalles técnicos del motor de la base de datos al ejecutar los comandos de escritura. Cada operación de escritura actualiza y gestiona automáticamente todos los índices compuestos y de propiedad única relevantes.
Comandos de lectura (get, query)
Las funciones de lectura, como `get()` y las consultas estructuradas (mediante `query()`), se basan en cómo se almacenan e indexan los datos. Al realizar una búsqueda de entidad, una llamada a `get()` utiliza una clave de entidad para acceder directamente a la partición correspondiente y recuperar la entidad. Sin embargo, si la entidad pertenece al mismo grupo de entidades y no se produce ningún retraso en la replicación, esta operación de lectura es altamente consistente.
Al ejecutar una consulta, una consulta estructurada que incluya filtrado u ordenación se traduce en una búsqueda en el índice en lugar de un escaneo completo de la tabla. El motor de consultas utiliza los índices pertinentes para identificar las claves de entidad que coinciden con los criterios de la consulta y, a continuación, recupera las entidades completas.
GCP Datastore ofrece dos modos de consistencia para las consultas. El primero es la consistencia fuerte, que se aplica a las consultas de ancestros o búsquedas directas de claves dentro de un mismo grupo de entidades. El segundo modo, la consistencia eventual, se aplica a la mayoría de las consultas entre entidades o grupos de entidades no relacionados, donde el sistema prioriza una mayor disponibilidad sobre la consistencia.
La función del planificador de consultas es decidir cómo ejecutar una consulta determinada. Dado que Datastore no admite uniones como las bases de datos relacionales tradicionales, los desarrolladores deben realizar varias consultas independientes y combinar manualmente todos los resultados. Este proceso se denomina "uniones del lado de la aplicación". Además, el planificador de consultas comprueba si una consulta determinada puede ser atendida mediante índices existentes. Si no se encuentra un índice adecuado, la consulta fallará a menos que el desarrollador haya predefinido el índice en un archivo index.yaml independiente.
Compromisos en el modelado de datos
Google Cloud Datastore está diseñado para escalar fácilmente y simplificar las operaciones, pero esto conlleva ciertas desventajas inevitables. Especialmente en lo que respecta a funciones como las uniones y las transacciones que involucran varias filas. Para lograr una alta escalabilidad, Datastore requiere que los desarrolladores desnormalicen sus datos y diseñen su esquema en función de los patrones de lectura, en lugar de centrarse en la normalización. Este enfoque ayuda a reducir la complejidad y mejora el rendimiento, sobre todo cuando los desarrolladores trabajan con aplicaciones que realizan muchas lecturas. Por lo tanto, al diseñar la base de datos, los desarrolladores deben planificar sus modelos de datos asumiendo que Cloud Datastore no ofrecerá operaciones de unión. Para operaciones aún más complejas, como agregaciones o búsquedas de texto completo, los desarrolladores a menudo necesitan integrar Datastore con otros servicios como GCP BigQuery para análisis o Elasticsearch para capacidades de búsqueda. Esto significa que los desarrolladores necesitan diseñar un sistema que conecte múltiples herramientas para lograr sus objetivos.
Comparación con otras bases de datos
Almacenamiento de datos en la nube frente a MongoDB
Cloud Datastore y MongoDB son bases de datos de documentos NoSQL, pero difieren en su estructura y capacidades. Cloud Datastore impone un modelo de documentos más estructurado con grupos de entidades y prioriza la escalabilidad y la simplicidad sobre las funciones de consulta avanzadas. Por otro lado, MongoDB ofrece un modelo de documentos flexible ( BSON ), que es una potente herramienta de agregación, y tiene capacidades de unión limitadas. [ 9 ] Cloud Datastore está estrechamente integrado con Google Cloud Platform (GCP), pero MongoDB puede autoalojarse o utilizarse como un servicio gestionado a través de MongoDB Atlas [ 10 ] en diferentes plataformas en la nube.
Almacenamiento de datos en la nube frente a bases de datos relacionales
Las bases de datos relacionales como MySQL y PostgreSQL siguen un esquema normalizado con soporte para uniones complejas y transacciones ACID completas. Son ideales para crear aplicaciones que requieren una fuerte consistencia y lógica relacional. En contraste, Cloud Datastore sigue un enfoque NoSQL desnormalizado y sin esquema, donde los datos se estructuran en torno a patrones de acceso para optimizar el rendimiento de lectura a gran escala. Los sistemas de gestión de bases de datos relacionales tradicionales (RDBMS) son mejores para sistemas transaccionales [ 11 ] y consultas complejas, mientras que Cloud Datastore es más eficaz para aplicaciones a gran escala que necesitan alta disponibilidad y escalabilidad horizontal.
Almacenamiento de datos en la nube frente a Amazon DynamoDB
Cloud Datastore y Amazon DynamoDB son bases de datos NoSQL totalmente administradas de sus respectivos proveedores de nube, GCP y AWS . DynamoDB ofrece consistencia configurable, escalado automático y soporte para transacciones ACID de múltiples elementos. [ 12 ] Cloud Datastore admite consistencia fuerte solo para ciertos tipos de consultas (consultas de ancestros) y tiene más limitaciones en el soporte transaccional. Ambas desaconsejan el uso de uniones. DynamoDB requiere configuración explícita para índices secundarios, mientras que Cloud Datastore gestiona la indexación automáticamente. [ 13 ]
Almacenamiento de datos en la nube frente a Redis
Redis es también una base de datos NoSQL con almacenamiento clave-valor en memoria, diseñada para un acceso extremadamente rápido. Es una opción ideal para sistemas de caché, publicación/suscripción y análisis en tiempo real. Prioriza la velocidad sobre la durabilidad, [ 14 ] pero también ofrece opciones de persistencia. [ 15 ] Cloud Datastore es una base de datos de documentos persistente y basada en disco que admite consultas estructuradas. Además, está optimizada para el almacenamiento y la recuperación de datos a largo plazo. Redis es excelente para operaciones rápidas y transitorias, pero Cloud Datastore es más adecuada para datos de aplicaciones estructurados y de larga duración que requieren escalado e indexación gestionados. Redis se suele utilizar en combinación con una base de datos como Cloud Datastore, no como reemplazo.
Véase también
Referencias
- ↑ Google Cloud. Gestión de identidades y accesos (IAM).
- ↑ itCraft. Lo que NoSQL no puede hacer: primera experiencia con Google Cloud Datastore.
- ↑ Google Cloud. Cliente Python para la API de Google Cloud Datastore.
- ↑ Databricks. Transacciones ACID.
- ↑ Geeks para Geeks. ¿Cómo usar Cloud Datastore para bases de datos NoSQL en GCP?
- ↑ Google Cloud. gRPC vs REST: Entendiendo gRPC, OpenAPI y REST y cuándo usarlos en el diseño de API.
- ↑ API de Google en GitHub.
- ↑ CrowdStrike. ¿Qué es CRUD?
- ↑ MongoDB. Tipos BSON.
- ↑ MongoDB. ¿Qué es MongoDB Atlas?
- ↑ PostgreSQL. Capítulo 3. Funcionalidades avanzadas, Transacciones.
- ↑ Amazon DynamoDB. Consistencia de lectura de DynamoDB.
- ↑ Amazon DynamoDB. Mejora del acceso a los datos con índices secundarios en DynamoDB.
- ↑ Redis. Redis 8 ya está disponible de forma general, con nuevas funciones y más de 30 mejoras de rendimiento.
- ↑ Redis. Persistencia de Redis.
Enlaces externos
- Sitio web oficial
- Sitio web de Google Cloud Platform
- Google Cloud
- Almacenamiento en la nube
- bases de datos en la nube