sql - segun - porcentaje de familia monoparental en el peru
Rendimiento de datos principales con una entidad monoparental (3)
El año pasado trabajé en un proyecto que hizo lo mismo, almacenamos todo en datos básicos y todo en datos básicos heredados de una sola clase que tenía algunos atributos comunes.
Tuvimos un lugar entre 1k y 10k registros en los datos centrales y el rendimiento se redujo hasta el punto en que lo reescribimos y eliminamos el antecesor común. Como recuerdo, las búsquedas simples tardaron varios segundos, y las inserciones / actualizaciones también fueron muy malas. Fue solo después de que las cosas se pusieron terriblemente lentas que rompimos el DB abierto y notamos que el núcleo de datos almacenaba todo en una sola tabla.
Perdón, no recuerdo números específicos, lo más importante fue que tuvimos que volver a hacerlo porque era demasiado lento, y no demasiado lento como demasiado lento para el comercio de alta frecuencia, pero demasiado lento como la aplicación se colgó al cargar al intentar llenar la inicial ver fuera de los datos básicos.
Por lo tanto, con el grano de sal que esto era en iOS más antiguo y hardware más antiguo, yo diría que definitivamente no hagas esto.
Estoy creando un marco que funciona con Core Data. Uno de los requisitos para usar mi framework en su clase Core Data es que cualquier entidad que quiera tener las capacidades de Framework necesitará ser subentidades y subclases de una entidad que le proporcione. Por el bien de esto, llamaré a ese objeto Foo.
Hoy me di cuenta de que Core Data almacena todos los objetos que son entidades secundarias de Foo en una tabla llamada ZFOO. Me preocupa el rendimiento de Core Data si alguien con grandes conjuntos de datos quiere usarlo, ya que TODAS las entidades secundarias de la clase foo se almacenarán en una enorme tabla ZFOO.
Cualquier opinión o recomendación sería muy apreciada.
La retrospectiva es algo maravilloso.
Como las personas todavía están leyendo esta sesión de preguntas y respuestas y refiriéndose a ella en sus preguntas y pensando que nada ha cambiado, me gustaría agregar algunos comentarios para mayor claridad y para proporcionar una respuesta "moderna" o más reciente.
Los datos básicos son una poderosa bestia, pero debes aprender a controlar a la bestia, y gracias a los pioneros que han respondido previamente y las mejoras que Apple ha realizado en el marco, es mucho más fácil hacerlo hoy de lo que era un par de hace años (en particular iOS 5).
Inicialmente recomendaría aprender a preparar un modelo de datos sólido y robusto. Hay una gran cantidad de información sobre esto, así que dejaré que el lector investigue. Como mencionan las respuestas anteriores, es importante aprender a preparar todas las relaciones en el modelo de datos.
Más allá de eso, existen varios mecanismos para controlar el tamaño del conjunto de datos que captas. No me ha sido mejor explicado que en un libro de The Pragmatic Bookshelf - "Core Data, 2nd Edition, Data Storage and Management para iOS, OS X e iCloud" (enero de 2013) de Marcus S. Zarra, y en particular El Capítulo 4 titulado "Ajuste del rendimiento".
Léelo.
Trabajé con @deathbob en este proyecto como líder de iOS. En nuestra instancia, tenía múltiples clases que contenían los atributos "remote_id" y "remote_update". Inicialmente configuré las tablas usando subclases. Tenía una entidad abstracta "RemoteEntity" que contenía esos atributos y un grupo de otras entidades que heredaron de ella, cada uno con los suyos. Pensé que terminaríamos con un montón de tablas, cada una con remote_id, remote_update y luego sus atributos personalizados. En cambio, terminamos con la tabla masiva que describes.
La solución fue bastante simple, no debes configurar la herencia a través de la GUI. En su lugar, incluya todos los atributos para ese objeto, incluidos los compartidos en el modelador de Datos centrales (esto significa que "remote_id" y "remote_update" aparecerán en cada entidad. Dicho esto, aún podemos usar una subclase. Después de generar las clases de sus modelos, cree la clase de la entidad padre. Esto no debe estar en la GUI. Debe heredar de NSManagedObject y en el archivo .m las propiedades deben usar @dynamic en lugar de @synthesize. Ahora que tiene la clase padre es el momento de ajustar las clases secundarias Establezca la clase principal en RemoteEntity (en mi ejemplo) en lugar de NSManagedObject. Luego elimine las propiedades que aparecen en su superclase (en mi ejemplo, "remote_id" y "remote_update").
Aquí hay un ejemplo de mi súper clase https://gist.github.com/1121689 .
Espero que esto ayude, un consejo para @deathbob por señalar esto.