Comments 11
Спасибо, что поделились интересным опытом. Просто интересно - а для чего могут быть нужны такие большие таблицы без первичного ключа? Это исторические данные какие-то?
Спасибо за отзыв.
А не знаю, что за сумрачный разум и зачем задизайнил такую табличную модель.
Мне задачу поставили - надо чтобы были реплики, от этого, вот там, делай.
Пытался отбиться, тыкал пальцем в гг-доку, говорил что - расхождения будут, что потом будем сидеть сверки делать, расхождения устранять между таблицами и репликами.
Ну. Этим и закончилось
Да это исторические таблицы, в большинстве своём.
Возьмём крохотную базу: одна таблица, в ней четыре коротких строки
A
A
B
C
Очевидно, по результату вычисления построчных хэшей и применения XOR вы ее не отличите от такой:
X
X
B
C
и даже от вот этой:
B
C
И не обижайтесь, но уж больно тяжко читать ваш пост с рандомно насыпанной кучей запятых.
Можете привести пример из жизни когда в таблице нужны неуникальные записи?
@sargon5000 Спасибо за содержательный коммент. Ради чего то такого и решился на публикацию.
Да, действительно. Тут даже можно усилить пример: по свойствам xor-операции A xor A = 0;
Т.е., например, две таблицы, с чётным, но разным, кол-вом одинаковых строк - дадут один и тот же xor-дайджест, увы.
Про запятые. Ну. Простите. Не писатель.
А почему в таблице-реплике может быть быть другой порядок записей?
Это практически неизбежно. SQL нисколько не гарантирует, что результат запроса SELECT будет получен в каком-то определенном порядке, если вы не указали в нем ORDER BY. Это даже если таблица и вся БД целиком лежат на одном диске. А она может быть шардирована и фрагментирована, и часть записей может быть помечена на удаление, плюс могут присутствовать разные версии записей, плюс данные могут храниться не построчно, а поколоночно.
Я думал, что есть встроенные утилиты/процедуры, которые бэкапят/восстанавливают таблицы, сохраняя порядок записей.
Клонирование диска разве что. Но все равно вам придется для сравнения читать последовательно записи из оригинала и из копии. Однако и первый SELECT, и второй вернут данные в произвольном порядке. Даже один и тот же SELECT, примененный дважды подряд без паузы к одной таблице в одной БД, может вернуть записи в разном порядке.
Сравнить таблицу и с её репликой