Con*_*ngo 17 sql-server-2008 sql-server c# visual-studio-2010
想象一下“突发”的数据流,即它可能有 10,000 个事件非常快地到达,然后一分钟内什么也没有。

您的专家建议:我如何为 SQL Server 编写 C# 插入代码,以保证 SQL 立即将所有内容缓存在其自己的 RAM 中,而不会阻塞我的应用程序超过将数据输入到所述 RAM 所需的时间?为了实现这一点,您是否知道设置 SQL 服务器本身的任何模式,或者设置我正在写入的单个 SQL 表的模式?
当然,我可以做我自己的版本,这涉及在 RAM 中构建我自己的队列 - 但我不想重新发明旧石器时代的石斧,可以这么说。
gbn*_*gbn 11
你有没有试过只写,看看会发生什么?你有一个已知的瓶颈吗?
如果您需要防止您的应用程序被阻止,那么您的一种方法是将写入排队以推迟数据库调用。但是,我希望队列会在一两秒内清除:所以如果可以的话,你需要一个队列吗?
或者,您可以先将假脱机放到临时台上,然后再冲洗?我们使用这种技术来处理每分钟数百万新行的持续写入(我们实际上使用带有简单恢复的临时数据库):但是我们直到我们有只写行的经验才实现它。
注意:SQL Server 中的每次写入都将作为预写日志 (WAL) 协议的一部分执行磁盘操作。这适用于该写入的 t-log 条目。
带有该行的数据页将在某个时间点(基于时间、使用、内存压力等)进入磁盘,但通常您的数据无论如何都会在内存中。这称为“检查点”,不会从内存中驱逐数据,只会刷新更改(2011 年 11 月 24 日编辑)
编辑:
出于整体考虑,根据上面的最后一段,将此数据库的 LDF 转移到一组专用磁盘以获得更高的性能。同上一个临时数据库(MDF/LDF 各一个)。为您的数据库服务器提供一打或 3 个不同的卷(通常通过 SAN)是很常见的
除非我遗漏了什么,否则这将违反 ACID ( http://en.wikipedia.org/wiki/ACID )的耐久性要求。也就是说,如果您的应用程序将数据“写入”到 RAM,然后服务器崩溃,您的数据就会丢失。
因此,您要寻找的是作为最终存储到数据库中的队列的非数据库系统,或者对于您正在执行的操作足够快的数据库系统。我建议先尝试后者,看看它是否足够;不借麻烦。
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |