Я определенно защитил бы и клиент и проверку серверной стороны (или проверяющий на различных слоях). Это особенно важно при передаче через физические уровни или процессы, поскольку стоимость выдает исключения, становится все больше дорогим. Кроме того, чем далее вниз цепочка Вы ожидаете проверки, тем больше времени потрачено впустую.
для использования Исключений или не для подтверждения правильности данных. Я думаю, что нормально использовать исключение в процессе (хотя все еще предпочтительный), но за пределами процесса, назовите метод для проверки бизнес-объекта (например, прежде, чем сохранить) и иметь метод возвращают успех операции наряду с любой проверкой ошибки . Ошибки не являются' исключительными.
Microsoft выдает исключения от бизнес-объектов, когда проверка перестала работать. По крайней мере, это - то, как Блок приложений Проверки Библиотеки Предприятия работает.
using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
public class Customer
{
[StringLengthValidator(0, 20)]
public string CustomerName;
public Customer(string customerName)
{
this.CustomerName = customerName;
}
}
Целые числа присоединяются намного быстрее, например . Это особенно важно при работе с миллионами строк.
Во-вторых, идентификаторы GUID занимают больше места, чем целые числа. Еще раз,
GUID великолепны с точки зрения программиста - они гарантированно (почти) уникальны, так почему бы не использовать их везде, верно?
Если вы посмотрите на это с точки зрения администратора баз данных и с точки зрения базы данных, по крайней мере для SQL Server, есть несколько вещей, которые следует учитывать:
Кимберли Трипп, всемирно известный эксперт по индексации и производительности SQL Server, написала в блоге множество сообщений о том, почему GUID в качестве ключа кластеризации - действительно плохая идея - посмотрите ее блог об индексах .
В частности, ее лучшие практики для ключа кластеризации:
GUID, как правило, статичны и уникальны, но они не узкие ( 16 байт против 4 байтов для INT) и никогда не увеличивается. Из-за своей природы они уникальны и (псевдо) случайны.
Узкая часть важна, потому что ключ кластеризации будет добавлен на каждую страницу индекса для каждого без кластеризованного индекса в вашей таблице - и если у вас есть несколько из них и несколько миллионов строк в вашей таблице, это будет огромной тратой места - и не только на вашем диске, но также и в оперативной памяти вашего SQL Server.
Постоянно увеличивающаяся часть не важна, потому что случайность идентификаторов GUID вызывает сильную фрагментацию ваших индексов, что отрицательно сказывается на вашей производительности. Даже newsequentialid ()
в SQL Server 2005 и более поздних версиях на самом деле не создает последовательных GUID повсюду - они некоторое время последовательны, а затем снова происходит скачок, вызывающий фрагментацию (менее чем полностью случайные GUID, но все же).
Итак, в целом, если вас действительно беспокоит производительность вашего SQL Server, использование GUID в качестве ключа кластеризации - действительно плохая идея - вместо этого используйте INT IDENTITY (), возможно используя GUID в качестве первичного (некластеризованного) ключа, если это действительно необходимо.
Marc
потому что случайность идентификаторов GUID вызывает сильную фрагментацию ваших индексов, что отрицательно сказывается на вашей производительности. Даже newsequentialid ()
в SQL Server 2005 и более поздних версиях на самом деле не создает последовательные GUID повсюду - они какое-то время последовательны, а затем снова происходит скачок, вызывающий фрагментацию (менее чем полностью случайные GUID, но все же).
Итак, в целом, если вас действительно беспокоит производительность вашего SQL Server, использование GUID в качестве ключа кластеризации - действительно плохая идея - вместо этого используйте INT IDENTITY (), возможно используя GUID в качестве первичного (некластеризованного) ключа, если это действительно необходимо.
Marc
потому что случайность идентификаторов GUID вызывает сильную фрагментацию ваших индексов, что отрицательно сказывается на вашей производительности. Даже newsequentialid ()
в SQL Server 2005 и более поздних версиях на самом деле не создает последовательные GUID повсюду - они какое-то время последовательны, а затем снова происходит скачок, вызывающий фрагментацию (менее чем полностью случайные GUID, но все же).
Итак, в целом, если вас действительно беспокоит производительность вашего SQL Server, использование GUID в качестве ключа кластеризации - действительно плохая идея - вместо этого используйте INT IDENTITY (), возможно используя GUID в качестве первичного (некластеризованного) ключа, если это действительно необходимо.
Marc
GUID в четыре раза больше, чем int, и в два раза больше, чем bigint.
GUID действительно трудно найти, если вы пытаетесь устранить проблемы с таблицами.
GUIDS может упростить создание ключей заранее или создание ключей в автономном режиме , или в кластере, без риска столкновения. Также может быть небольшое преимущество в безопасности, так как все ключи невозможно определить.
Недостатком является то, что их труднее читать / печатать, и на многих из ваших таблиц позже вы можете осознать необходимость вернуться и сгенерировать удобные для человека ключи. Они также равномерно распределят ваши записи в таблице,
Кимберли Л. Трипп: GUID в качестве ПЕРВИЧНЫХ КЛЮЧЕЙ и / или ключа кластеризации
Читали ли вы ссылки по теме справа?
GUID большие и медленные по сравнению с целыми числами - поэтому используйте их, когда они нужны, избегайте их, когда они НЕ нужны, это так просто!
Наибольшее снижение производительности, которое вы увидите при использовании идентификаторов GUID в качестве первичного / кластерного ключа, - это вставка записей в большие таблицы. Повторная индексация может оказаться сложной задачей, так как ваш ключ окажется где-то посередине
Использование идентификаторов GUID в качестве первичного ключа в конечном итоге приведет к сбою вашей базы данных из-за того, что диск становится слишком фрагментированным. Это состояние, известное как обмолота.