Un LSM-tree (Log-Structured Merge-tree) es una estructura de datos persistente que optimiza las operaciones de escritura al acumular cambios en memoria (memtable o C0) y luego volcarlos secuencialmente a componentes inmutables en disco (SSTables o C1, C2, etc.). Las escrituras son siempre adiciones o actualizaciones que se tratan como nuevas entradas, evitando modificaciones in-place. Las lecturas deben consultar múltiples componentes, desde el más reciente en memoria hasta los más antiguos en disco, lo que puede implicar un costo mayor. La clave de su eficiencia radica en la fusión (compaction) asíncrona de estos componentes en disco, que consolida versiones, elimina duplicados y organiza los datos para optimizar futuras lecturas.

El LSM-tree es la base de muchos sistemas de almacenamiento NoSQL y bases de datos distribuidas de alto rendimiento. Ejemplos prominentes incluyen Apache Cassandra, que lo utiliza para su almacenamiento de datos; Apache HBase, que lo implementa sobre HDFS; RocksDB y LevelDB, que son bibliotecas de almacenamiento clave-valor embebidas que ofrecen un rendimiento excepcional para cargas de trabajo de escritura intensiva; y ScyllaDB, una reimplementación de Cassandra en C++ que también se basa en LSM-trees. También se encuentra en sistemas como InfluxDB para series temporales y en la base de datos de CockroachDB.

Para un Arquitecto de Sistemas, entender el LSM-tree es crucial debido a sus trade-offs inherentes. Ofrece una alta tasa de escritura y durabilidad, ideal para sistemas con ingesta masiva de datos (logs, métricas, IoT). Sin embargo, las lecturas pueden ser más costosas debido a la necesidad de consultar múltiples niveles y la sobrecarga de la compactación puede afectar el rendimiento general, especialmente bajo cargas de escritura sostenidas. La elección de un LSM-tree implica aceptar una mayor amplificación de escritura y lectura, y la necesidad de gestionar la compactación (estrategias como Size-Tiered o Leveled Compaction) para equilibrar el rendimiento de lectura y escritura, el uso de espacio en disco y la latencia. Es una decisión estratégica para sistemas donde la disponibilidad y el rendimiento de escritura son prioritarios sobre la latencia mínima de lectura en todos los escenarios.