Pull to refresh

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, примененный дважды подряд без паузы к одной таблице в одной БД, может вернуть записи в разном порядке.

Sign up to leave a comment.

Articles