我有一个数据库表如下:
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服务交互。
谢谢
发布于 2016-07-21 16:39:36
每个runner_id是否大容量地向表中插入多行?同样的价格和尺寸可能在不到100纳秒的时间内被处理。这将导致它们不是独一无二的。
Server使用GetSystemTimeAsFileTime() Windows获取日期和时间值。准确性取决于运行Server实例的Windows的计算机硬件和版本。该API的精度固定在100纳秒。精度可以通过使用GetSystemTimeAdjustment() Windows来确定。
https://stackoverflow.com/questions/38509081
复制相似问题