2010-04-04 28 views
72

En la terminología BigTable/GFS y Cassandra, ¿cuál es la definición de SSTable?¿Qué es un SSTable?

+0

Este es un gran post introducción a SSTables: http://www.igvita.com/2012/02/06/sstable-and-log-structured-storage-leveldb/ –

Respuesta

74

Ordenado Cuerdas Tabla (tomado de Google) es un archivo de pares de cadenas de clave/valor, ordenados por claves

+2

Gracias por otro excelente ¡Así que Cassandra responde! Por cierto, ¿has visto esta pregunta: http://stackoverflow.com/questions/2573106/what-are-the-alternative-ways-to-model-mm-relations-in-cassandra – knorv

+0

¿Es generalmente inmutable? –

+0

sí, las estructuras inestables son inmutables por diseño, lo cual es una característica increíble – Schildmeijer

41

"Un SSTable proporciona una ordenada mapa persistente, inmutable de llaves de valores, donde las claves y los valores son cadenas de bytes arbitrarias. Se proporcionan operaciones para buscar el valor asociado con una clave especificada, y para iterar sobre todos los pares clave/valor en un rango de clave especificado. Internamente, cada SSTable contiene una secuencia de bloques (típicamente cada bloque tiene 64 KB de tamaño , pero esto es configurable). Un índice de bloques (almacenado al final de SSTable) se usa para localizar bloques, el índice se carga en la memoria cuando se abre el SSTable. Se puede realizar una búsqueda con una sola búsqueda de disco: primero encuentra el bloque apropiado realizando una búsqueda binaria en el in-memor y index, y luego leer el bloque apropiado del disco. Opcionalmente, un SSTable puede ser completamente mapeado en memoria, lo que nos permite realizar búsquedas y exploraciones sin tocar el disco."

+4

"sin tocar el disco" -> "sin saber que el disco está siendo tocado". La asignación de memoria asignada IO es una técnica muy útil porque delega el IO real en el sistema operativo, suponiendo que puede hacer un buen trabajo en el almacenamiento en caché (especialmente cuando varios procesos comparten el mismo archivo). Pero tiene la desventaja de que no tienes control de eso. Si la página no está residente en la memoria, el hilo se bloqueará y no podrá realizar otras operaciones; contraste con "async IO", donde puede registrar una devolución de llamada y hacer otras cosas en el mismo subproceso, mientras que el IO está pendiente. – ithkuil

+0

@ithkuil: puede controlar absolutamente la IO asignada a la memoria al menos hasta el punto de poder asegurar que ciertas páginas estén en memoria o hayan sido asignadas al disco (todavía hay margen de maniobra para páginas que no están garantizadas) en memoria pero muy bien podría ser). De eso se tratan cosas maravillosas como mlock(), msync() y MAP_LOCKED.También puede obtener una comprensión de lo que actualmente está y no está localizado a través de mincore(). –

+1

@ChristopherSmith: sí, tienes razón, hay formas de controlarlo. Sin embargo, generalmente se usa para secciones críticas de rendimiento (en tiempo real) o cuestiones relacionadas con la seguridad (como evitar que una contraseña en memoria se intercambie en el disco). Los archivos mapeados en memoria son muy útiles precisamente por el hecho de que no tiene que decidir cuánto de ellos mantener en la memoria; de lo contrario, podría leer todo el archivo en la memoria sin mmap y lograr el mismo efecto. De hecho, acabo de analizar el código de cassandra; la única llamada es 'mlockall (MCL_CURRENT);' hecho al inicio. Ver también: http://goo.gl/AEgPM – ithkuil

3

Un comprimido se almacena en la forma de SSTables.

SSTable (directamente asignada a GFS) se . clave-valor basado almacenamiento inmutable almacena fragmentos de datos, cada uno es de 64 KB

Definiciones:.

  • Índice de las claves: clave y ubicación de inicio
  • Chunk es una unidad de almacenamiento en GFS, la gestión de réplica son a pedazo
2
  • SSTable (Engl. Sorted Strings Table) es un archivo de cadena de clave/valor pares, ordenados por claves.

  • Un SSTable proporciona un mapa inmutable ordenado persistente de las claves a los valores , donde tanto las claves como los valores son cadenas de bytes arbitrarias.

  • Internamente, cada SSTable contiene una secuencia de bloques (normalmente
    cada bloque tiene un tamaño de 64 KB, pero esto es configurable).