Como ejemplo, Google App Engine utiliza Google Datastore, no una base de datos estándar, para almacenar datos. ¿Alguien tiene algún consejo para usar Google Datastore en lugar de bases de datos? Parece que he entrenado mi mente para pensar al 100% en las relaciones de objeto que se asignan directamente a las estructuras de la tabla, y ahora es difícil ver algo diferente. Puedo entender algunos de los beneficios de Google Datastore (por ejemplo, el rendimiento y la capacidad de distribuir datos), pero se sacrifica una buena funcionalidad de la base de datos (por ejemplo, se une).
¿Alguien que haya trabajado con Google Datastore o BigTable tiene algún buen consejo para trabajar con ellos?
Respuestas:
Hay dos cosas principales para acostumbrarse al almacén de datos de App Engine en comparación con las bases de datos relacionales 'tradicionales':
La clave para darse cuenta, y la razón detrás de estas dos diferencias, es que Bigtable básicamente actúa como un enorme diccionario ordenado. Por lo tanto, una operación de venta solo establece el valor de una clave determinada, independientemente de cualquier valor anterior para esa clave, y las operaciones de recuperación se limitan a recuperar claves individuales o rangos contiguos de claves. Las consultas más sofisticadas son posibles gracias a los índices, que son básicamente tablas propias, lo que le permite implementar consultas más complejas como escaneos en rangos contiguos.
Una vez que haya absorbido eso, tiene los conocimientos básicos necesarios para comprender las capacidades y limitaciones del almacén de datos. Las restricciones que pueden haber parecido arbitrarias probablemente tengan más sentido.
La clave aquí es que, aunque estas son restricciones sobre lo que puede hacer en una base de datos relacional, estas mismas restricciones son las que hacen que sea práctico escalar al tipo de magnitud que Bigtable está diseñado para manejar. Simplemente no puede ejecutar el tipo de consulta que se ve bien en papel pero es atrozmente lenta en una base de datos SQL.
En términos de cómo cambiar la forma en que representa los datos, lo más importante es el cálculo previo. En lugar de hacer uniones en el momento de la consulta, precalcule los datos y almacénelos en el almacén de datos siempre que sea posible. Si desea elegir un registro aleatorio, genere un número aleatorio y guárdelo con cada registro.
Hay todo un libro de cocina de este tipo de consejos y trucos aquíEditar: El libro de cocina ya no está en existencia.fuente
La forma en que me he ocupado del cambio mental es olvidarme de la base de datos por completo.
En el mundo relacional de la base de datos, siempre debe preocuparse por la normalización de datos y la estructura de su tabla. Deshazte de todo. Simplemente diseñe su página web. Extiéndelos a todos. Ahora míralos. Ya estás 2/3 allí.
Si olvida la noción de que el tamaño de la base de datos es importante y los datos no deben duplicarse, entonces está 3/4 allí y ¡ni siquiera tuvo que escribir ningún código! Deje que sus puntos de vista dicten sus Modelos. Ya no tienes que tomar tus objetos y hacerlos bidimensionales como en el mundo relacional. Puede almacenar objetos con forma ahora.
Sí, esta es una explicación simplificada de la prueba, pero me ayudó a olvidarme de las bases de datos y simplemente hacer una solicitud. Hasta ahora he creado 4 aplicaciones de App Engine utilizando esta filosofía y hay más por venir.
fuente
Siempre me río cuando la gente sale, no es relacional. He escrito cellectr en django y aquí hay un fragmento de mi modelo a continuación. Como verá, tengo ligas administradas o entrenadas por los usuarios. Puedo obtener todos los gerentes de una liga, o de un usuario determinado puedo devolver la liga que ella entrena o maneja.
El hecho de que no haya soporte específico de clave externa no significa que no pueda tener un modelo de base de datos con relaciones.
Mis dos peniques.
fuente
Vengo del mundo de la base de datos relacional y luego encontré esta cosa del almacén de datos. tardó varios días en acostumbrarse. bueno, hay algunos de mis hallazgos.
Ya debe haber sabido que Datastore está construido a escala y eso es lo que lo separa de RDMBS. para escalar mejor con grandes conjuntos de datos, App Engine ha realizado algunos cambios (algunos significan muchos cambios).
Estructura de RDBMS VS DataStore
En la base de datos, generalmente estructuramos nuestros datos en Tablas, Filas que están en Datastore se convierten en Tipos y Entidades .
Relaciones
En RDBMS, la mayoría de las personas siguen la relación uno a uno, muchos a uno, muchos a muchos, en el almacén de datos, ya que tiene la opción "No unirse", pero aún podemos lograr nuestra normalización usando " ReferenceProperty "Ejemplo de relación uno a uno .
Índices
Por lo general, en RDMBS hacemos índices como Clave primaria, Clave externa, Clave única e Clave de índice para acelerar la búsqueda y aumentar el rendimiento de nuestra base de datos. En el almacén de datos, usted tiene que hacer al menos un índice por tipo (será automáticamente generar ya sea que nos guste o no) porque almacén de datos buscar su entidad sobre la base de estos índices y yo creo que es la mejor parte, en el RDBMS puede realizar búsquedas con campo sin índice, aunque llevará algún tiempo, pero lo hará. En el almacén de datos no puede buscar utilizando propiedades que no sean de índice.
Recuento
En RDMBS, es mucho más fácil contar (*) pero en el almacén de datos, ni siquiera lo piense de manera normal (sí, hay una función de recuento) ya que tiene un límite de 1000 y costará una operación tan pequeña como la entidad que no es bueno pero siempre tenemos buenas opciones, podemos usar Shard Counters .
Restricciones únicas
En RDMBS, nos encanta esta característica ¿verdad? pero Datastore tiene su propio camino. no puede definir una propiedad como única :(.
Query
GAE Datatore proporciona una mejor característica mucho ME GUSTA (¡Oh, no! El almacén de datos no tiene LIKE Keyword) SQL que es GQL .
Insertar / actualizar / eliminar / seleccionar datos
Aquí es donde todos estamos interesados, ya que en RDMBS requerimos una consulta para Insertar, Actualizar, Eliminar y Seleccionar al igual que RDBMS, Datastore ha puesto, eliminado, obtiene (no se emocione demasiado) porque Datastore poner u obtener en términos de escritura, lectura, pequeñas operaciones ( costos de lectura para llamadas al almacén de datos ) y ahí es donde entra en acción el modelado de datos. debe minimizar estas operaciones y mantener su aplicación en funcionamiento. Para la operación de reducción de lectura puede usar Memcache .
fuente
Echa un vistazo a la documentación de Objectify. El primer comentario al final de la página dice:
"Agradable, aunque escribiste esto para describir Objectify, también es una de las explicaciones más concisas del almacén de datos de appengine que he leído. Gracias".
https://github.com/objectify/objectify/wiki/Concepts
fuente
Si está acostumbrado a pensar en entidades asignadas a ORM, entonces básicamente es así como funciona un almacén de datos basado en entidades como App Engine de Google. Para algo como uniones, puede mirar las propiedades de referencia . Realmente no debe preocuparse si usa BigTable para el backend o algo más, ya que el backend está abstraído por las interfaces API de GQL y Datastore.
fuente
La forma en que miro el almacén de datos es, kind identifica la tabla, per se, y la entidad es una fila individual dentro de la tabla. Si Google fuera a sacar un tipo que es solo una gran tabla sin estructura y puede volcar lo que quiera en una entidad. En otras palabras, si las entidades no están vinculadas a un tipo, prácticamente puede tener cualquier estructura a una entidad y almacenarse en una ubicación (tipo de archivo grande sin estructura, cada línea tiene estructura propia).
Ahora volviendo al comentario original, el almacén de datos de Google y la tabla grande son dos cosas diferentes, así que no confunda el almacén de datos de Google con el sentido de almacenamiento de datos del almacén de datos. Bigtable es más caro que bigquery (razón principal por la que no fuimos con él). Bigquery tiene combinaciones apropiadas y RDBMS como lenguaje SQL y es más barato, ¿por qué no usar bigquery? Dicho esto, bigquery tiene algunas limitaciones, dependiendo del tamaño de sus datos que puede encontrar o no.
Además, en términos de pensar en términos de almacén de datos, creo que la declaración adecuada habría sido "pensar en términos de bases de datos NoSQL". Hay demasiados disponibles en estos días, pero cuando se trata de productos de Google, excepto Google Cloud SQL (que es MySQL), todo lo demás es NoSQL.
fuente
Al estar arraigado en el mundo de las bases de datos, un almacén de datos para mí sería una tabla gigante (de ahí el nombre de "tabla grande"). Sin embargo, BigTable es un mal ejemplo porque hace muchas otras cosas que una base de datos típica podría no hacer, y aún así es una base de datos. Lo más probable es que, a menos que sepa que necesita construir algo como la "tabla grande" de Google, probablemente estará bien con una base de datos estándar. Lo necesitan porque están manejando cantidades inimaginables de datos y sistemas juntos, y ningún sistema comercialmente disponible puede realmente hacer el trabajo de la manera exacta en que pueden demostrar que necesitan hacer el trabajo.
(referencia de tabla grande: http://en.wikipedia.org/wiki/BigTable )
fuente