2010-04-07 2 views
5

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

Спасибо!

ответ

2

Использование 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

+0

Благодарим вас за ответ. Тем не менее, то, что мне нужно, - это не то, является ли raw хорошим типом данных для команд в Oracle, а скорее, если этот алгоритм вызовет ненужную фрагментацию индекса в Oracle, хотя это кажется хорошим выбором для MS SQL Server. Кроме того, мне нужно сгенерировать мои клики на клиенте, поэтому функция SYS_GUID мало поможет. – Eyvind

+0

Что такое ненужная фрагментация индекса? Разумеется, GUID будут распространены (фрагментированы) через всю комнату возможных данных. Для чего нужен GUID. Дробление данных является неотъемлемым свойством алгоритма GUID, с которым должна обрабатываться база данных, независимо от того, является ли это sql-server или oracle. Реализация индекса может справиться с этим, см. -> http://en.wikipedia.org/wiki/B-tree –

+0

Идея состоит в том, чтобы использовать алгоритм, который генерирует * последовательные * указатели вместо стандартной рандомизированной версии. – Eyvind

1

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

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

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