Post Thumbnail

В системах хранения данных каждая быстрая операция записи переносит недоделанную работу в другое место: возврат успеха сразу после копирования байтов в память оставляет риск потери при крахе машины, ожидание локального fdatasync() на SSD переживает сбой процесса и ядра, но не потерю диска или хоста, а запись на сетевой том, в объектное хранилище или на большинство реплик добавляет в каждую запись сетевую задержку и копирование, но переживает больше отказов.

Syscall скрывает разную латентность и разные гарантии, а нотация Big O показывает лишь рост работы с размером ключа и значения, но не стоимость flush'а, удаленного HTTP-запроса или сетевого round-trip перед подтверждением.

Быстрые GET, PUT и DELETE возможны только потому, что индекс хранит последние значения, несколько записей делят один flush, а удаление и компактация откладываются "на потом", что требует ограничений на размер файлов и очередей, иначе дешево выглядящий путь лишь прячет растущую очередь.

Всегда знайте где платить за скорость

Похожее