2009-04-06 10 views
2

У меня есть программа, в которой я должен убедиться, что URL существует или нет, если существует в базе данных, я должен выбрать ID, если нет, я должен вставить его в базу данных.GetHashCode для сравнения и равенства

У меня вопрос, является ли GetHashCode хорошим подходом для сохранения хеш-кода в базе данных и просто сравнения хэш-кодов? Могу ли я быть уверенным, что нет исключения, у которого два или более URL-адреса имеют одинаковые хеш-коды, а если нет, то отличается ли какая-то .NET Framework?

Благодаря

ответ

1
  1. Не используйте из коробки GetHashCode(), это неделя и может измениться в следующей версии.
  2. Используйте свою собственную функцию хеширования, используя SHA1/SHA2.
  3. Вам необходимо иметь дело с побегом, I.E. 'A B' == 'A% 20B'
  4. Вам также необходимо рассмотреть, что делать с чувствительностью к регистру.
+0

Tnx так много, как насчет MD5 для URL-адресов? –

+0

MD5 не работает: http://www.microsoft.com/technet/security/advisory/961509.mspx. –

+0

Разбито только для криптографических применений - в этом случае не должно быть никаких проблем – tanascius

0

Нет, это не очень хорошая идея - потому что GetHashCode() может возвращать разные результаты на следующую версию .NET Framework. см. msdn remarks

+0

Tnx так много, как насчет MD5 для URL-адресов? –

+0

Я думаю, что MD5 в порядке - но не забудьте нормализовать свои URL-адреса перед использованием MD5 или любой другой хэш-функции – tanascius

0

Не используйте его как идентификатор - GetHashCode может привести к тому же значению для разных строк.

Результат GetHashCode - это int32, поэтому он может хранить только 4e9 различных значений. Поскольку число веб-страниц уже находится вокруг этого значения (http://everything2.com/index.pl?node_id=1268366), вы можете быть почти уверены, что некоторые разные URL-адреса генерируют одинаковый хеш.

0

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

Помимо того, как хранить его, существуют разные способы представления одного и того же URL-адреса в другой строке, может быть хорошей идеей указать, насколько уникальными вы должны быть URL-адреса?

+0

Привет, Tnx many, я хочу, чтобы они были равны для всего URL-адреса. –

+0

, но http://www.google.com, http://www.GOOGLE.com, http://74.125.79.147, http: //% 77% 77% 77% 2e% 67% 6f% 6f% 67 % 6c% 65% 2e% 63% 6f% 6d, http: // 1249723236 и http: //74.0175.0x4364 все ведут к одной и той же странице, так насколько вам это уникально? –

+0

Это не важно, я хочу только идентификатор из моей БД, чтобы убедиться, что у меня есть ссылка, тогда у меня есть ID, а не 2 или более ID. –

 Смежные вопросы

  • Нет связанных вопросов^_^