Pregunta

¿Alguien puede ilustrar cómo puedo almacenar y consultar fácilmente datos jerárquicos en el almacén de datos del motor de aplicaciones de Google?

¿Fue útil?

Solución

La mejor opción depende de sus requisitos. Aquí hay algunas soluciones (supongo que está usando Python, ya que no especificó):

  1. Si necesita realizar actualizaciones transaccionales en un árbol completo, y no va a tener más de aproximadamente 1QPS de actualizaciones sostenidas en un árbol, puede usar el soporte incorporado para el almacenamiento jerárquico. Al crear una entidad, puede pasar el '' padre '' Atributo para especificar una entidad o clave principal, y al realizar consultas, puede usar el método .ancestor () (o 'ANCESTOR IS' en GQL para recuperar todos los descendientes de una entidad determinada.
  2. Si no necesita actualizaciones transaccionales, puede replicar la funcionalidad de los grupos de entidades sin los problemas de contención (y la seguridad de la transacción): agregue un db.ListProperty (db.Key) a su modelo llamado 'ancestros' y complete con la lista de antepasados ??del objeto que está insertando. Entonces puede recuperar fácilmente todo lo que desciende de un antepasado dado con MyModel.all (). Filter ('ancestors =', parent_key).
  3. Si no necesita transacciones, y solo le importa recuperar los hijos directos de una entidad (no todos los descendientes), use el enfoque descrito anteriormente, pero en lugar de ListProperty, simplemente use una ReferenceProperty para la entidad principal. Esto se conoce como Lista de adyacencia.

Hay otros enfoques disponibles, pero esos tres deberían cubrir los casos más comunes.

Otros consejos

Bueno, debes tratar de mantener tus datos lo más lineales posible. Si necesita consultar rápidamente una estructura de datos de árbol, tendría que almacenarla en escabeche en la base de datos (o codificada con JSON si lo prefiere) si eso es posible para sus datos, o tendría que generar índices de árbol que puedan ser usado para consultar rápidamente una parte de una estructura de árbol. Sin embargo, no estoy seguro de cómo funcionaría Google App Engine al actualizar esos índices.

Cuando se trata de Google App Engine, su principal preocupación debería ser reducir la cantidad de consultas que necesita hacer, y que sus consultas devuelvan la menor cantidad de filas posible. Las operaciones son caras, pero el almacenamiento no lo es, por lo que la redundancia no debe verse como algo malo.

Aquí hay algunas ideas sobre el tema que encontré buscando en Google (aunque para MySQL, pero puede obtener la idea general de ella): Gestión de datos jerárquicos en MySQL

Ah, y aquí hay una discusión para Google App Engine: Modelado de datos jerárquicos

Una forma es usar el atributo padre del Modelo. Luego puede utilizar las funciones query.ancestor () y model.parent ().

Supongo que depende del tipo de operaciones que desee realizar con estos datos, lo que determinaría la mejor manera de representarlos.

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