Как рассчитать хеш строки в таблице базы данных SQL Anywhere 11? - PullRequest
2 голосов
/ 23 февраля 2011

Мое приложение постоянно опрашивает базу данных.В целях оптимизации я хочу, чтобы приложение запрашивало базу данных, только если таблицы были изменены.Поэтому я хочу вычислить HASH всей таблицы и сравнить ее с last-save-hash таблицы.(Я планирую вычислить хеш, сначала вычисляя HASH каждой строки, а затем следуя их хешу, то есть HASH хешей)

Я обнаружил, что для SQL Server существует служебная функция Checksum () sql, которая вычисляет HASH / Checksumдля одной строки.

Существует ли аналогичная утилита / запрос для поиска HASH строки в базе данных SQL Anywhere 11?

FYI, таблица базы данных не имеетлюбой столбец с предварительно вычисленной HASH / Checksum.

Ответы [ 2 ]

1 голос
/ 21 августа 2013

Это создает хэш для всех данных таблицы, чтобы обнаружить изменения в любом столбце:

CREATE VARIABLE @tabledata LONG VARCHAR;
UNLOAD TABLE MyTable INTO VARIABLE @tabledata ORDER ON QUOTES OFF COMPRESSED;
SET @tabledata = Hash(@tabledata);
IF (@tabledata <> '40407ede9683bcfb46bc25151139f62c') THEN
    SELECT @tabledata AS hash;
    SELECT * FROM MyTable;
ENDIF;
DROP VARIABLE @tabledata;

Конечно, это дорого и его не следует использовать, если объем данных составляет сотни мегабайт.Но если единственный другой способ - сравнить все данные для каких-либо изменений, это будет быстрее и приведет к загрузке и потреблению памяти только на сервере БД.

Если обнаружение изменений требуется только для нескольких столбцов, вывместо этого можно использовать UNLOAD SELECT col FROM table INTO ....

1 голос
/ 01 марта 2011

Получил ответ. Мы можем вычислить хеш для определенного столбца таблицы, используя следующий запрос:

-- SELECT HASH(coulum_name, hash_algorithm) 
-- For example:
SELECT HASH(coulmn, 'md5') 
FROM MyTable
...