2010-07-15 12 views
22

Cualquiera conoce una buena implementación de Java ORM para HBase. Este se ve muy agradable para RubyJava ORM para Hbase

http://www.stanford.edu/~sqs/rhino/doc/

Pero no podía encontrar uno para Java.

Gracias.

+10

¿Por qué esta pregunta está cerrada !!!!!? ¡es una pregunta muy buena con 3390 visitas! ¿Qué hacen los moderadores SOF? – Heidarzadeh

+4

Esta es una pregunta muy importante, ¿por qué no se considera constructiva? – nitefrog

+0

Esta sigue siendo una pregunta relevante. La mayoría de las respuestas a esta pregunta apuntan a proyectos obsoletos o inexistentes. Recomiendo usar cualquiera de estos: [1] Apache Phoenix + Hibernate [2] https://flipkart-incubator.github.io/hbase-object-mapper/ (divulgación: soy el autor de este proyecto) –

Respuesta

2

Hay pigi y parhely y no he usado ninguno de ellos. IMO HBase es un motor de almacenamiento clave/valor rápido, pero si necesita otra capa de abstracciones, debería verificarlas.

+0

Gracias . parhely no parece tener documentación así que estoy eligiendo usar pigi primero. –

4

La fuerza de HBase, como yo lo veo, es mantener columnas dinámicas en familias de columnas estáticas. A partir de mi experiencia en el desarrollo de aplicaciones con HBase, encuentro que no es tan fácil como SQL determinar los valores y calificadores celulares.

Por ejemplo, un libro como muchos autores, dependiendo de sus patrones de acceso, ediciones de autor, aplicación de caché de capa de aplicación, puede elegir guardar autor completo en la tabla de libro (es decir, el autor reside en 2 tabla, autor mesa y mesa de libro) o solo la identificación del autor. Además, la colección de autor se puede guardar en una celda como XML/JSON o celdas individuales para autores individuales.

Con este entendimiento, llegué a la conclusión de que escribir un ORM en toda regla, como por ejemplo Hibernate, no solo será muy difícil, podría no ser concluyente. Así que tomé un enfoque diferente, mucho más como iBatis es Hibernate.

Déjame intentar explicar cómo funciona. Para esto, utilizaré los códigos fuente de here y here.

  1. La primera y más importante tarea es implementar una interfaz ObjectRowConverter, en este caso SessionDataObjectConverter. La clase abstracta resume las mejores prácticas básicas tal como se discutió y aprendió de la comunidad HBase. La extensión básicamente le da un control del 100% sobre cómo convertir su objeto a la fila HBase y viceversa. Para esto, solo la restricción de la API es que los objetos de su dominio deben implementar la interfaz PersistentDTO que se usa internamente para crear Put, Delete, do byte [] para el objeto id y viceversa.
  2. La siguiente tarea es cablear las dependencias como se hace en HBaseImplModule. Por favor, avíseme si está interesado, revisaré las inyecciones de dependencia.

Y eso es todo. Cómo se usan están disponibles here. Básicamente usa CommonReadDao, CommonWriteDao para leer y escribir datos hacia y desde HBase. La lectura común dao implementa la conversión multiproceso de fila a objeto en las consultas, obtención múltiple mediante identificadores, obtención por identificación y tiene su API de criterios de Hibernate como para consultar a HBase mediante exploración (no hay funciones de agregación disponibles). La escritura común dao implementa código relacionado de escritura común con algunas funciones adicionales, como bloqueo optimista/pesimista, anulación de celda/entidad de comprobación de fusión (no) -existencia en guardar, actualizar, eliminar, etc.

Este ORM se ha desarrollado para nuestro propósito interno y he estado hasta mi cuello y por lo tanto todavía no puedo hacer algo de documentación.Pero si está interesado, hágamelo saber y yo se hacer tiempo para la documentación con prioridad.

2

Estamos utilizando HBase ORM - Suro https://github.com/mushkevych/surus/wiki

Probablemente vale la pena mencionar

  • lo estamos usando en gran medida con Hadoop map/reduce
  • tiene un módulo extra que le permite bombear datos HBase desde la secuencia JSON (en nuestro caso proviene del código Python)