Comments 13
В зависимости от необходимости используем варианты целочисленного или же guid.
Генерируем стандартно, Guid.NewGuid(). Выигрыш слишком не велик, тест жесткая синтетика, попробуйте вставить тоже самое BULK INSERT.
А что у вас за машина вообще? Кроме MS SQL, какие характеристики железа, особенно дисковой подсистемы. Посмотрите на результаты SSD + MS SQL, например;) Я считаю, что это не то место, где в реальности стоит что-то оптимизировать. Возможно, меня поправят те, у кого большие данные, но используют ли они тогда 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% или еще как-то.
Да и возможно ли это? — возможно, я же написал, что ваш тест лучше попробовать вставить 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, к которому уже будут обращаться остальные сервера.
А зачем?
>> Краткий перевод — после перезагрузки сервера метод NEWSEQUENTIALID может начать генерировать GUID с меньшего чем до перезагрузки диапазона.
Чуть менее краткий перевод — после перезагрузки сервера метод NEWSEQUENTIALID может начать генерировать GUID с меньшего чем до перезагрузки диапазона, но по-прежнему глобально уникальный.
Чуть менее краткий перевод — после перезагрузки сервера метод NEWSEQUENTIALID может начать генерировать GUID с меньшего чем до перезагрузки диапазона, но по-прежнему глобально уникальный.
Очень актуальная статья, спасибо. У меня сотрудники используют «полевой» клиент, установленный на рабочих ноутах и реплицируют новые данные с сервером по средствам идентификации по Guid'ам. Было интересно!
Sign up to leave a comment.
CombGuid. Генерация “дружественных” к SQL серверам значений Guid в .net приложениях