Я работаю над системой базы данных, где находится один мастер bd & таблица и много подчиненных, а также для продажи необходимо синхронизировать свои данные с мастером.Строка MySQL Хеширование
Некоторые моменты об этом соглашении: 1) slave db (S) будет время от времени автономно работать, поэтому, когда они снова встанут, служба «синхронизирует» их. (Итак, нет репликации) 2) Я не могу изменить master db, так что не триггеры. (представьте себе, что мастер db не принадлежит мне) 3) Синхронизация произойдет в сервисе, и скорость не важна. 4) Нет большого количества данных, поэтому я мог бы даже ходить по каждой строке. 5) Данные в строках сильно варьируются: от varchar (3) до varchar (500)
Я оглядывался и нашел Md5() - это я считал отличным, потому что тогда я мог просто CONCACT() значения строк и сравнение строк и строк. Проблема, которую я обнаружил, заключалась в том, что CONCAT (AND GROUP_CONCAT) немного ограничивает, поскольку он имеет ограничение на характер.
Каков наилучший способ получить «строку» CHECKSUM или HASH?
CHECKSUM ROW WHERE id = 1 будет здорово ... что ближе всего к этому?
UPDATE: мне удалось добраться до этого "SELECT @@ group_concat_max_len;" возвращает max (4294967295). Но этот код все еще не работает:
SELECT id, MD5(GROUP_CONCAT(MD5(`id`), ...many columns here... ,MD5(`col30`))) AS 'md5Hash' FROM company_table GROUP BY id;
Он по-прежнему работает только на нескольких столбцах.
Вы можете увеличить лимит символов для 'group_concat' с помощью переменной' group_concat_max_len', эффективно сделав ее такой же большой, как ваша система будет максимально поддерживать. – bishop
Если это услуга, вы можете обрабатывать все внутри службы и запускать хэш на возвращаемых результатах, которые вы объединяете в код, если вы не можете установить 'group_concat_max_len', как было предложено епископом. Как вы сказали, скорость не вызывает беспокойства, и это принесет вам желаемые результаты. –
Учитывая ваши требования и ограничения, хеширование с помощью MD5 (GROUP_CONCAT (..))) кажется мне разумным. В частности, см. [Этот ответ] (http://stackoverflow.com/a/26733784/2908724). Решение уровня кода, предлагаемое в качестве @FrankJ, может в конечном итоге стать наилучшим подходом, поскольку оно будет более гибким, чем линейный уровень базы данных. – bishop