2012-06-07 2 views
2

У меня есть объемная вставка около 100 000 записей, которая собирается в таблице оракула, имеющей один уникальный столбец значений. Эта объемная вставка будет проходить дважды или трижды в день до многих лет (никогда не заканчивается).Уникальная генерация числа в C#

Нужен надежный механизм для генерации уникальных чисел уникального столбца значения. Я создаю набор данных для фиксации базы данных сразу.

Раньше я создавал последовательность в оракуле и строя строки набора данных, попадая в базу данных, получая новый порядковый номер и помещая его в этот столбец. Но это дает проблемы с производительностью, так как для 100 000 записей потребуется 100 000 обращений к базам данных.

Любой другой способ. Этот уникальный столбец значений является varchar2, а максимальная длина равна 20

+5

Сколько стоит Лах? Не все здесь индийцы. – leppie

+0

Видимо, это 100 000. http://en.wikipedia.org/wiki/Lakh –

ответ

0

Вы не упомянули, что цифры должны быть последовательными (1..n), поэтому, возможно, вы можете генерировать GUID и представлять их в компактный способ. В конечном итоге вы можете столкнуться с конфликтами, и в этом случае вы можете создать новый GUID.

Единственная проблема, которую я вижу, это то, что вам понадобится 25 символов для обозначения GUID в Base64 (23, если вы удалите прописку).

+0

GUID будет хорошим, но если несколько сеансов работают параллельно и доступны та же самая функция, которая генерирует GUID, тогда будет огромное дублирование, и мы не можем сравнить, есть ли вновь созданный уникальный номер в таблице или нет из-за служебных данных производительности –

+0

номер не обязательно должен быть последовательным. Единственное ограничение в 20 символьном слове должно быть уникальным (например, GUID). Но DLL, в которую я поместил функцию генератора GUID, можно получить в нескольких сеансах и в нескольких сеансах, она будет генерировать повторяющиеся идентификаторы GUID. –

+0

GUID являются * глобально уникальными *, на машинах и сеансах (при условии, что вы используете тот же алгоритм), даже если они сгенерированы в один и тот же момент. У нас есть система, которая использует GUID как первичные ключи в хранилище данных. Таблица имеет несколько миллионов строк, вставленных несколькими машинами, работающими параллельно, и мы не сталкивались с столкновениями за последние 2,5 года. –

3

Почему бы просто не создать autonumber sequence с помощью триггеров, если вы делаете только объемную вставку?

+0

, что означает для каждой записи, нам нужно попасть в базу данных, чтобы получить уникальный номер. В соответствии с этим, так много раз нам нужно ударить db, что является приемлемым. Я хочу сделать это в .NET –

+0

@AkkiJ база данных будет генерировать уникальный номер для вас автоматически с очень небольшими накладными расходами, вы не можете указать в своем вопросе, что вам нужно будет использовать этот идентификатор снова сразу, поэтому после того, как массовый импорт будет выполнен , просто сделайте запрос, чтобы выбрать все нужные вам строки. –

-2

вы можете сгенерировать новый GUID последовательности и взять его 20 символов вместо символа «-» и вставить в базу данных. Этот GUID не является удобным для пользователя, поэтому никто не может запомнить это легко ....

+2

GUID уникальны только в том случае, если они приняты в 128-битном виде. –

+0

Gaurav, GUID не подходит, если ваша функция генерации GUID доступна в нескольких сеансах, работающих параллельно, поскольку она будет генерировать повторяющиеся идентификаторы GUID, если отдельные сеансы имеют доступ к той же функции генератора GUID. –