Zagadka: co jest tutaj źle?
Załóżmy, że w aplikacji identyfikatory przyznawane wszystkim obiektom generowane są przez następujący kod:
def randomidgenerator(): starttimestamp = 1356994800 while True: currenttimestamp = int(time.time()) timestamp = (currenttimestamp – starttimestamp) / 60 r = struct.unpack(“B”, os.urandom(1))[0] << 24 yield struct.pack(“L”,(r ^ timestamp)).encode(“hex”)
Założenie jest takie, że przyznawane identyfikatory nie powinny być sekwencyjne, tak by enumeracja obiektów z użyciem bezpośredniego użycia identyfikatora była nieefektywna. Przewiduje się generowanie nie więcej niż jednego identyfikatora na sekundę. Identyfikatory muszą pozostać unikalne przez okres 10 lat.
Pytanie – ile widzicie błędów w tym podejściu?
Oryginał tego wpisu dostępny jest pod adresem Zagadka: co jest tutaj źle?
Autor: Paweł Goleń