Pull to refresh

Comments 13

В зависимости от необходимости используем варианты целочисленного или же guid.
Генерируем стандартно, Guid.NewGuid(). Выигрыш слишком не велик, тест жесткая синтетика, попробуйте вставить тоже самое BULK INSERT.
А что у вас за машина вообще? Кроме MS SQL, какие характеристики железа, особенно дисковой подсистемы. Посмотрите на результаты SSD + MS SQL, например;) Я считаю, что это не то место, где в реальности стоит что-то оптимизировать. Возможно, меня поправят те, у кого большие данные, но используют ли они тогда Guid?!
тест жесткая синтетика
Синтетичность теста меня самого немного напрягает, но я не смог придумать ничего лучше. Да и возможно ли это?
Возможно, меня поправят те, у кого большие данные, но используют ли они тогда Guid?!

Для примера, как генерируют Id в инстаграмме. Они кроме времени кодируют внутри идентификатора еще и шарду, к которой должна относиться запись.
instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram

Я считаю, что это не то место, где в реальности стоит что-то оптимизировать.

10% на вставку, лучшая дефрагментация таблиц в БД (соответственно теоретически должен чуть быстрее работать и select) просто заменой Guid.NewGuid() на CombGuid.Generate() не так уж и плохо.
А накладные ресурсы? Ведь генерация становится зависимой от времени. А время имеет свойство меняться, то батарейка умрет на плате, то пользователь время переведет, то еще какие-то проблемы. Это приведет в конечном итоге в выделении какой-то службы, которая за это будет отвечать, да и она не всегда избавлена от такого риска.
Да и возможно ли это? — возможно, я же написал, что ваш тест лучше попробовать вставить BULK и посмотреть, скажется ли в этом случае на 10% или еще как-то.
Спасибо за статью. В вопросе «Что вы используете в качестве первичных ключей в ваших БД?», наверное, имелось ввиду «Что вы используете в качестве первичных ключей в ваших БД при необходимости использования суррогатного ключа?»
Да, именно это и интересно. Но и чужой опыт по использованию естественных ключей, особенно в условиях масштабируемых шардингом приложений тоже интересен.
Creates a GUID that is greater than any GUID previously generated by this function on a specified computer since Windows was started. After restarting Windows, the GUID can start again from a lower range, but is still globally unique.
Взято отсюда

Краткий перевод — после перезагрузки сервера метод NEWSEQUENTIALID может начать генерировать GUID с меньшего чем до перезагрузки диапазона.

Еще надо отметить, что метод NEWSEQUENTIALID машинно-зависимый, поэтому, в случае распределенных приложений использующих более чем один сервер, придется выделить специальный сервер-арбитр для создания uuid, к которому уже будут обращаться остальные сервера.
Краткий перевод — после перезагрузки сервера метод NEWSEQUENTIALID может начать генерировать GUID с меньшего чем до перезагрузки диапазона.

И что? Все равно распределение становится существенно более линейным, так что индексы перестраиваются намного реже.

Еще надо отметить, что метод NEWSEQUENTIALID машинно-зависимый, поэтому, в случае распределенных приложений использующих более чем один сервер, придется выделить специальный сервер-арбитр для создания uuid, к которому уже будут обращаться остальные сервера.

А зачем?
А зачем?

Представьте ферму из четырёх iis работающих с несколькими шардами. На каком сервере должен генерироваться uuid методом newsequentialid?
На том, на котором он создается первым.
Думаю вот этот ответ замечательно описывает ситуацию с генерацией CombGuid с помощью функции UuidCreateSequential, рекомендую ознакомится.
>> Краткий перевод — после перезагрузки сервера метод NEWSEQUENTIALID может начать генерировать GUID с меньшего чем до перезагрузки диапазона.
Чуть менее краткий перевод — после перезагрузки сервера метод NEWSEQUENTIALID может начать генерировать GUID с меньшего чем до перезагрузки диапазона, но по-прежнему глобально уникальный.
Очень актуальная статья, спасибо. У меня сотрудники используют «полевой» клиент, установленный на рабочих ноутах и реплицируют новые данные с сервером по средствам идентификации по Guid'ам. Было интересно!
Sign up to leave a comment.

Articles