2010-12-29 19 views
6

Varias veces he querido una estructura de datos que sea similar a una tabla SQL donde puede seleccionar en varios campos y campos múltiples. Similar a una implementación de SQL en memoria, excepto que no quiero almacenar tantos objetos en la estructura de datos.Java en memoria SQL Tabla como estructura de datos

También solicito que el objeto sea serializable a través de los medios estándar de Java.

He hecho esto antes con varias tablas hash o teclas hash personalizadas pero terminó siendo un montón de código y el problema muy específico.

También he usado Groovy con su capacidad de cierre y gpath para ayudar, pero no siempre lo tengo disponible (diferentes proyectos).

EDIT: Creo que mi problema es más de un problema objeto de recorrido/selección He aquí algunos proyectos interesantes:

Sin embargo, la desventaja de la mayoría de estos proyectos es que son mucho más lento que el acceso a los objetos directamente (no reflexión captador/definidor) y definitivamente más lento que un índice (hash).

+0

¿Va a consultar alguna instantánea de datos independiente? ¿Qué hay de multihilo, bloqueo, transacciones, inserciones/actualizaciones? Si es posible alguna de las anteriores, estoy 100% de acuerdo con @Alex. – Osw

+0

@Osw No es solo por comodidad. No necesito la naturaleza ACID de RDBMS. Necesito la capacidad de consulta. –

+0

creo que estos enlaces pueden ser útiles: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html y http://almaer.com/blog/hibernate-3-testing- with-in-memory-pluggable-persistence – Osw

Respuesta

3

JavaDB y HSQLDB, entre otros, tienen bases de datos totalmente en memoria.

+0

El problema con esos tipos es que no me dan estructuras de datos que pueda ordenar/serializar. Estoy buscando algo que pueda XStream. –

+0

Aunque supongo que podría hacer algún tipo de objeto de datos genérico para representar una tabla y en unmarshal se carga a un rdbms singleton en memoria, pero esto tiene problemas con la seguridad de subprocesos si no es seguro para subprocesos y mucho bloqueo de subprocesos si es así. –

+0

Dudo que encuentre algo que satisfaga ambos requisitos. Mi sugerencia: utilice un POJO serializable para tomar una instantánea de las tablas en el db en memoria, y luego serializar eso. Ir por el otro camino sería trivial también, simplemente destrabar el XStream en un POJO y luego cargar los datos en el db en memoria. – RobertB

2

¿Qué le preocupa acerca del uso de almacenamiento SQL en memoria para estos fines? Ahorrarías una tonelada de tiempo de desarrollo; la sobrecarga de rendimiento es realmente insignificante. Arriesgas mucho más si tratas de implementarlo tú mismo.

+2

Parece (de todos modos) que estaba buscando una alternativa a la suya. Además, esta no es realmente una respuesta y podría ser mejor como un comentario sobre la pregunta original. – RobertB

+0

No quiero construir el mío (de ahí la Q). No puedo usar una base de datos en la memoria, las tablas no son estructuras de datos serializables. En otras palabras, no puedo enviar una tabla db completa por el cable a través de JAXB (ingrese su tecnología de serialización favorita aquí) o guardarla en un archivo. –

Cuestiones relacionadas