首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主键约束与时间序列数据和DATETIME2重复密钥异常

主键约束与时间序列数据和DATETIME2重复密钥异常
EN

Stack Overflow用户
提问于 2016-07-21 16:03:11
回答 1查看 261关注 0票数 1

我有一个数据库表如下:

代码语言:javascript
复制
CREATE TABLE some_table
(   
    price                       FLOAT                   NOT NULL,
    size                        FLOAT                   NOT NULL,   
    retrieved                   DATETIME2               DEFAULT SYSUTCDATETIME(),
    runner_id                   INT                     NOT NULL,
    FOREIGN KEY (runner_id)     REFERENCES runner(id),
    PRIMARY KEY (retrieved, price, size, runner_id)
);

CREATE INDEX some_table_index ON some_table (runner_id);

此表由从web服务检索的价格/大小数据集填充,web服务本质上是时间序列。据我所知(并且我在代码中加入了一些比较逻辑以确保),价格和大小从未在从web服务中检索到的一组条目中重复。但是,它们可能会在随后对与同一转轮相关的价格/大小数据的请求中重复。

我得到了间歇性的主键约束,重复了关键异常,即使我是通过一个高分辨率日期、时间值以及表列的其余部分来形成我的键。在这个阶段,我正在考虑放弃复合键,以支持自动生成的主键。有人能根据表模式来建议为什么会发生这种情况吗?考虑到代码的性质和日期时间值的分辨率,我认为不太可能同时插入两组具有重复值的价格/大小数据。不过,我想这是可能的--我正在使用异步方法与数据库和web服务交互。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 16:39:36

每个runner_id是否大容量地向表中插入多行?同样的价格和尺寸可能在不到100纳秒的时间内被处理。这将导致它们不是独一无二的。

Server使用GetSystemTimeAsFileTime() Windows获取日期和时间值。准确性取决于运行Server实例的Windows的计算机硬件和版本。该API的精度固定在100纳秒。精度可以通过使用GetSystemTimeAdjustment() Windows来确定。

https://msdn.microsoft.com/en-us/library/bb630387.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38509081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档