Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

कम टकराव के साथ तेज़ हैश?

कौन सी विधि तेज है?

मैंने इसे बेंच मार्क नहीं किया है, लेकिन मुझे लगता है कि DBMS_SQLHASH सबसे तेज़ है, क्योंकि इसे इस प्रकार की समस्या के लिए बिल्कुल बनाया गया था।

यह एक आधिकारिक पैकेज है, लेकिन सुरक्षा में अच्छी तरह से प्रलेखित नहीं है। गाइड . यह 5,964(!) पेज में नहीं है PL/SQL पैकेज और प्रकार संदर्भ , और आपको [उपयोगकर्ता] को dbms_sqlhash पर grant execute on dbms_sqlhash to [user]; इसके काम करने के लिए, शायद इसीलिए लगभग किसी ने इसके बारे में नहीं सुना।

उदाहरण के लिए:

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

डाइजेस्ट_टाइप:1 =HASH_MD4, 2 =HASH_MD5, 3 =HASH_SH1

टकराव की संभावना

टक्कर की संभावना के बारे में कुछ प्रश्न हैं:Hash Collision - क्या संभावनाएं हैं? , क्या दो अलग-अलग तार हो सकते हैं वही MD5 हैश कोड जनरेट करें?

मुझे यकीन नहीं है कि जब आप कई पंक्तियों को जोड़ना शुरू करते हैं तो मौके का क्या होता है, लेकिन एक टक्कर की संभावना इतनी हास्यास्पद रूप से कम है कि आप शायद ठीक हैं।

मैं गणित नहीं जानता, लेकिन मुझे यकीन है कि टकराव का सबसे संभावित कारण प्रोग्रामिंग त्रुटि से है यदि आप अपना स्वयं का फ़ंक्शन लिखने का प्रयास करते हैं।

मैंने इस तरह की स्क्रिप्ट देखी और बनाई हैं, और इसे खराब करने के कई सूक्ष्म तरीके हैं। उदाहरण के लिए, पंक्तियों या स्तंभों के बीच शून्य मान और स्वैपिंग मान। भले ही आप अभी केवल एक कॉलम का उपयोग कर रहे हैं, किसी को भी उन बदसूरत लिपियों में से किसी एक को लिखने से रोकने के लिए आपको जब भी संभव हो Oracle आपूर्ति पैकेज का उपयोग करना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlplus - IN क्लॉज में बाइंड वेरिएबल का उपयोग करना

  2. Oracle SQL डेटा में वर्ण ढूँढता है

  3. अपरिभाषित फ़ंक्शन पर कॉल करें oci_connect ()

  4. SQL सर्वर T-SQL में REGEXP_LIKE रूपांतरण

  5. Oracle में अल्पविराम से अलग सूची के रूप में वापसी क्वेरी परिणाम