2010-06-27 24 views
5

A partir de los grupos de debate en línea y los blogs, he visto que muchas preguntas de la entrevista están relacionadas con el manejo de datos a gran escala. Me pregunto si existe un enfoque sistemático para analizar este tipo de preguntas. O en términos más específicos, ¿hay alguna estructura de datos o algoritmos que puedan usarse para tratar con esto? Cualquier sugerencia es realmente apreciada.Manejo del conjunto de datos a gran escala

+1

@Claudiu: Ciertamente no lo es, pero espero que la gente haga el esfuerzo de aceptar respuestas de todos modos. Es una forma educada de hacer, y una parte valiosa de cómo funciona la comunidad. –

+0

No me di cuenta de este problema antes, le prestaré más atención más adelante. –

+0

@ bit-question: ¡Gracias! –

Respuesta

8

Los conjuntos de datos de "gran escala" se dividen en varias categorías que he visto, cada una de las cuales presenta diferentes desafíos para que usted piense.

  1. Datos que son demasiado grandes para caber en la memoria. A continuación, algunas de las técnicas más importantes son:
    • caché de datos que se utilizan con frecuencia para un mejor rendimiento
    • Trabajando en los datos en un archivo de un trozo a la vez, en lugar de tratar de leer todo el archivo en memoria a la vez (si' no funciona secuencialmente a través del archivo, ¡esto puede ser particularmente desafiante!)
    • Distribución de datos en la memoria de varias máquinas.
  2. Datos que son demasiado grandes para caber en un solo archivo debido a limitaciones del sistema de archivos o de la arquitectura del hardware. Esto es bastante fácil de resolver, dividir el archivo, pero en muchos casos hay una pregunta práctica sobre lo que sería una división sensata.
  3. Datos que son demasiado grandes para caber en un solo disco duro. Aquí, la mayoría de las técnicas son para comprar discos más grandes :-), o para distribuir los datos entre varias máquinas.
    • La distribución de datos en varias máquinas plantea desafíos interesantes cuando necesita realizar análisis o transformaciones en los datos. Este es un tema profundo con muchos enfoques y desafíos diferentes.Los marcos Map/reduce como CouchDB y Hadoop se han convertido recientemente en herramientas populares para investigación y aplicación en esta área.
  4. Datos que son demasiado grandes para una sola instancia de base de datos. Esto puede ser un problema de tamaño del disco (se quedó sin espacio) o rendimiento (la memoria caché se sigue volviendo, los índices simplemente se han vuelto demasiado grandes). Mantener la solidez y el rendimiento de la división de datos en múltiples instancias de DB, potencialmente en múltiples centros de datos, es un área de interés permanente para las grandes empresas. Aquí, las opciones son:
    • divisiones verticales (tablas diferentes a diferentes DBS)
    • divisiones horizontales (misma mesa en diferentes DBs, pero que contienen datos diferentes)

Otros problemas asociados a menudo con conjuntos de datos a gran escala, pero no los problemas relacionados con el tamaño per se, son:

  1. Dat un que viene rápido Piense en los sistemas que necesitan escalar a millones o incluso miles de millones de transacciones por minuto.
  2. Datos que cambian constantemente. ¿Cómo manejas los datos obsoletos o los datos que se están modificando mientras trabajas en él?
1

No existe una sola estructura de datos o algoritmo para "manejar" grandes conjuntos de datos de cualquier naturaleza y para todos los fines posibles, hay una gran colección de tales arquitecturas, estructuras de datos y algoritmos para tantos tipos variados de datos, y de "manejo" requerido (en una sola tarea, SMP, y entornos distribuidos - bien pueden requerir enfoques muy diferentes en muchos casos).

1

No hay una bala de plata. Se necesita más información contextual para comprender qué algoritmos y estructuras de datos son útiles para un propósito dado a gran escala. Para datos que son demasiado grandes para caber en la memoria, por ejemplo, muchos sistemas de administración de bases de datos usan árboles B +.

0

Cuando las personas describen un conjunto de datos Large, con frecuencia se refieren a uno en el que no se puede almacenar todo el conjunto de datos en la memoria. Esto crea desafíos en cuanto a qué datos cargar y cuándo cargarlos y descargarlos.

Un enfoque es utilizar un archivo de datos secuenciales y el proceso de principio a fin. Esto es efectivo cuando la naturaleza del procesamiento es secuencial, pero no funciona bien cuando el procesamiento necesita combinar datos de varias partes del conjunto de datos.

Otro enfoque es algún tipo de archivo indexado, recuperando los bits de datos necesarios a medida que se necesitan.

Una especialización de esto es el uso de archivos asignados de memoria, donde permite que el administrador de la memoria maneje la carga y el almacenamiento en caché de datos.

Un DBMS puede simplificar enormemente el acceso a los datos, pero agrega un poco de sobrecarga del sistema.

Cuestiones relacionadas