Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Szybsze mieszanie z mniejszą liczbą kolizji?

Która metoda jest szybsza?

Nie zaznaczałem tego w ławce, ale domyślam się, że DBMS_SQLHASH jest najszybszy, ponieważ został zbudowany właśnie z myślą o tego typu problemach.

Jest to oficjalny pakiet, ale nie jest dobrze udokumentowany w Bezpieczeństwo Przewodnik . Nie ma go na stronie 5964(!) Informacje o pakietach i typach PL/SQL , i musisz grant execute on dbms_sqlhash to [user]; aby to zadziałało, prawdopodobnie dlatego prawie nikt o tym nie słyszał.

Na przykład:

select sys.DBMS_SQLHASH.GETHASH(sqltext=>'select 1 from dual', digest_type=>1)
from dual;

typ_podsumowania:1 =HASH_MD4, 2 =HASH_MD5, 3 =HASH_SH1

Możliwość kolizji

Istnieje kilka pytań dotyczących prawdopodobieństwa kolizji:Hash Collision - jakie są szanse? , Czy dwa różne ciągi wygenerować ten sam kod skrótu MD5?

Nie jestem pewien, co dokładnie dzieje się z szansą, gdy zaczniesz sumować wiele wierszy, ale szanse na pojedynczą kolizję są tak śmiesznie niskie, że prawdopodobnie nic ci nie jest.

Nie znam matematyki, ale jestem pewien, że najbardziej prawdopodobną przyczyną kolizji jest błąd programowania, jeśli spróbujesz napisać własną funkcję.

Widziałem i budowałem skrypty takie jak ten i jest wiele subtelnych sposobów, aby to schrzanić. Na przykład wartości null i zamiana wartości między wierszami lub kolumnami. Nawet jeśli używasz teraz tylko jednej kolumny, aby uniemożliwić komuś napisanie jednego z tych brzydkich skryptów, powinieneś używać pakietu dostarczonego przez Oracle, gdy tylko jest to możliwe.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego otrzymuję ORA-00932:niespójne typy danych:oczekiwano - otrzymano - podczas używania COLLECT() w przygotowanym oświadczeniu?

  2. Który typ danych platformy .NET najlepiej nadaje się do mapowania typu danych Oracle NUMBER w NHibernate?

  3. Oracle EXECUTE IMMEDIATE w kursor

  4. Narzędzie ADODFCMP

  5. Wyodrębnij dane xml za pomocą zapytania Oracle