Здравствуйте.
Может кто подскажет быструю хэш функцию для строк, основные критерии — быстрота, уникальность (без больших коллизий), минимальный размер.
Что-то типа MD5.
Было бы круто, если бы на sql server бы поддерживал ее еще
Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
Update
Rowversion и Datetime не подходят, т.к. не учитывают возврат к предыдущим значениям. Например.
2:11|Изменения1| версия 1
2:12|Изменения2| версия 2
2:13|Изменения1| версия 3
По состоянию в 2:13, нам не нужно делать синхронизацию, т.к. данные фактически не изменились, однако версия уже стоит 3.
Здравствуйте, alexsoff, Вы писали:
A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо.
Підтримати Україну у боротьбі з країною-терористом.
Здравствуйте, _ichensky, Вы писали: _>Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо.
Будет две копии таблиц, причем в двух совершенно разных базах, пользователи смогут изменять и там и там и нужно как-то сравнивать. Хэш нужен в основном, чтобы не перегружать канал.
Здравствуйте, alexsoff, Вы писали:
A>Здравствуйте, _ichensky, Вы писали: _>>Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо. A>Будет две копии таблиц, причем в двух совершенно разных базах, пользователи смогут изменять и там и там и нужно как-то сравнивать. Хэш нужен в основном, чтобы не перегружать канал.
Добавить поле int — номер версии, делать инкремент при изменении.
Q>Здравствуйте, alexsoff, Вы писали:
A>>Здравствуйте, _ichensky, Вы писали: _>>>Так в таком случае можно не хеш, а просто добавить еще одно поле в таблицу int|bool — что строка изменена, а лучше добавить Datetime когда она была изменена.Или даже вынести строку в отдельную таблицу и хранить историю ее изменения, если надо. A>>Будет две копии таблиц, причем в двух совершенно разных базах, пользователи смогут изменять и там и там и нужно как-то сравнивать. Хэш нужен в основном, чтобы не перегружать канал.
Q>Добавить поле int — номер версии, делать инкремент при изменении.
Тоже думал такое, однако будет тяжело поддерживать. Например, при сложных Updatах.
Здравствуйте, alexsoff, Вы писали:
A>Здравствуйте. A>Может кто подскажет быструю хэш функцию для строк, основные критерии — быстрота, уникальность (без больших коллизий), минимальный размер. A>Что-то типа MD5. A>Было бы круто, если бы на sql server бы поддерживал ее еще
A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
Здравствуйте, alexsoff, Вы писали:
A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения. http://geekswithblogs.net/TimothyK/archive/2014/01/14/introduction-to-rowversion.aspx
Здравствуйте, alexsoff, Вы писали:
A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
Timestamp\rowversion не?
A>>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения. G>Timestamp\rowversion не?
В моем случае это будет работать в одну сторону, т.к. вторая БД — SQLite.
Здравствуйте, alexsoff, Вы писали:
A>Здравствуйте. A>Может кто подскажет быструю хэш функцию для строк, основные критерии — быстрота, уникальность (без больших коллизий), минимальный размер. A>Что-то типа MD5. A>Было бы круто, если бы на sql server бы поддерживал ее еще
A>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
А rowversion не пойдет?
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Здравствуйте, Sshur, Вы писали:
A>>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
S>А rowversion не пойдет?
Нет, одна из СУБД — SQLite, там такого нет
Здравствуйте, alexsoff, Вы писали:
A>Здравствуйте, Sshur, Вы писали:
A>>>Какую задачу я решаю — мне нужно как-то определять, были ли изменения в строке в таблице СУБД (MS SQL, но без триггеров и прочего). Предполагается пробегаться по строкам и брать этот хэш и потом сохранять в другом месте, в следующий раз точно знать были ли изменения.
S>>А rowversion не пойдет? A>Нет, одна из СУБД — SQLite, там такого нет
Ну так вы заведите себе int столбец и каждый раз при update строки инкрементируйте это значение. Быстрее любого хэш алгоритма получится.
Здравствуйте, Spinifex, Вы писали:
S>Ну так вы заведите себе int столбец и каждый раз при update строки инкрементируйте это значение. Быстрее любого хэш алгоритма получится.
Некоторые updatы очень сложные, поэтому поддержка такого будет дорогостоящая.