Pregunta

Actualmente estoy trabajando en un proyecto que se basa en Android. Sin entrar en muchos detalles, el software se ejecutará en un dispositivo de costumbre construido. El hardware no cambiará nunca y siempre será el mismo. Eso es una ventaja definitiva:)

Con eso dicho, este proyecto se nos exige para almacenar cargas y cargas de datos en el dispositivo - Hacia arriba de filas de 3 m en algunos cuadros. manijas de exploración Esta SQLite muchas filas bien para nosotros, el problema viene cuando comenzamos haciendo complejo se une a traer de vuelta a todos los datos relacionados que necesitamos. Hemos pensado en desnormalización la base de datos, pero tienen miedo que empujará a la base de datos fuera del ámbito de utilizable.

Estamos investigando el uso de una base de datos orientada a objetos, algo así como db4o o NeoDatis. Nuestra esperanza es que mediante el almacenamiento de objetos podemos deshacernos de nuestras relaciones en un nivel de fila y almacenarlos en el objeto (al igual que la POO). El problema es que no hemos sido capaces de encontrar puntos de referencia relacionados con el rendimiento (por lo menos cuáles no recientes) de estos ODBS en ejecución y que se utilizan en Android.

¿Alguien tiene alguna experiencia con BDOO en Android y / o con el almacenamiento y el acceso a esta gran cantidad de datos? Si lo que cualquier consejo que podría dar sería muy apreciada.

- Editar

Este es un ejemplo del problema que estamos enfrentando. No está relacionado a nuestra aplicación (NDA mi dice que no puede publicar cualquier cosa específica), pero este ejemplo representa así el problema.

Imaginemos que estamos construyendo una aplicación para controlar cada vehículo que está conduciendo en la autopista de Nueva Jersey en un momento dado. Por un turismo concreto que necesitamos para seguir el coche marca y modelo, cuántas personas están en el coche y lo que es el grupo demográfico de las personas en el coche. Así que, básicamente, se termina con los datos que se ve algo así como -

coche

Identificación | de color | make_id | in_toll_lane | model_id

make

Identificación | Nombre

modelo

Identificación | nombre | make_id

car_person

Identificación | la edad | sexo | is_driver | car_id

toll_lanes

Identificación | cars_in_line | ideal_cars_in_line | ideal_occupants

Estos datos se va a cambiar con frecuencia. También se va a poner en lugar enorme, ya que no hay duda de que mucha gente conduciendo por la NJ Pike en un momento dado.

Con estos datos tenemos que ser capaces de una instantánea, en la demanda, de cualquier persona que se conduce en la pica. También tenemos que ser capaces de tomar una instantánea de todos los varones que están conduciendo, o todas las hembras en la autopista. También tenemos que ser capaces de buscar por edad, sexo, marca, modelo, etc.

Ahora imaginemos que tenemos que averiguar qué número carril en cada coche debe ir en función del número de personas en el coche, el número ideal de los ocupantes, el número de vehículos que ya están en línea, y el número ideal de coches que debe estar en línea.

Este es un ejemplo muy simple, aunque bastante representativo de nuestro problema.

- Fin Editar

Gracias de antemano!

¿Fue útil?

Solución

Aquí están algunas observaciones, aunque sospecho que no le ayudará directamente.

Creo que las principales preguntas son: ¿Usted va a descubrir sus relaciones complejas a través de la lógica de ejecución de aplicaciones como eventos generan o los datos de cambio o vas a tener que datos de volcado sólo en una tienda y luego descubrir un-anticipar las relaciones a través de la consulta ?

Si la lógica de negocio se rellenará el modelo a continuación, puede crear fácilmente vistas basadas modelo de sus diferentes cortes del modelo de datos, por ejemplo, colecciones que conocen todos los coches que tienen los conductores macho / hembra. En este caso, básicamente, sus relaciones son semi-estática rara vez cambia (mientras que los valores de datos en el otro extremo de dichas relaciones están cambiando probablemente mucho). Si este es el caso, entonces ¿por qué tratar y almacenar los datos en una base de datos de la tecnología que está obligando a volver a calcular constantemente las relaciones (JOIN). Es sólo una pérdida de la CPU y es por eso que se vea el bajo rendimiento como el modelo se pone compleja. Así, una vez que responder a estas preguntas, será muy claro si ODB o RDB es la mejor opción.

Ahora la pregunta es, ¿qué se ejecutará en Android y manejar datos de gran tamaño? Aquí es donde creo que no puedo evitar. Yo trabajo en Versant que tiene (db4o y Versant) ODB. Ahora db4o se ejecutará en Android, pero realmente es la elección correcta para los datos enorme ... No. No a menos que haya muy aislado de datos que pueden estar en bases de datos separadas y sólo accederá de forma aislada y que no suena a mí como es su situación. Nuestra otra base de datos, Versant es mean't para manejar gran cantidad de datos en tiempo casi real, pero sólo el cliente es 100% Java, el servidor está escrito en C, por lo que no se ejecutará en Android.

Creo que tendrá que hacer una investigación para ver quién tiene ODB que puede manejar datos de gran tamaño en Android.

Best, -Robert

Otros consejos

Usted no dice mucho acerca de sus necesidades de acceso de datos o los datos Loadout realmente.

Si tienes 3M filas principales, y luego un montón de mesas de hojas más pequeñas, entonces usted puede simplemente hacer bien por el almacenamiento en caché todas las tablas de la hoja en la memoria RAM, y "unirse" a ellos con la mano. Muchos sistemas tienen muy pequeñas mesas de hojas (sobre todo en comparación con los datos principales), por lo que cargarlos en la memoria RAM y luego simplemente mirar hacia arriba cuando se carga la fila puede ser una gran victoria.

Obviamente, usted no lo hace con gran padre-> las relaciones del niño, pero si se puede eliminar la hoja se une, a continuación, una lectura se convierta en una única unión entre el padre y el niño en lugar de una media docena de padres, hijos, y las tablas de las hojas.

Incluso si esto no funciona para todas las tablas de la hoja, si funciona para una gran mayoría, bien puede ser suficiente para conseguir que más de la joroba.

En nombre de db4o:. Llevamos a cabo todas nuestras pruebas de regresión en Android porque creemos que se convertirá en una plataforma muy importante para db4o

db4o funciona muy bien para el orden de magnitud de 3 millones de objetos.

Estamos haciendo pruebas comparativas frente a otras bases de datos sobre http://www.polepos.org/ y nosotros pronto lanzará una nueva versión del índice de referencia en el que ejecutar una instalación compleja, también contra SqlLite. Trasladar el punto de referencia para Android también es una consideración.

Si se une están matando a su rendimiento y que tienen datos muy heterogéneos, db4o podría funcionar mejor que una base de datos relacional.

suena interesante su aplicación. Si necesita ayuda evaluar db4o, sólo dame un grito.

Jason: para llegar a cualquier miembro db4o debe utilizar este patrón: nombre @ db4o.com Mejor!

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