2013-09-06 14 views
5

SQL Server'da SHA256 hash değerini saklarken hangi veri tipinin kullanılacağını tartışıyorum. CHAR (64) veya BINARY (32) olmalıdır ... Sütun benzersiz kümelenmiş bir dizinin parçası olacaktır. Bu noktada tüyleri muhtemelen böldüğümü biliyorum, ancak bunu ilk defa doğru yapmak istiyorum ve zaman zaman ilkel veri türlerinin daha hızlı olduğunu ve diğer zamanlarda daha egzotik türlerin daha iyi performans gösterdiğini biliyorum. (evet biliyorum char (64) tüm yeni değil, ama bayt depolamadan daha yeni)CHAR (64) veya BINARY (32) SQL Server'da SHA256 Karma'yı Kaydet

Aradım ve arama açısından diğerinin performansı hakkında bir şey bulamıyorum

+2

Bu yardımcı olur mu? http://stackoverflow.com/questions/252156/sql-server-2005-what-data-type-to-use-to-store-passwords-hashed-by-sha-256-algo – dcaswell

+1

İkili kullanırım (32) çünkü ben sadece (CL) üzerinden hemen hemen tüm münhasıran işin yapıldığı (ancak daha sonra insan etkileşimi için dönüşüm fonksiyonları kullanılabilir), çünkü bunu tartışmak için neden öne sürülmesinin bir nedeni yoktur (64). . Programlı olarak, işlenmemiş verilerin işlenmesi daha kolay değilse de kolaydır. Aynı zamanda biraz daha az yer kaplar (-> daha küçük endeksler/her zamankinden daha hızlı karşılaştırma) ve char (64) için tartışamadığımdan, sadece ücretsiz fayda sağlayabilir. – user2246674

+0

İkili (32) görüyorum ne görüyorum char (64) üzerinde bir kenar biraz vardır ve ben sadece SQL tarafında bu sütunu kullanacağım. Denklemin öbür tarafına da değinildiği gibi, kodda kullanılabilirlik söz konusudur, ancak ben bunu biraz daha fazla kazanmayı tercih ederim ve eğer gerçekten varsa, fazladan dev karmaşıklığı yemeyi tercih ederim. Yani .. Ben BINARY (32) kullanacağım. http://stackoverflow.com/a/16993150/128795 – kroolk

cevap

0

CHAR (64) kullanarak, anahtarınız "A" olsa bile her satır 64 bit alacak? Kümelenmiş bir dizin olarak bir dize kullandığınızı tartışmayacağım, bunun için iyi bir nedeniniz olduğunu varsayalım, fakat VARCHAR yerine CHAR kullanıyor musunuz? Değeri güncellemeyi mi planlıyorsunuz? Çünkü char kullanmanın tek nedeni varchar yerine

+1

Bir SHA256 hash her zaman 64 karakter alacaktır. Böylece CHAR vs VARCHAR. Yukarıdaki yorumlardan BINARY (32) 'nin gitmenin yolu olduğuna inanıyorum. Bu hashı kullanmamın sebebi, benzersiz olması gereken bir metin parçam olması (2048 inç) ve bir ipi sunuştan daha hızlı karşılaştırabiliyorum ve bir SHA256 çarpışmasının düşük olasılığını verebiliyorum. performans artışı. Bu tablo son derece işlemsel değil veya ilk veri popülasyonundan sonra olmayacak, ancak sıklıkla okunacak. Düşünceleriniz takdir ediliyor, bu yüzden yanıt vermekten/eleştirmekten çekinmeyin. – kroolk

+1

@kroolk SHA256, o zaman amaçlarınız için aşırı derecede fazladır. Yerleşik olmayan bir şey ararken etrafta dolanıp sakıncası yoksa, daha hızlı bir şifreli olmayan karma ile devam edebilirsiniz. (GitHub üzerinde bir .NET CityHash kitaplığı var ama yerel bir DLL dosyası içeriyor: https://github.com/gmarz/CityHash) – millimoose

İlgili konular