Pregunta

Estoy en las primeras etapas de desarrollo de un sitio web de estadísticas deportivas (frisbee) y me gustaría saber sus opiniones si Google App Engine es adecuado para mí.

Le escribo en Python usando Django y he sentido cómodo con el estándar RDBMS durante años, pero este sitio es un proyecto a largo plazo y estoy esperando muy grandes cantidades de datos de manera Me gustaría que el "infinito" de escala que el almacén de datos GAE ofrece. Una gran mayoría de las consultas a la base de datos devolverá resultados muy estándar que harían que el almacén de datos parece ser una elección lógica. Sin embargo, me gustaría ser capaz de hacer consultas extremadamente complejos en el futuro para llegar a nuevas métricas estadísticos o simplemente llegar a resultados interesantes. Planeo hacer un montón de esto en el futuro, pero no sabrá lo que estas consultas son hasta que los datos que ya se recoge.

Por ejemplo, a menudo se ve béisbol estadísticas analistas vienen con las estadísticas ridículas como "Esta es sólo la primera vez en los últimos 50 años que quedan dos lanzadores dictadas cuyos apellidos comienzan con 'Z' han arrojado blanqueadas de un solo éxito en espalda con espalda días". Me gustaría tener la flexibilidad de hacer cualquier duda alguna en el futuro. :)

Sin embargo, tengo la impresión de que una base de datos no relacionales como Bigtable se requiere para llegar a modelos que contiene datos redundantes de antemano y todo el trabajo se lleva a cabo en los insertos en lugar de las recuperaciones. Ya he construido modelos de Django que contienen prácticamente todos los datos que alguna vez tenga que consultar, pero no tengo ni idea de lo que deshace la normalización de los modelos que querrá tener uno o dos años a partir de ahora. Por lo tanto, me siento como haciendo consultas complejas en el futuro serían extremadamente difícil en el almacén de datos GAE y requerirían mí para tirar de una tonelada de información fuera del servidor antes de procesarlo en Python.

Es el motor de aplicación de almacén de datos de Google simplemente errónea de lo que quiero hacer? O simplemente me falta algo. Muchas gracias de antemano!

Actualización: Gracias por las respuestas hasta el momento. Me di cuenta de que yo también debería mencionar que muchas de estas consultas complejas son las preguntas que me gustaría que los usuarios sean capaces de hacerlo, con lo que una base de datos en línea no es realmente una opción. Por ejemplo, los usuarios deben ser capaces de ver varias estadísticas de lo bien que juegan dos jugadores en particular cuando están en el campo, al mismo tiempo durante los partidos o temporadas específicas. Mientras que estas consultas no son tan frecuentes como las estadísticas agregadas estándar, que todavía se suceden con regularidad.

Tener una base de datos relacional, así como el almacén de datos GAE sería grande, pero Django no soportar múltiples de db por defecto todavía y parchear una solución en conjunto suena difícil y complicado. Eric Florenzano tiene una buena solución de dos bases de datos que tanto utilizar los modelos de Django, pero si tuviera que utilizar el almacén de datos GAE, que tendría que utilizar el modelo db del motor de aplicación en su lugar. Y dar con una solución agradable como lo hizo para este problema complejo es un poco más allá de mi nivel de habilidad en este punto.

En este momento mis dos opciones favoritas están usando el GAE cola de tareas para hacer las consultas difíciles o ir a un servicio de hosting más estándar como webfaction y luego simplemente Desnormalizar mis tablas más adelante una vez que mis datos crece y que necesitan para aumentar el rendimiento.

¿Fue útil?

Solución

Lo que usted describe es esencialmente OLAP - procesamiento analítico en línea. OLAP es una cosa que RDBMSes 'tradicionales' son muy buenos, en parte debido a la flexibilidad y el poder de SQL - y las bases de datos no relacionales, tales como el almacén de datos de App Engine no lo son. Suena como sus consultas de tipo OLAP serán relativamente poco frecuentes en comparación con el acceso normal, aunque, por lo que te sugiero uno de los dos enfoques:

  • Espejo todos sus datos de su almacén de datos de App Engine a una base de datos relacional, a intervalos, y realizar las consultas analíticas en la base de datos relacional. El usuario frente al tráfico sigue siendo servida por el almacén de datos, para que pueda obtener todas las ventajas de eso, sino que tienen una línea de copia Puede hacer consultas complejas en contra.
  • Soporte de cola de tareas de Uso App Engine para ejecutar consultas que examinan grandes conjuntos de datos. Usted puede escribir su consulta en Python o Java, a continuación, utilizar la cola de tareas para ejecutarlo a través de un conjunto de datos muy grande, y recoger los resultados de forma asíncrona, y cuando estén listas. Obviamente hay un poco de trabajo de infraestructura necesaria para hacer esto fácil (aunque mantener un ojo en mi blog para un futuro proyecto la participación de este;).

Otros consejos

Yo diría que el almacenamiento de tipo Bigtable es menos adecuado para aplicaciones estadísticas, por las mismas razones que mencionas. Pero esta es una operación clásica de que usted tiene que hacer. Rara vez he encontrado a mí mismo utilizando la flexibilidad de consultas muy complejas, pero tienen muchas veces se ven obligados a buscar soluciones más especializadas para cosas que no debería haber estado en la base de datos en el primer lugar.

Si usted se pega a un RDBMS, que puede hacer las particiones lógicas y desnormalización bastante fácil, por ejemplo, a través de estrategias de persistencia hiberna y Hibernate Fragmentos . Si se puede vivir con el procesamiento algo más lento, también puede hacer consultas SQL en almacenamiento de tipo Bigtable (ver, por ejemplo, hadoop latín de cerdo ).

GAE almacén de datos es completamente diferente animal de un RDBMS. Es fácil en una base de datos relacional para escribir algo como:

SELECT STDEV(player_score)
FROM Table
WHERE player_id = 1234
  AND game_date BETWEEN '2007-01-01' AND '2009-11-10'
  AND city <> 'London'

GAE consulta tiene un montón de restricciones - ver aquí - lo que no es fácil de traducir esto. Para las funciones de agregado (suma, DESVEST, etc ..) hay que tirar todos los datos en la capa de aplicación y calcular, o mantener entidades agregadas que actualizan en cada inserción de datos / actualización.

Actualizar
Usted puede considerar el uso de GAE para la interfaz de usuario y la lógica de negocio, pero tener relacional DB separado en otro lugar en la nube como: Microsoft SQL, DB2 en Amazon, MySQL otra parte - y que el uso de los datos GAE-tienda para agregaciones y estadísticas calculados de antemano. Por lo que las estadísticas todavía se calculan en RDBMS, pero se almacenan resultados (estadísticas parciales, calculados de antemano) en el almacenamiento GAE; similar a la de almacenamiento dimensional en cubos analíticos.

Quiero apoyar a la referencia de MindWire hacia el uso de CloudSQL de Google.

Mi proyecto actual funciona en realidad de almacén de datos en primer lugar con más tareas orientadas SQL realizadas en la nube SQL.

Refernce Docs para Python de App Engine SDK

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top