python database google-app-engine bigtable

python - ¿Cómo se diseñan los modelos de datos para Bigtable/Datastore(GAE)?



database google-app-engine (3)

Como Google App Engine Datastore se basa en Bigtable y sabemos que no es una base de datos relacional, ¿cómo se diseña un modelo de esquema / datos de base de datos para las aplicaciones que utilizan este tipo de sistema de base de datos?


A medida que GAE se basa en cómo se administran los datos en Django, hay mucha información sobre cómo abordar preguntas similares en la documentación de Django (por ejemplo, vea aquí , baje hasta ''Su primer modelo'').

En resumen, usted diseña su modelo db como un modelo de objeto regular y deja que GAE ordene todas las asignaciones relacionales de objetos.


Diseñar un esquema de tabla grande es un proceso abierto, y básicamente requiere que piense sobre:

  • Los patrones de acceso que usará y la frecuencia con la que se usarán
  • Las relaciones entre tus tipos
  • Qué índices vas a necesitar
  • Los patrones de escritura que usará (para repartir la carga de manera efectiva)

El almacén de datos de GAE automáticamente desnormaliza sus datos. Es decir, cada índice contiene una copia (la mayoría) completa de los datos y, por lo tanto, todos los índices aumentan significativamente el tiempo empleado para realizar una escritura y el espacio de almacenamiento utilizado.

Si este no fuera el caso, diseñar un esquema de Datastore sería mucho más trabajo: debería pensar cuidadosamente sobre la clave principal para cada tipo, y considerar el efecto de su decisión sobre la localidad de los datos. Por ejemplo, cuando represente una publicación de blog, probablemente necesite mostrar los comentarios para que coincidan con ella, por lo que la clave de cada comentario probablemente comience con la clave de la publicación asociada.

Con Datastore, esto no es tan importante: la consulta que use se verá algo así como "Seleccionar * FROM Comentar DONDE post_id = N." (Si desea colocar los comentarios en la página, también tendría una cláusula de límite y un posible sufijo de "AND comment_id> last_comment_id"). Una vez que agregue dicha consulta, Datastore creará el índice por usted, y sus lecturas serán mágicamente rápido.

Algo a tener en cuenta es que cada índice adicional crea un costo adicional: es mejor si puede usar el menor número posible de patrones de acceso, ya que reducirá el número de índices que GAE construirá y, por lo tanto, el almacenamiento total requerido por sus datos .

Al leer esta respuesta, me parece un poco vaga. Tal vez una pregunta de diseño práctico ayudaría a entender esto? :-)


Puede usar www.web2py.com. Usted construye el modelo y la aplicación una vez y funciona en GAE pero también con SQLite, MySQL, Posgres, Oracle, MSSQL, FireBird