Linq: Как сохранить хеш-столбец MD5 в базе данных - PullRequest
2 голосов
/ 18 октября 2011

Мне нужно поместить индекс в столбец хэша md5 в базе данных.Я буду выполнять поиск по колонке md5.Я собирался сохранить хеш как CHAR (32), но я также видел опцию двоичного столбца.Будет ли хранение хеша md5 работать лучше в двоичном столбце или символе (32).Могу ли я использовать Linq to Entities для запроса двоичного столбца?Если так, как бы я поступил об этом?

Ответы [ 3 ]

5 голосов
/ 18 октября 2011

Если вы используете SQLServer или любой другой сервер, который поддерживает 128-битные типы GUID ... вы можете использовать тип GUID для выражения значения MD5.

Поскольку MD5 составляет 16 байт (128 бит), вы можете легко преобразовать его в GUID. Для этого в C # вы можете использовать структуру Guid и \ или написать простые процедуры преобразования вручную.

Направляющие имеют формат xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, где x - шестнадцатеричный символ, но внутренне хранятся как 128-битные целые числа, поэтому они занимают очень мало места и очень, очень быстрые для запросов !

GUIDS работает намного лучше, чем char или двоичный код, они имеют фиксированный размер и часто используются в качестве ключей \ индексов вместо INT, когда требуется больше битов из-за их очень высокой скорости и малого места.

0 голосов
/ 18 октября 2011

Это действительно зависит от того, как вы представляете свой хэш в коде. Если это байтовый массив, используйте двоичный тип БД. Если это строка, используйте это. В любом случае, это все двоичные данные на каком-то уровне, это просто то, как компьютер должен их интерпретировать при показе данных вам.

0 голосов
/ 18 октября 2011

Если индексирование одинаковое, не имеет значения, какой тип вы выберете, разница будет в хранилище.Двоичный тип, вероятно, будет меньше, тогда как тип char будет кодировать значения как целые числа.Действительно, в конце дня я бы использовал символ, потому что он будет более щадящим, чем двоичный код.Так что, если вы не храните тонну этих, миллионы, это не будет иметь большого значения.

Что касается LINQ, я не уверен, но я уверен, что вы можетеэто будет просто поле вместо поля.Это еще одна причина, по которой я бы стал использовать char, это облегчает работу с linq.

...