Как сохранить вставки столбцов datetime2 уникальными - PullRequest
3 голосов
/ 31 марта 2009

У меня есть таблица, в которой хранятся биржевые тики в SQL Server 2008. Она указана в столбце символов и столбце даты, который является datetime2. В приложении c # вставки отправляются с высокой скоростью в таблицу. В настоящее время строка создается с использованием символа и DateTime.Now, а затем вставляется. В сложившейся ситуации может возникнуть ситуация, когда появятся 2 тика для одного и того же символа, и datetime.now вернется в одно и то же время с точностью до миллисекунды. Мой вопрос заключается в том, как я могу убедиться, что мои вставки не используют одно и то же время для данного символа. Я думаю, что у меня может быть другой уникальный ключ, такой как rowver или что-то вроде autonumber в БД в качестве одного решения, но даже если вставка прошла успешно, я не хочу, чтобы для данного символа было время дублирования. Я также думал о том, чтобы сохранить время последней вставки и просто добавить к нему миллисекунду, если оно равно. Я не уверен, что лучший способ сделать это. Кроме того, дата-время2 выглядит более точной, чем .net-дата-время, поэтому не знаю, стоит ли мне пытаться решить эту проблему на сервере или на клиенте.

Спасибо

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

Ответы [ 4 ]

2 голосов
/ 31 марта 2009

Не используйте дату и время в ключе.

Используйте столбец идентификаторов в качестве первичного ключа и просто поместите индекс (если хотите, в кластер) на отметку + datetime. Я не уверен, что вы хотите с дупс, но таким образом вы сможете записать, что они произошли ...

1 голос
/ 09 августа 2009

Не используйте C # DateTime.Now, хотя DateTime.Now является поточно-ориентированным и может возвращать два одинаковых значения. Вам лучше использовать автоматически сгенерированное свойство вашего столбца Datetime2.

edit: ..., установив автоматически сгенерированное свойство в SYSDATETIME ()

1 голос
/ 31 марта 2009

Я думаю, что ответ на этот вопрос будет зависеть от того, что вы хотите сделать в случае, если символ появляется в одно и то же время?

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

Другим вариантом является наличие столбца метки времени, который бы гарантировал, что даже если вам действительно удастся получить два одинаковых символа в одно и то же время, ваша вставка не завершится неудачно.

Реальный вопрос - что вы хотите сделать с этим вторым идентичным символом? Можете ли вы позволить себе расходы на проверку, чтобы увидеть, существует ли идентичный символ и дата и время в таблице, прежде чем писать в нее? Таким образом, вы можете войти и удалить дубликат?

0 голосов
/ 31 марта 2009

Ваша база данных добавляет потокобезопасность? То есть Возможно ли, чтобы две вставки происходили одновременно и не знали друг о друге? В этом случае сохранение максимального значения и добавление миллисекунды не сработает.

Возможно, вам потребуется обычная процедура, которая проходит и увеличивает время в случае столкновения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...