2015-09-18 9 views
2

Есть ли преимущество использования UUIDField с Django и Postgresql (собственный тип данных) над самодельным сгенерированным уникальным ключом?django UUIDField с Postgresql

В настоящее время я использую случайное генерируемое буквенно-цифровое поле ID на моих моделях, и мне интересно, подходят ли для этого свойства Postgres и UUIDField для этой цели и есть ли причина для переключения.

Я генерирую идентификатор, используя случайные буквы и цифры. Это 25 символов. Я поставил db_index на него для более быстрого поиска. Я не обманываю свою БД. Причина в том, что некоторые модели не могут иметь последовательные идентификаторы для деловых целей.

+0

Ответ в том, что это зависит. Зависит от того, почему вы используете случайные сгенерированные идентификаторы и их хранилище, какие запросы вы выполняете, зашиты ли вы и т. Д. И т. Д. – e4c5

+0

Я генерирую идентификатор, используя случайные буквы и цифры. Его 25 символов длиннее. Я поставил db_index для более быстрого поиска. Я не обманываю свою БД. – elynch

+0

Позвольте мне спросить, почему вы не используете SERIAL. Когда оштрафование не задействовано, это соответствует почти каждой ситуации. – e4c5

ответ

1

Переключение на UUID будет иметь преимущество, особенно если у вас есть большое количество записей. Взгляды и вставки должны быть немного быстрее. Вы сохраните 9 байт памяти на строку, поскольку поля UUID составляют всего 128 бит.

Однако это не означает, что первичный ключ вашего дома был плохой идеей. Отнюдь не. Это хороший вариант, и аналогичный подход используется Instagram, который также использует Postgresq и DJango. Их решение хотя и использует только 64 бита, а также удается сжать информацию о времени создания объекта в первичный ключ.

Их основная цель - оштукатурить, но работает очень хорошо даже для нераспределенных dbs. Просто используйте случайное число для 13 бит, которые представляют их информацию о закрытии. У них есть образец sql по ссылке выше.

Смежные вопросы