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

MySQL में NHibernate guid.comb प्राथमिक कुंजी का उपयोग करते समय विखंडन से कैसे बचें?

जैसा अल्बर्टो फेरारी द्वारा देखा गया और यहां StackOverflow पर चर्चा की गई , Microsoft SQL सर्वर एक विशिष्ट क्रम में बाइट्स की तुलना करके GUIDs को सॉर्ट करता है। चूंकि MySQL एक BINARY(16) को सॉर्ट करेगा "स्ट्रेट-फॉरवर्ड", हमें बस इतना करना है कि डेटाबेस को पढ़ते/लिखते समय बाइट्स को फिर से व्यवस्थित करना है।

NHibernate हमें कस्टम डेटा प्रकारों को परिभाषित करने की अनुमति देता है, जिसका उपयोग डेटाबेस और ऑब्जेक्ट्स के बीच मैपिंग में किया जा सकता है। मैंने एक BinaryGuidType लागू किया है , Guid.ToByteArray() जिस तरह से MSSQL GUID को सॉर्ट करता है और उन्हें द्वारा स्वीकृत प्रारूप में वापस क्रमित करता है। Guid(byte[]) कंस्ट्रक्टर।

बाइट क्रम इस तरह दिखता है:

int[] ByteOrder = new[] { 10,11,12,13,14,15,8,9,6,7,4,5,0,1,2,3 };

एक System.Guid सहेजा जा रहा है एक BINARY(16) . के लिए इस तरह जाता है:

var bytes = ((Guid) value).ToByteArray();
var reorderedBytes = new byte[16];

for (var i = 0; i < 16; i++)
{
    reorderedBytes[i] = bytes[ByteOrder[i]];
}

NHibernateUtil.Binary.NullSafeSet(cmd, reorderedBytes, index);

बाइट्स को वापस एक System.Guid . में पढ़ना इस तरह जाता है:

var bytes = (byte[]) NHibernateUtil.Binary.NullSafeGet(rs, names[0]);
if (bytes == null || bytes.Length == 0) return null;

var reorderedBytes = new byte[16];

for (var i = 0 ; i < 16; i++)
{
    reorderedBytes[ByteOrder[i]] = bytes[i];
}

BinaryGuidType के लिए पूर्ण स्रोत कोड यहाँ।

ऐसा लगता है कि यह अच्छा काम करता है। तालिका में 10.000 नए ऑब्जेक्ट बनाना और बनाए रखना, वे पूरी तरह से क्रमिक रूप से संग्रहीत किए जाते हैं, जिसमें अनुक्रमणिका विखंडन के कोई संकेत नहीं होते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे समग्र प्राथमिक कुंजी के साथ विरासत पठनीय डेटाबेस तालिकाओं के साथ Django का उपयोग कैसे करें?

  2. जावा MySQL कनेक्शन ClassNotFound अपवाद

  3. मैसकल क्वेरी जो श्रेणी ट्री लौटाती है

  4. MySQL और PHP दशमलव सटीक गलत

  5. अंतिम 3 वर्णों के अनुसार आदेश