powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / функция hash
25 сообщений из 79, страница 2 из 4
функция hash
    #39162347
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryViktor_bsТ.е. ни одной коллизии за все время, иначе бы пользователи убили из-за невозможности внести записи справочники (защита от дублей)
Если у вас на хеш навешен уник, поздравляю, "Шарик, ты балбес!" (ц)

Ну такое возможно, если достаточно длинные строки вводить - коллизия может и не проявится. Но вешать уник на поле, которое вычисляется по алгоритму, предполагающему возникновение коллизии - это да, не хорошо.
...
Рейтинг: 0 / 0
функция hash
    #39162660
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterНу такое возможно, если достаточно длинные строки вводить - коллизия может и не проявится. Но вешать уник на поле, которое вычисляется по алгоритму, предполагающему возникновение коллизии - это да, не хорошо.
Хеш - это и есть "алгоритм, предполагающий возникновение коллизии".
Хеш без коллизий возможен, но его объём в таком случае мало отличается от объёма хешируемых данных, потому для простоты можно использовать сами данные.
...
Рейтинг: 0 / 0
функция hash
    #39162693
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterХа. Ларчик открывался просто ;)
+1

на последнем релизе птицы в win1251 результат как у ТС, в utf8 - как у вадмана и МП
...
Рейтинг: 0 / 0
функция hash
    #39162785
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryViktor_bsТ.е. ни одной коллизии за все время, иначе бы пользователи убили из-за невозможности внести записи справочники (защита от дублей)
Если у вас на хеш навешен уник, поздравляю, "Шарик, ты балбес!" (ц)
:) Как по-вашему это (уникальность строк) нужно было делать?
...
Рейтинг: 0 / 0
функция hash
    #39162803
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bsWildSeryпропущено...

Если у вас на хеш навешен уник, поздравляю, "Шарик, ты балбес!" (ц)
:) Как по-вашему это (уникальность строк) нужно было делать?
По самим строкам и делать.
...
Рейтинг: 0 / 0
функция hash
    #39162808
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanViktor_bsпропущено...

:) Как по-вашему это (уникальность строк) нужно было делать?
По самим строкам и делать.
Предугадывая вопросс "а если строк очень много" - можно использовать хеш, но при совпадение хешей обязательно дополнительно проверять совпадение строк. Вешать юник на чистый хеш - да, очень плохая идея.
...
Рейтинг: 0 / 0
функция hash
    #39162881
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно по двум хешам, например md5 и sha2

а если чуть серьезней, а почему тогда на GUID'ы можно юники вешать?
...
Рейтинг: 0 / 0
функция hash
    #39162889
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

каким образом связаны GUID'ы и хэши?
...
Рейтинг: 0 / 0
функция hash
    #39162890
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlinewadmanпропущено...

По самим строкам и делать.
Предугадывая вопросс "а если строк очень много" - можно использовать хеш, но при совпадение хешей обязательно дополнительно проверять совпадение строк. Вешать юник на чистый хеш - да, очень плохая идея.
Я не зря задал этот вопрос, т.к. предполагал такие ответы :)
1. Напомните мне когда появилась возможность строить индекс по строкам длиннее 84 символов?
2. В критичных местах так и было, но с юником. Процедура вставляющая запись и возвращающая ее ID проверяла на совпадение строк в случае нахождения хеша и при коллизии (несовпадении строк) давала ошибку. За 15 лет ни одной ошибки. Наверное везет.
2. Если не строить уникальный индекс то в многопользовательской среде возможны дубли и они на практике были, а для некоторых задач (синдикативная информация) дубли критичнее чем возможные отлупы.
3. В наиболее критичном месте используем 2 разных хеш-алгоритма, но с уником и дополнительной постобработкой отпупов на уникальность (возникают при одновременной вставке с разных транзакций одинакового нового написания).

Еще варианты решения? Мне действительно интересно, но для отсечения теоретиков с.м. картину ниже:
Размер баы >1Тб, количество пользователей ~200
...
Рейтинг: 0 / 0
функция hash
    #39162898
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

> 1. Напомните мне когда появилась возможность строить индекс по строкам длиннее 84 символов?

начиная с Firebird 2.0 (2006-2007 год) разрешено делать индексы до 1/4 страницы

> 2. Если не строить уникальный индекс то в многопользовательской среде возможны дубли и они на практике были, а для некоторых задач (синдикативная информация) дубли критичнее чем возможные отлупы.

дык я не пойму, если вы там решили переписать полсистему чтобы заменить UDF на встроенную функцию, то какая вам разница, что придётся индексы переделывать на обычные юники
...
Рейтинг: 0 / 0
функция hash
    #39162903
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

тем, что GUIDы тоже пересекаются, хотя и с вероятностью 2^-128 - но у длиных хороших хешей примерно так же
...
Рейтинг: 0 / 0
функция hash
    #39162914
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochGUIDы тоже пересекаются, хотя и с вероятностью 2^-128 - но у длиных хороших
хешей примерно так же
Э-э-э... Они как бы для совсем разных целей выдумывались и совершенно не взаимозаменяемы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
функция hash
    #39162923
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bsЕще варианты решения?
Решения чего именно? Соблюдения уникальности строк? Ничего умнее сравнения хеша и при совпадении - сравнения исходной строки не придумали, насколько мне известно.

Интенсивная многопользовательская работа, как и любая другая реальная ситуация, может внести свои дополнения, конечно.

Viktor_bsдля отсечения теоретиков с.м. картину ниже
Теоретикам как раз все равно, о чем теоретизировать, это ты практиков пугаешь
...
Рейтинг: 0 / 0
функция hash
    #39162934
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисViktor_bs,

> 1. Напомните мне когда появилась возможность строить индекс по строкам длиннее 84 символов?

начиная с Firebird 2.0 (2006-2007 год) разрешено делать индексы до 1/4 страницы

> 2. Если не строить уникальный индекс то в многопользовательской среде возможны дубли и они на практике были, а для некоторых задач (синдикативная информация) дубли критичнее чем возможные отлупы.

дык я не пойму, если вы там решили переписать полсистему чтобы заменить UDF на встроенную функцию, то какая вам разница, что придётся индексы переделывать на обычные юники

Та основную систему никто не трогает. Одну из некритических баз решил перевести на 3-ку, а поскольку поглядываю на x64, то по "совету друзей" решил заменять UDF типа trim, power и т.д. на встроенные, и дрогнула рука заменить хеш, тем более поле в обоих случаях INT64. На более глубокие переделки нет времени и пока вся эта миграция на 3-ку на "добровольных началах".
...
Рейтинг: 0 / 0
функция hash
    #39162939
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

но в плане их использования в качестве Unique ID разница не важна IMHO
...
Рейтинг: 0 / 0
функция hash
    #39162941
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чудо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <stdio.h>

unsigned long ElfHash ( const unsigned char *s )
{
    unsigned long   h = 0, high;
    while ( *s )
    {
        h = ( h << 4 ) + *s++;
        if ( high = h & 0xF0000000 )
            h ^= high >> 24;
        h &= ~high;
    }
    return h;
}

void main()
{
	const unsigned char arl[] = "АРЛЕТ";
	const unsigned char bal[] = "БАЛЕТ";

	printf("%u\n", ElfHash(arl));
	printf("%u\n", ElfHash(bal));

}


D:\VSProjects\elfhash>elfhash.exe
13490210
13490210

Вообще то четырехбайтный хэш это как то слабовато для БД
...
Рейтинг: 0 / 0
функция hash
    #39162942
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochно в плане их использования в качестве Unique ID разница не важна IMHO

Это ты как-то неправильно понимаешь идею использования хэша...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
функция hash
    #39163483
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,
Чудо не случилось:
Код: sql
1.
2.
3.
4.
$ g++ -Wall -O3 -o elfhash elfhash.cpp
$ ./elfhash
228925186
228924466


У тебя исходник в cp1251, а у меня в utf-8. :)
О чём тут неоднократно писали.
...
Рейтинг: 0 / 0
функция hash
    #39163537
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs:) Как по-вашему это (уникальность строк) нужно было делать?Зависит от контекста задачи.
Уникальность текстовых строк (а не каких-нибудь строковых кодов) сама по себе задача редкая и с кучей нюансов в каждом конкретном случае.
...
Рейтинг: 0 / 0
функция hash
    #39163681
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

при чём тут вообещ хэш, если я говорил о GUID ?
...
Рейтинг: 0 / 0
функция hash
    #39163742
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Сперва искусственно ввёл в беседу о хеше GUID, и теперь заявляешь "при чём тут хеш"?
Не веди так дискуссию.
...
Рейтинг: 0 / 0
функция hash
    #39163758
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TonalSiemargl,
Чудо не случилось:
Код: sql
1.
2.
3.
4.
$ g++ -Wall -O3 -o elfhash elfhash.cpp
$ ./elfhash
228925186
228924466


У тебя исходник в cp1251, а у меня в utf-8. :)
О чём тут неоднократно писали.
Чудо в том, что алгоритм соответствует и дает тот же результат (у меня).

Кстати, у тебя то не совпал результат - должно быть
HASHHASH114 970 874 536 61014 974 901 068 450 - разбирайся где напортачил, не смог правильно скомпилировать 3 строки? =)

И разверну мысль - для 4х байтного хэша слишком высокая вероятность коллизий для СУБД, которые оперируют сотнями миллионов записей.
...
Рейтинг: 0 / 0
функция hash
    #39163772
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

вопрос в том для чего ты этот хеш будешь применять. Для паролей в FB используется другой алгоритм.

Если ты говоришь про HASH JOIN (я не знаю какой там алгоритм используется), то там коллизии неизбежны, так как размер хеш таблицы всё равно ограничен, иначе будет гигантский оверхэд по памяти.

Что касается встроенной функции, то она в будущем может быть расширена так чтобы принимать дополнительные необязательные параметры, например алгоритм и др. Но я думаю приоритет данной фичи будет ниже плинтуса.
...
Рейтинг: 0 / 0
функция hash
    #39163801
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМНО, для текущего поколения техники 64-бит было бы оптимальным.
...
Рейтинг: 0 / 0
функция hash
    #39163815
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хеш и так 64-битный
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 2 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / функция hash
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]