当前位置:  开发笔记 > 编程语言 > 正文

事务级别,nolock/readpast和并发

如何解决《事务级别,nolock/readpast和并发》经验,为你挑选了0个好方法。

我们有一个系统同时插入来自多个站的大量数据,同时还暴露了数据查询接口.架构看起来像这样(抱歉格式不佳):

[SyncTable]
  SyncID
  StationID
  MeasuringTime


[DataTypeTable]
  TypeID
  TypeName


[DataTable]
  SyncID
  TypeID
  DataColumns...

数据插入是在"同步"中完成的,并且像这样(我们只将数据插入系统,我们从不更新)

INSERT INTO SyncTable(StationID, MeasuringTime) VALUES (X,Y); SELECT @@IDENTITY

INSERT INTO DataTable(SyncID, TypeID, DataColumns) VALUES 
  (SyncIDJustInserted, InMemoryCachedTypeID, Data)
  ... lots (500) similar inserts into DataTable ...

查询就像这样(对于给定的站点,测量时间和数据类型)

SELECT SyncID FROM SyncTable WHERE StationID = @StationID 
                               AND MeasuringTime = @MeasuringTime 
SELECT DataColumns FROM DataTable WHERE SyncID = @SyncIDJustSelected
                                  AND DataTypeID = @TypeID

我的问题是如何将插入的事务级别和查询的NOLOCK/READPAST提示结合起来,以便:

    我们在系统中最大化并发性,同时支持插入(我们需要存储大量数据,一秒钟内高达2000+记录)

    查询仅从"提交"同步返回数据(我们不希望结果集具有半插入同步或由于跳过锁而与某些跳过的条目同步)

    我们不关心查询中是否包含"最新"数据,我们更关心"实时"和最新数据的一致性和响应性

这可能是非常矛盾的目标,可能需要高事务隔离级别,但我对所有技巧和优化感兴趣,以实现对插入和选择的高响应性.我很乐意详细说明是否需要更多细节来清除更多调整和技巧.

更新:只需为将来的回复添加更多信息.我们最初在具有5+ TB存储空间的SAN网络上运行SQL Server 2005(可能在六个月内发布).我不确定SAn设置的是什么类型的RAID,以及我们可用的确切磁盘数量.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有