Pregunta

Estoy trabajando en un proyecto con un amigo que utilizará Hbase para almacenar sus datos.¿Hay buenos ejemplos de consulta?Parece que estoy escribiendo una tonelada de código Java para iterar a través de listas de RowResult cuando, en SQL, podía escribir una consulta simple.¿Me estoy perdiendo de algo?¿O a Hbase le falta algo?

¿Fue útil?

Solución

Creo que usted, como muchos de nosotros, está cometiendo el error de tratar a bigtable y HBase como simplemente otro RDBMS cuando en realidad es un modelo de almacenamiento orientado a columnas destinado a almacenar y recuperar de manera eficiente grandes conjuntos de datos dispersos.Esto significa almacenar, idealmente, relaciones de muchos a uno dentro de una sola fila, por ejemplo.Sus consultas deberían devolver muy pocas filas pero contener (potencialmente) muchos puntos de datos.

Quizás si nos contara más sobre lo que intentaba almacenar, podríamos ayudarlo a diseñar su esquema para que coincida con la forma de hacer las cosas de bigtable/HBase.

Para obtener un buen resumen de lo que hace HBase de manera diferente a un RDBMS "tradicional", consulte este fantástico artículo: Impedancia coincidente:Cuando usar HBase por Bryan Duxbury.

Otros consejos

Si desea acceder a HBase utilizando un lenguaje de consulta y un controlador JDBC, es posible.Paul Ambrose ha publicado una biblioteca llamada HBQL en hbql.com que le ayudará a hacer esto.Lo he usado para un par de proyectos y funciona bien.Obviamente no tendrá acceso a SQL completo, pero lo hace un poco más fácil de usar.

Miré Hadoop y Hbase y como sean Dicho esto, pronto me di cuenta de que no me proporcionaba lo que realmente quería, que era una base de datos agrupada compatible con JDBC.

Creo que sería mejor que usaras algo como C-JDBC o HA-JDBC que se parece más a lo que buscaba.(Personalmente, no he avanzado más con ninguno de estos aparte de leer la documentación, por lo que no puedo decir cuál de ellos es bueno, si es que hay alguno).

Recomiendo echar un vistazo a Apache. Colmena proyecto, que es similar a HBase (en el sentido de que es una base de datos distribuida) que implementa un lenguaje similar a SQL.

Gracias por la respuesta Sean y perdón por mi respuesta tardía.A menudo cometo el error de tratar a HBase como un RDBMS.De hecho, ¡tan a menudo he tenido que reescribir el código por eso!Es algo muy difícil de desaprender.

Ahora mismo tenemos sólo 4 mesas.Que, en este caso, son muy pocos teniendo en cuenta mis antecedentes.Sólo esperaba usar alguno Funcionalidad RDBMS mientras se ciñe principalmente al modelo de almacenamiento orientado a columnas.

¡Me alegra saber que están usando HBase!No soy un experto ni mucho menos, pero aquí hay un par de cosas que podrían ayudar.

  • HBase está basado/inspirado en BigTable, que AppEngine expone como su API de base de datos, por lo que navegando por sus documentos Debería ser de gran ayuda si estás trabajando en una aplicación web.

  • Si no está trabajando en una aplicación web, el tipo de iteración que está describiendo generalmente se maneja mediante map/reduce (no emita los valores que no desea).Omitir valores utilizando iteradores prácticamente garantiza que su aplicación tendrá cuellos de botella con conjuntos de datos del tamaño de HBase.Si descubre que todavía está pensando en SQL, consulte el tutorial de cerdo y el tutorial de colmena de Cloudera.

  • Básicamente, toda la diferencia mental de HBase/SQL (para aplicaciones que no son web) se reduce a "Enviar el cálculo a los datos, no enviar los datos al cálculo", si lo tienes en cuenta mientras codificas. lo haré bien :-)

Saludos,

David

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