2008-09-17 18 views
18

Desde el almacén de datos de Google App Engine se basa en Bigtable y sabemos que no es una base de datos relacional, ¿cómo diseñar una base de datos esquema de modelo de datos / para aplicaciones que utilizan este tipo de sistema de base de datos?¿Cómo se diseñan los modelos de datos para Bigtable/Datastore (GAE)?

+0

Consulte [esta pregunta] (http://stackoverflow.com/questions/103727/how- to-think-in-data-stores-instead-of-databases), que pregunta más o menos lo mismo. –

Respuesta

19

El diseño de un esquema de Bigtable es un proceso abierto, y, básicamente, se requiere pensar en:

  • Los patrones de acceso que va a utilizar y con qué frecuencia cada uno se utilizarán
  • Las relaciones entre los tipos
  • (carga con el fin de difundir de manera efectiva)
  • Qué índices que van a necesitar
  • Los patrones de escritura que va a utilizar

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: Tendría que 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 un gran problema: 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á 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 los menos patrones de acceso posibles, ya que reducirá el número de índices que GAE construirá y por lo tanto el almacenamiento total requerido por sus datos.

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

+1

El almacén de datos GAE no "automatiza automáticamente la desnorización de sus datos". Automáticamente _indexa_ la mayoría de las columnas, pero eso es totalmente diferente. –

+4

El almacén de datos tampoco crea automáticamente índices para usted, el dev appserver sí lo hace. Si no realiza una consulta en particular en el servidor de aplicaciones dev, no agregará la entrada apropiada a indexes.yaml, y la consulta fallará cuando se implemente. –

+0

He leído en alguna parte que cada índice contiene una copia de _todos_ campos para devolver; Sin embargo, ahora los documentos indican que solo se almacenan dentro de ella las columnas que afectan al índice. AFAICT no hay ningún lugar que indique si una lectura de índice es un escaneo simple, o escaneo + búsqueda. ¿Has visto algo sobre eso? – 0124816

-2

Como 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, consulte here, desplácese 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.

+0

consejo muy malo ... Django funciona solo en bases de datos relacionales. Si desea ver algunas prácticas hay un djano-nonrel que puede proporcionar inspiración ... –

1

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

+1

Eso es solo técnicamente correcto. Una base de datos relacional basada en esquema normal puede funcionar en GAE una vez que eliminas las OR y las UNIONES. Pero está muy lejos de estar diseñado para adaptarse a GAE y lo es de otra manera ... –

Cuestiones relacionadas