Il blob esistente è innocuo, ma un record del database che punta a un blob che non esiste sarebbe negativo. Pertanto, implementerei la transazione con la seguente logica.
Al momento della creazione ... aggiungere prima il blob, quindi creare il record del database. Se il caricamento del blob fallisce, basta tornare. Se il caricamento blob ha esito positivo, ma il record del database non riesce, eliminare il blob e restituire. Il punto è che non si vorrebbe creare un record del database fino a dopo un caricamento blob riuscito. Si desidera inoltre pulire il BLOB se non è possibile aggiornare il record del database. Se la pulizia del BLOB fallisce, vorrei semplicemente avere un servizio che funzioni periodicamente per ripulire i BLOB senza riferimento creati più di un'ora prima solo così non tenta di cancellarne uno tra il caricamento e la creazione del record del database.
Durante la rimozione ... Eliminare prima il record del database. Se fallisce, basta tornare, il blob e il record del database sono entrambi ancora lì. Se il record del database è cancellato ok, il blob non fa male nulla rimanendo lì, quindi puoi provare a eliminarlo immediatamente o lasciarlo per un servizio di pulizia di cui occuparti più tardi.