Лучше использовать уникальный идентификатор (GUID) или bigint для столбца идентификации?

This worked for me, changing the locale did not.

  Scanner sc = new Scanner(System.in);
  // val = sc.nextDouble(); - crashes with java.util.NoSuchElementException
  // If Java crashes with legal Java code, wrap the call in a hasNextLine() test
  if (sc.hasNextLine())
  {
    val = sc.nextDouble();
  }

java.util.NoSuchElementException: строки не найдено

30
задан Aaron Fischer 2 February 2009 в 21:08
поделиться

9 ответов

Это зависит от того, что Вы делаете:

  • , Если скорость является первоочередной задачей затем, простое int является, вероятно, достаточно большим.
  • , Если у Вас действительно будет больше чем 2 миллиарда (с B ;)) записями, затем используют bigint или последовательный гуид.
  • , Если необходимо смочь легко синхронизироваться с записями, созданными удаленно, затем Guid, является действительно большим.

Обновление
Некоторые дополнительные (менее - очевидный) отмечают на Гуидах:

  • Они могут быть строги с индексами, и это сокращает к ядру производительности базы данных
  • , можно использовать последовательные гуиды, чтобы возвратить часть выполнения индексации, но бросить часть случайности, используемой в точке два.
  • Гуиды может быть трудно отладить рукой (where id='xxx-xxx-xxxxx'), но Вы возвращаете часть этого через последовательные гуиды также (where id='xxx-xxx' + '123').
  • По той же причине, Гуиды могут сделать основанные на идентификаторе нападения безопасности более трудными - но не невозможные. (Вы не можете просто тип 'http://example.com?userid=xxxx' и ожидать получать результат для чужой учетной записи).
49
ответ дан Metro Smurf 3 February 2009 в 07:08
поделиться
  • 1
    Также u r говорящий это < входной тип =" button" значение =" Back" onlick =" window.location =' {{ запрос. META.HTTP_REFERER }} ' "/> работал бы.. – Rajeev 10 December 2010 в 19:45

Это действительно зависит, ожидаете ли Вы иметь репликацию в изображении. Репликация требует строки UUID, поэтому если Вы - планирование выполнения этого, можно также сделать это впереди.

0
ответ дан Jeffrey Hantin 3 February 2009 в 07:08
поделиться

Вы делаете репликацию, или у Вас есть торговый персонал, который выполняет разъединенный databses, который должен объединиться, использовать GUID. Иначе я пошел бы для интервала или bigint. Они намного легче иметь дело с в конечном счете.

4
ответ дан HLGEM 3 February 2009 в 07:08
поделиться
  • 1
    иронически это ссылка dognetslackers приводит к необработанной ошибочной странице. Это должно быть сообщением-розыгрышем? – niico 14 February 2017 в 01:32

Зависит не, в чем Вы нуждаетесь. Производительность DB получила бы от целого числа, в то время как GUID полезны для репликация и не требующий для получения ответ от DB, какие идентификационные данные были созданы, т.е. код мог создать идентификационные данные GUID прежде, чем вставить в строку.

1
ответ дан dove 3 February 2009 в 07:08
поделиться

В целом я рекомендовал бы BIGINT по GUID (поскольку гуиды являются большими и медленными), но вопрос, Вам даже нужно это? (Т.е. Вы делаете репликацию?), Если Вы ожидаете меньше чем 2 миллиарда строк, традиционное INT будет прекрасно.

8
ответ дан Andrew Rollings 3 February 2009 в 07:08
поделиться
  • 1
    действительно ли возможно достигнуть того использования некоторого атрибута/фильтра? Поскольку поместить тот код в каждой выгоде, которой это очень, я думаю, было бы хорошо иметь такой вид фильтра, который сделает это. – Kuncevič 20 September 2011 в 11:39

Если Вы - планирование использования репликации слияния затем ROWGUIDCOL, выгодно для производительности (, посмотрите здесь для получения информации ). Иначе нам нужно больше информации о том, каково Ваше определение 'лучше'; лучше, для какой?

1
ответ дан Greg Beech 3 February 2009 в 07:08
поделиться
  • 1
    Насколько я понимаю, что фильтр не будет в состоянии поймать исключение, уже обработанное в блоке выгоды попытки. Проверьте этот ответ здесь ссылка . – frezq 14 January 2015 в 19:27

Если у Вас нет реальной потребности в GUID, таком как способность генерировать ключи где угодно и не только на сервере, затем я придерживался бы использования ОСНОВАННЫХ НА ЦЕЛОМ ЧИСЛЕ ключей. GUID являются дорогими, чтобы создать и мешать на самом деле смотреть на данные. Плюс, Вы когда-либо пытались ввести GUID в SQL-запросе? Это болезненно!

0
ответ дан Paul Lefebvre 3 February 2009 в 07:08
поделиться
  • 1
    Конечно, it' s быстрее, но it' s также намного более ограниченный. – Gabriel 6 July 2018 в 05:08

Это действительно зависит от того, последовательна ли входящая информация так или иначе. Я настоятельно рекомендую для вещей, таких как пользователи, что GUID мог бы быть лучше. Но для последовательных данных, таких как заказы или другие вещи, которые должны быть легко поддающимися сортировке, что bigint может быть лучшим решением, поскольку это будет индексировано и обеспечит быстро сортировку без стоимости другого индекса.

0
ответ дан Chris J 3 February 2009 в 07:08
поделиться
  • 1
    Один (очень незначительный) недостаток этого был бы то, что Вам можно было считать группы пунктуации как слова. Например, в 'I am having a very nice day -- or at least I was.', you' d становятся -- считаемыми как слово. isalnum мог бы помочь, я предполагаю, в зависимости от OP' s определение " word". – DSM 17 October 2013 в 04:38

Я с Andrew Rollings.

Теперь Вы могли обсудить эффективность пространства. Интервал что, 8 байтов макс.? Гуид идет в намного дольше.

, Но у меня есть две главных причины для предпочтения: удобочитаемость и время доступа. Числа легче для меня, чем GUID (так как я могу всегда находить следующую/предыдущую запись легко).

Что касается времени доступа, обратите внимание, что некоторый DBS может начать иметь БОЛЬШИЕ проблемы с GUID. Я знаю дело обстоит так с MySQL ( MySQL InnoDB Primary Key Choice: GUID/UUID по сравнению с Целочисленной Производительностью Вставки ). Это не может быть большой частью проблемы с SQL Server, но это - что-то, чтобы не упустить.

я сказал бы что палка с INT или BIGINT. Единственное время я думал бы, что Вы захотите GUID, - когда Вы собираетесь выделить их и не хотите, чтобы люди смогли предположить идентификаторы других записей из соображений безопасности.

0
ответ дан MBCook 3 February 2009 в 07:08
поделиться
  • 1
    Нет, пунктуация количеств: 'apple & orange'.split() дает ['apple', '&', 'orange'] – chefarov 19 August 2018 в 22:30
Другие вопросы по тегам:

Похожие вопросы: