5 ms·
The idea is not too far off. You could compute a hash on an existing data block. Store the hash and data block mapping. Now you can use the hash in anywhere tha
by ww520 1y ago
The idea is not too far off. You could compute a hash on an existing data block. Store the hash and data block mapping. Now you can use the hash in anywhere that data block resides, i.e. any duplicate data blocks can use the same hash. That's how storage deduplication works in the nutshell.
- valenterry 1y agoExcept that there are collisions...
- datameta 1y agoThis might be completely naive but can a reversible time component be incorporated into distinguishing two hash calculations? Meaning when unpacked/extrapolated it is a unique signifier but when decomposed it folds back into the standard calculation - is this feasible?
- ruined 1y agohashes by definition are not reversible. you could store a timestamp together with a hash, and/or you could include a timestamp in the digested content, but the timestamp can’t be part of the hash.
- RetroTechie 1y ago> hashes by definition are not reversible. Sure they are. You could generate every possible input, compute hash & compare with a given one. Ok it might take infinite amount of compute (time/energy). But that's just a technicality, right?
- dagw 1y agoSure they are. You could generate every possible input Depends entirely on what you mean by reversible. For every hash value, there are an infinite number of inputs that give that value. So while it is certainly possible to find some input that hashes to a given value, you cannot know which input I originally hashed to get that that value.
- datameta 1y agoOh, of course, the timestamp could instead be metadata!
- shakna 1y agoSome hashes do have verification bits, that are used not just to verify intact hash, but one "identical" hash from another. However, they do tend to be slower hashes.
- grumbelbart2 1y agoDo you have an example? That just sounds like a hash that is a few bits longer.
- shakna 1y agoMostly use of GCM (Galois/Counter Mode). Usually you tag the key, but you can also tag the value to check verification of collisions instead. But as I said, slow.
- ww520 1y agoCan use cryptographic hashing.
- anonymars 1y agoHow does that get around the pigeonhole principle? I think you'd have to compare the data value before purging, and you can only do the deduplication (purge) if the block is actually the same, otherwise you have to keep the block (you can't replace it with the hash because the hash link in the pool points to different data)
- ww520 1y agoThe hash collision chance is extremely low.
- valenterry 1y agoFor small amounts of data yeah. With growing data, the chance of a collision grows more than proportional. So in the context of working on storage systems (like s3 or so) that won't work unless customers actually accept the risk of a collission as okay. So for example, when storing media data (movies, photos), I could imagine that, but not for data in general.
- ww520 1y agoCryptographic hashing collisions are very very small, like end of universe in numerous times small. They're smaller than AWS being burnt down and all backups were lost leading to data loss.
- valenterry 1y agoYou have a point. When using MD5 (128bit) then when AWS S3 would apply this technique, it would only get a handful of collisions. Using 256bit would drive that down to a level where any collision is very unlikely. This would be worth it if a 4kb block is, on average, duplicated with a chance of at least 6.25%. (not considering overhead of data-structures etc.)