Я пытаюсь проверить базу данных правильных данных (на самом деле, файловую систему, но для этого обсуждения я хочу сохранить это простым). База данных имеет следующие свойства:
Может иметь 1 или 2 первичных ключа, и они ДОЛЖНЫ быть целыми числами.
Столбцы могут быть строковыми (не разрешенными ascii), целыми, длинными или datetime
Я хочу проверить, правильно ли хранятся значения, которые я запрашиваю в этой базе данных, с большим количеством записей (> 500 тыс. Записей). Поэтому для этого я хочу расширить инструмент, который генерирует данные, которые я могу легко проверить позже.
Итак, в принципе, скажем, что это пример схемы:
pk1 (int - primary key)
pk2 (int - primary key)
s1 (string)
l1 (long)
i1 (int)
Я хочу создать 500 тыс. Записей с помощью этого инструмента. Затем, в любой момент, я хочу иметь возможность проверить правильность записи. Я мог бы выполнить ряд операций (например, выполнить резервное копирование, затем восстановить базу данных), а затем «провести выборочную проверку» нескольких записей. Поэтому я хочу иметь возможность быстро проверить правильность записи для записи для первичного ключа (pk1 = 100, pk2 = 1).
Каков наилучший способ создания значений для каждого столбца, чтобы его можно было легко проверить позже. Значения не обязательно должны быть полностью случайными, но они также не должны повторяться часто, поэтому некоторые из логики сжатия могут быть также затронуты.
В качестве примера, скажите «как-то», инструмент сгенерировал следующее значение для строки:
pk1 = 1000
pk2 = 1
s1 = "foobar"
l1 = 12345
i1 = 17
Теперь я выполняю несколько операций и хочу убедиться, что в конце этого ряд не был поврежден. Я должен иметь возможность быстро генерировать ожидаемые значения для s1, l1 и i1 - учитывая pk1 = 1000 и pk2 = 1 - так что это может быть проверено очень быстро.
Идеи
(Я не могу опубликовать ответ на свой вопрос, так как я новичок, так что добавьте это :)
Итак, я должен найти возможные подходы:
Подход № 1:
используйте HASH (имя таблицы) ^ HASH (имя поля) ^ pk1 ^ pk2 в качестве начального числа. Таким образом, я могу легко вычислить начальное значение для каждого столбца при проверке. С другой стороны, это может быть дорого при генерации данных для большого количества строк, поскольку начальное число нужно вычислять один раз для столбца. Таким образом, для вышеупомянутой схемы у меня было бы 500k * 3 семени (для генерации 500k записей).
Подход № 2 (предложен Филиппом Вендлером):
Создайте одно семя на строку и сохраните семя в первом столбце этой строки. Если первый столбец имеет тип int или long, сохраните значение как есть. Если первый столбец является строкой, сохраните начальное число в первых x байтах, а затем дополните его до необходимой длины строки символами, сгенерированными с использованием этого начального числа.
Мне больше нравится подход № 2, потому что в каждой строке только одно начальное число - что делает генерацию данных несколько быстрее, чем подход № 1.