En la terminología BigTable/GFS y Cassandra, ¿cuál es la definición de SSTable?¿Qué es un SSTable?
Respuesta
Ordenado Cuerdas Tabla (tomado de Google) es un archivo de pares de cadenas de clave/valor, ordenados por claves
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
¿Es generalmente inmutable? –
sí, las estructuras inestables son inmutables por diseño, lo cual es una característica increíble – Schildmeijer
"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."
"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
@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(). –
@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
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
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).
- 1. ¿Qué es un Pagelet?
- 2. ¿Qué es un UUID?
- 3. Qué es un Sandbox
- 4. ¿Qué es un antipatrón?
- 5. ¿Qué es un índice?
- 6. ¿Qué es un lote?
- 7. ¿Qué es un "mango"?
- 8. ¿Qué es un textViewResourceId?
- 9. ¿Qué es un clabject?
- 10. ¿Qué es un dll?
- 11. ¿Qué es un protocolo?
- 12. ¿Qué es un DList?
- 13. ¿Qué es un tipo?
- 14. ¿Qué es un contexto?
- 15. ¿Qué es un descriptor?
- 16. ¿Qué es un invariante?
- 17. ¿Qué es un classpath?
- 18. ¿Qué es un Lambda?
- 19. ¿Qué es un despachador
- 20. ¿Qué es un blob?
- 21. ¿Qué es un runloop?
- 22. ¿Qué es un historiador?
- 23. ¿Qué es un UIViewController
- 24. Qué es un componente
- 25. ¿Qué es un NSCFDiccionario?
- 26. ¿Qué es un NSPathStore2?
- 27. ¿Qué es un javabean?
- 28. ¿Qué es un Rakefile?
- 29. ¿Qué es un UIGobblerGestureRecognizer?
- 30. ¿Qué es un PDI y qué significa?
Este es un gran post introducción a SSTables: http://www.igvita.com/2012/02/06/sstable-and-log-structured-storage-leveldb/ –