Есть предложения по использованию хэша для postgres?

#postgresql

#postgresql

Вопрос:

Могу ли я использовать функцию CRC в качестве хэша для postgres?

Комментарии:

1. Вам нужен CRC конкретно или просто хэш-функция?

2. Я думаю, хэша было бы достаточно. Но не уверен. Мне нужен CRC для обнаружения изменений для набора столбцов. Я планирую использовать его для Lucene и должен теперь, если запись была изменена.

3. на самом деле я думаю о MD5, но не уверен, что это имеет смысл с точки зрения производительности и объема данных

4. Я бы предположил, что C MD5 будет быстрее, чем SQL или PgSQL CRC. Однако реализация CRC на C была бы довольно быстрой. OTOH, вам пришлось бы провести некоторое тестирование и измерения, чтобы увидеть, насколько это важно.

Ответ №1:

Если подойдет какая-либо старая хэш-функция, то в PostgreSQL есть md5() встроенная функция. MD5 должно быть достаточно для проверки, изменилась ли запись. Существует также двоичная версия, если вам нужно иметь дело с нетекстовыми данными.

Ответ №2:

Основываясь на комментарии, в котором говорится:

Мне нужен CRC для обнаружения изменений для набора столбцов. Я планирую использовать его для Lucene и должен теперь, если запись была изменена.

Проверка crc — плохая идея. Просто добавьте столбец «последнее изменение» в свою таблицу и обновите его в триггере, если какое-либо из полей было изменено.

Затем в вашем фидере lucene вы можете: выбрать * из объектов, где last_modified > ‘предыдущий last_modified’ — это быстро, потому что оно проиндексировано.

Комментарии:

1. да, это отличная идея. только для thing, в результате все записи обновлены. но на самом деле некоторые из них содержат те же данные, что и раньше. вот почему я думаю о crc

2. Извините, я не понимаю, что вы имеете в виду.

3. Я имею в виду, что я не могу добавить поле «последнее изменение». После каждого процесса обновления у меня есть все обновленные записи в результате. Таким образом, все записи будут помечены новой датой. Но некоторые записи я обновляю по старым данным. Например, records1 = «123», и я установил для него «123». По этой причине «последний мод» не является решением для меня.

4. Просто установите last_modified с помощью триггера, который проверяет, были ли изменения, и не изменяет last_modified, если не было изменений в других полях.

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