Быстрый алгоритм хэширования
От: alexsoff Россия  
Дата: 05.12.15 14:04
Оценка:
Здравствуйте.
Может кто подскажет быструю хэш функцию для строк, основные критерии — быстрота, уникальность (без больших коллизий), минимальный размер.
Что-то типа MD5.
Было бы круто, если бы на sql server бы поддерживал ее еще

Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
Update
Rowversion и Datetime не подходят, т.к. не учитывают возврат к предыдущим значениям. Например.

2:11|Изменения1| версия 1
2:12|Изменения2| версия 2
2:13|Изменения1| версия 3

По состоянию в 2:13, нам не нужно делать синхронизацию, т.к. данные фактически не изменились, однако версия уже стоит 3.
Отредактировано 06.12.2015 14:50 alexsoff . Предыдущая версия .
Re: Быстрый алгоритм хэширования
От: _ichensky Европа https://github.com/ichensky
Дата: 05.12.15 14:42
Оценка:
Здравствуйте, alexsoff, Вы писали:

A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.

Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[2]: Быстрый алгоритм хэширования
От: alexsoff Россия  
Дата: 05.12.15 14:55
Оценка:
Здравствуйте, _ichensky, Вы писали:
_>Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо.
Будет две копии таблиц, причем в двух совершенно разных базах, пользователи смогут изменять и там и там и нужно как-то сравнивать. Хэш нужен в основном, чтобы не перегружать канал.
Re[3]: Быстрый алгоритм хэширования
От: Qulac Россия  
Дата: 05.12.15 15:24
Оценка:
Здравствуйте, alexsoff, Вы писали:

A>Здравствуйте, _ichensky, Вы писали:

_>>Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо.
A>Будет две копии таблиц, причем в двух совершенно разных базах, пользователи смогут изменять и там и там и нужно как-то сравнивать. Хэш нужен в основном, чтобы не перегружать канал.

Добавить поле int — номер версии, делать инкремент при изменении.
Программа – это мысли спрессованные в код
Re[4]: Быстрый алгоритм хэширования
От: alexsoff Россия  
Дата: 05.12.15 15:32
Оценка:
Здравствуйте, Qulac, Вы писали:
  cut
Q>Здравствуйте, alexsoff, Вы писали:

A>>Здравствуйте, _ichensky, Вы писали:

_>>>Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо.
A>>Будет две копии таблиц, причем в двух совершенно разных базах, пользователи смогут изменять и там и там и нужно как-то сравнивать. Хэш нужен в основном, чтобы не перегружать канал.

Q>Добавить поле int — номер версии, делать инкремент при изменении.
Тоже думал такое, однако будет тяжело поддерживать. Например, при сложных Updatах.
Re: Быстрый алгоритм хэширования
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.12.15 16:22
Оценка:
Здравствуйте, alexsoff, Вы писали:

http://rsdn.ru/forum/alg/664824.1
Автор: Serginio1
Дата: 03.06.04
и солнце б утром не вставало, когда бы не было меня
Re: Быстрый алгоритм хэширования
От: Kolesiki  
Дата: 05.12.15 16:38
Оценка: 1 (1)
Здравствуйте, alexsoff, Вы писали:

A>Может кто подскажет быструю хэш функцию


Не раз уже пробегала — Blake 2
Re: Быстрый алгоритм хэширования
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 05.12.15 16:49
Оценка:
Здравствуйте, alexsoff, Вы писали:

A>Здравствуйте.

A>Может кто подскажет быструю хэш функцию для строк, основные критерии — быстрота, уникальность (без больших коллизий), минимальный размер.
A>Что-то типа MD5.
A>Было бы круто, если бы на sql server бы поддерживал ее еще

A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.



MurMurHash3
Re: Быстрый алгоритм хэширования
От: Sinix  
Дата: 05.12.15 17:09
Оценка:
Здравствуйте, alexsoff, Вы писали:

A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.

http://geekswithblogs.net/TimothyK/archive/2014/01/14/introduction-to-rowversion.aspx

?
Re: Быстрый алгоритм хэширования
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.12.15 17:14
Оценка: +1
Здравствуйте, alexsoff, Вы писали:

A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.

Timestamp\rowversion не?
Re: Быстрый алгоритм хэширования
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.12.15 17:25
Оценка: +1
Здравствуйте, alexsoff, Вы писали:

http://stackoverflow.com/questions/11186183/hash-a-sql-row
и солнце б утром не вставало, когда бы не было меня
Re[2]: Быстрый алгоритм хэширования
От: alexsoff Россия  
Дата: 05.12.15 18:32
Оценка:
A>>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
G>Timestamp\rowversion не?
В моем случае это будет работать в одну сторону, т.к. вторая БД — SQLite.
Re: Быстрый алгоритм хэширования
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 05.12.15 19:27
Оценка: +1
Здравствуйте, alexsoff, Вы писали:

A>Здравствуйте.

A>Может кто подскажет быструю хэш функцию для строк, основные критерии — быстрота, уникальность (без больших коллизий), минимальный размер.
A>Что-то типа MD5.
A>Было бы круто, если бы на sql server бы поддерживал ее еще

A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.


А rowversion не пойдет?
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[2]: Быстрый алгоритм хэширования
От: alexsoff Россия  
Дата: 06.12.15 10:40
Оценка:
Здравствуйте, Sshur, Вы писали:

A>>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.


S>А rowversion не пойдет?

Нет, одна из СУБД — SQLite, там такого нет
Re[3]: Быстрый алгоритм хэширования
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 06.12.15 11:43
Оценка:
Здравствуйте, alexsoff, Вы писали:

A>Здравствуйте, Sshur, Вы писали:


A>>>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.


S>>А rowversion не пойдет?

A>Нет, одна из СУБД — SQLite, там такого нет
Ну так вы заведите себе int столбец и каждый раз при update строки инкрементируйте это значение. Быстрее любого хэш алгоритма получится.
Re[4]: Быстрый алгоритм хэширования
От: alexsoff Россия  
Дата: 06.12.15 13:04
Оценка:
Здравствуйте, Spinifex, Вы писали:

S>Ну так вы заведите себе int столбец и каждый раз при update строки инкрементируйте это значение. Быстрее любого хэш алгоритма получится.

Некоторые updatы очень сложные, поэтому поддержка такого будет дорогостоящая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.