Tengo una solución que se puede paralelizar, pero aún no tengo experiencia con hadoop/nosql, y no estoy seguro de cuál es la mejor solución para mis necesidades. En teoría, si tuviera CPU ilimitadas, mis resultados deberían regresar instantáneamente. Por lo que cualquier ayuda se agradece. ¡Gracias!consultar en tiempo real/agregar millones de registros - hadoop? hbase? ¿Casandra?
Esto es lo que tengo:
- 1000s de conjuntos de datos
- llaves de conjuntos de datos:
- todos los conjuntos de datos tienen las mismas claves
- 1 millón de claves (esto puede posteriormente ser de 10 o 20 millones)
- columnas del conjunto de datos:
- cada conjunto de datos tiene las mismas columnas
- 10 a 20 columnas
- mayoría de las columnas son los valores numéricos para los que tenemos que agregar el (promedio, STDDEV, y el uso de R para calcular las estadísticas)
- algunas columnas son "TYPE_ID" columnas, ya que en una consulta en particular que pueden sólo quieren incluir ciertos type_ids
- aplicación web
- usuario puede elegir qué Datas ets que están interesados en (entre 15 a 1000) necesita
- aplicación para presentar: llave, y los resultados agregados (avg, STDDEV) de cada columna
- actualizaciones de datos:
- todo un conjunto de datos se puede agregar, soltar o reemplazar/actualizar
- sería genial poder agregar columnas. Pero, si es necesario, puede simplemente reemplazar todo el conjunto de datos.
- nunca añada filas/llaves de un conjunto de datos - lo que no necesitan un sistema con una gran cantidad de escrituras rápidas
- infraestructura:
- actualmente dos máquinas con 24 núcleos cada
- finalmente, quiero capacidad de ejecutar también esta en Amazon
no puedo calcular previamente mis valores agregados, pero ya que cada tecla i s independiente, esto debería ser fácilmente escalable. Actualmente, tengo estos datos en una base de datos postgres, donde cada conjunto de datos está en su propia partición.
- particiones son agradables, ya que se pueden agregar fácilmente de inserción/extracción/reemplazo particiones
- base de datos es agradable para el filtrado basado en TYPE_ID
- bases de datos no son fáciles para escribir consultas paralelas
- bases de datos son buenos para estructurada datos y mis datos no está estructurado
Como una prueba de concepto que probé hadoop:
- creado un archivo separado pestaña por cada conjunto de datos para un determinado TYPE_ID
- subido a hdfs
- mapa: recuperan un valor/columna para cada
- reducir clave: calculado promedio y desviación estándar
De mi tosca prueba de concepto, puedo ver que esto se escalará muy bien, pero puedo ver que hadoop/hdfs tiene latencia. He leído que generalmente no se utiliza para consultar en tiempo real (aunque estoy de acuerdo en devolver los resultados). a los usuarios en 5 segundos).
¿Alguna sugerencia sobre cómo debo abordar esto? Estaba pensando en probar HBase para sentir eso. ¿Debo mirar a Hive? Cassandra? Voldemort?
gracias!
Gracias por la ayuda. Probablemente no tenía claro por qué no puedo hacer cálculos previos. Estoy buscando el valor promedio para una clave en particular y una columna en particular sobre un conjunto de conjuntos de datos arbitrarios (especificados por el usuario). Por ejemplo, un usuario puede elegir 500 conjuntos de datos, pero un usuario diferente puede elegir 500 conjuntos de datos diferentes. Aunque calculamos las estadísticas para todas las mismas claves y para todas las mismas columnas, los conjuntos de datos (archivos en hadoop o particiones en mi base de datos) son los que varian. Gracias. – anish
@anish Para el stddev y el promedio, puede precalcular y almacenar suficiente información para combinar conjuntos rápidamente: simplemente haga un seguimiento de la suma de los valores, la suma de los cuadrados y el recuento total. – cftarnas
OK, me siento un poco denso aquí, y me falta totalmente la forma de precalcular fácilmente los datos. Soy humilde ... ¿puedo obtener un poco de ayuda? Si tengo 3 datasets (A, B, C), mis posibles combos son: A, B, C, ABC, AB, BC. ¿No necesitaría precomputar todas las permutaciones? Con miles de datasets, esto sería una gran cantidad de datos. Alternativamente, iba a tratar de mejorar el rendimiento de recuperar los valores para conjuntos de datos específicos de todas las claves mediante: consultas paralelas, y tal vez un enfoque orientado a columnas (columnas = conjuntos de datos y valores correspondientes). David, gracias por decirme que pruebe HBase. ¡Gracias! – anish