---
title: "Deduplikácia a integrita — Media Library for Laravel | Roundly"
description: "Content-addressable úložisko s mazaním stráženým refcountom, bezpečným aj pri súbežných zápisoch, a voliteľnou kontrolou checksumu pri čítaní."
url: https://roundly-consulting.com/sk/open-source/navody/media-library-for-laravel/deduplikacia
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Media Library for Laravel](https://roundly-consulting.com/sk/open-source/navody/media-library-for-laravel.md)

# Deduplikácia a integrita

Pri zapnutej deduplikácii sa rovnaké bajty na rovnakom (disk, visibility) uložia raz a zdieľajú sa referenciou, pokiaľ je zdieľaný súbor na disku stále prítomný — rovnako zdieľajú originál aj attach() a kópia na tom istom disku. Bezpečné zdieľanie zaručuje počítadlo referencií na uloženom súbore: fyzický originál sa odstráni — mazaním, presunom na iný disk či náhradou — len vtedy, keď na ten istý súbor (disk + cesta) už neukazuje žiadny iný riadok, vrátane soft-deleted riadkov, takže soft delete s následným obnovením nič nestratí ani pri zdieľanom súbore:

```php
// Identical bytes on the same (disk, visibility) are stored once.
$a = MediaLibrary::for($userA)->add($path)->toBucket('docs');   // the source path is only read
$b = MediaLibrary::for($userB)->add($path)->toBucket('docs'); // same bytes -> shared storage

// Deleting $a keeps the file alive while $b still references it.
MediaLibrary::delete($a); // the original stays until the last reference is gone

$b->verifyIntegrity();    // bool — false on drift or a missing file
```

Kontrolný súčet obsahu (predvolene sha256) je základom dedup aj voliteľnej kontroly integrity pri čítaní — nastavte verify\_checksum\_on\_read, aby sa originál pri streame/sťahovaní prehašoval a pri nezhode vyhodil ChecksumMismatch. Každý súbor sa overí algoritmom, ktorým sa vypočítal jeho checksum, takže po zmene media.checksum\_algorithm sa staršie médiá nikdy nenahlásia ako zmenené. Varianty sa nikdy nezdieľajú: každé médium si generuje vlastné. Zdieľaný originál sa ani neprepíše — náhrada pri jednom z riadkov zapíše nové bajty na vlastnú cestu — a adresáre sa upracú až vtedy, keď v nich nezostane nič, na čo ukazuje iný riadok.

## Súbežné zápisy a rollbacky

Riadok, ktorý začne zdieľať súbor, je pre ostatné spojenia neviditeľný, kým sa nepotvrdí, takže samotné počítadlo referencií by ho mohlo prehliadnuť. Balík túto medzeru uzatvára zámkami riadkov a mazaním až po potvrdení transakcie:

- Každý spôsob, ako riadok začne zdieľať originál — deduplikované pridanie či náhrada, attach() aj kópia na tom istom disku —, ho uloží pod zámkom (SELECT … FOR UPDATE, vo vlastnej transakcii — vo vašej ako savepoint) na riadku, ktorý súbor už ukladá. Súbežné zmazanie či presun tohto riadku počká, kým sa nový riadok potvrdí, a potom ho uvidí. Stačí uzamknúť jeden riadok: kým súbor stále ukladá, kontrola žiadneho iného riadku ho neodstráni.
- Ak zdieľaný riadok po získaní zámku už neexistuje — alebo ukladá iné bajty —, deduplikované pridanie či náhrada si uloží vlastnú kópiu, zatiaľ čo attach() a copy() vyhodia ModelNotFoundException.
- Náhrada uzamkne vlastný riadok skôr, než sa rozhodne, či originál prepíše na mieste, takže nikdy neprepíše bajty, ktoré sa chystá zdieľať nový riadok.
- Force delete odstráni súbory až po potvrdení vonkajšej transakcie (bez transakcie hneď): rollback ich ponechá a počítadlo referencií potom vidí aj riadok, ktorý medzitým začal originál zdieľať v inom spojení. Rovnako uvoľňujú staré súbory aj presun, presun variantov, naviazanie draftu a náhrada.
- Na skutočnom databázovom engine môžu dva takéto toky skončiť v deadlocku — každý drží riadok, ktorý chce ten druhý. Databáza jeden z nich preruší chybou deadlocku a volajúci ho môže zopakovať.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/media-library-for-laravel.md)
