SPTM (Shared-Memory Parallel Transaction Manager) es un paradigma de diseño para sistemas de gestión de transacciones que operan en entornos de memoria compartida, como procesadores multi-core o NUMA. Su objetivo principal es maximizar el rendimiento de las transacciones concurrentes minimizando la latencia y el overhead asociados con la comunicación y la sincronización entre hilos o procesos. A diferencia de los sistemas distribuidos que dependen de la comunicación por red, SPTM aprovecha la baja latencia de acceso a la memoria compartida para coordinar las operaciones, utilizando mecanismos como bloqueos (locks), versiones de datos (multi-version concurrency control - MVCC) o transacciones de memoria de hardware (HTM) para garantizar la atomicidad, consistencia, aislamiento y durabilidad (ACID).
En el mundo real, los principios de SPTM se aplican en la implementación de bases de datos in-memory y sistemas de procesamiento de transacciones de alto rendimiento (OLTP) que se ejecutan en un único nodo con múltiples núcleos. Ejemplos incluyen sistemas de gestión de bases de datos como SAP HANA, que utiliza una arquitectura in-memory y optimizaciones para concurrencia en memoria compartida, o bases de datos como VoltDB, diseñadas para OLTP de alto rendimiento en arquitecturas multi-core. También es relevante en la implementación de sistemas de mensajería de baja latencia y frameworks de procesamiento de eventos complejos que coexisten en el mismo espacio de memoria para minimizar la serialización y deserialización de datos.
Para un arquitecto, SPTM es crucial al diseñar sistemas que requieren un rendimiento de transacciones extremadamente alto y baja latencia en un único nodo. La decisión de adoptar un enfoque SPTM implica un trade-off: se gana en rendimiento y simplicidad de coordinación al evitar la sobrecarga de la red, pero se sacrifica la escalabilidad horizontal ilimitada y la tolerancia a fallos inherente a los sistemas distribuidos. Un arquitecto debe considerar la capacidad de escalado vertical del hardware disponible, la complejidad de la lógica de concurrencia en memoria compartida (evitando deadlocks y race conditions), y las implicaciones de resiliencia (un fallo del nodo es un fallo del sistema). Es ideal para cargas de trabajo donde la mayoría de las transacciones pueden ser contenidas dentro de un único nodo físico y donde la latencia es una métrica crítica.