Последовательные (гребенчатые) GUID для Oracle - PullRequest
6 голосов
/ 07 апреля 2010

Мы находимся в процессе переключения с генератора случайных чисел в C # Guid.NewGuid () на последовательный алгоритм guid, предложенный в этого поста . Хотя это, кажется, хорошо работает для MS SQL Server, я не уверен в последствиях для баз данных Oracle, в которых мы храним руководства в необработанном (16) поле. Есть ли у кого-нибудь понимание того, будет ли этот алгоритм хорош для создания последовательных руководств для Oracle, а также для MS SQL Server, или же следует использовать другой вариант.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Использование raw (16) представляется разумным типом данных для GUID. Максимальный размер необработанного типа данных составляет 2000 байтов и поддерживается в Oracle 9i, 10g и 11.

Существует также функция sql для генерации идентификаторов GUID, она называется SYS_GUID. см. документацию здесь-> http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/functions153.htm

Вас может заинтересовать эта статья -> http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

1 голос
/ 08 апреля 2010

Когда индексный блок «слишком полон» для еще одной записи, он разделяется.

Oracle имеет два пути, один из которых оптимизирован для «последовательных» значений стиля, а другой - для «случайных» значений типа. Если новая запись идет в крайнем правом конце индекса, вы получите 90-10 сплит. Если это где-то посередине, вы получите 50-50. Если вы хотите, чтобы «новые» значения были сгруппированы вместе в индексе, тогда полезно использовать последовательное значение. Если вы хотите, чтобы они были разбросаны (например, чтобы избежать конфликтов на «горячих» блоках), тогда полезны случайные значения.

Является ли метод «хорошим» для Oracle, зависит от того, какую проблему вы пытаетесь решить.

...