在这种情况下,如何以及在何处有效地存储和检索数据?

时间:2012-10-04 09:40:55

标签: c# sql-server read-write

嗨专家:)我正在使用wpf和sql server

问题1:创建了大量数据,必须每秒保存到db,但同时程序的多个部分写入相同的表。每秒保存到数据库的效率都不高,因为数据库方法很昂贵,请问专家不同意或我应该怎么做?不确定什么是最好的事情,什么时候xml或文本文件会更有用?

问题2:我必须从问题1保存到的表中检索数据库中的数据,以便我可以在实时图表上显示。这会导致读/写问题吗?

4 个答案:

答案 0 :(得分:1)

  1. 使用逐个inserts加载大量数据并不是一个好主意。尝试查看SqlBulkCopy

  2. 数据库处理并发性非常好,您可以将写入隔离在正确的事务中,以便在完成完整写入时只查看数据。

答案 1 :(得分:0)

1您可以使用Caching来保存数据,可以使用Cache类保存

链接:http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add.aspx

2您对第二种情况没有问题,您可以使用Transaction以确保您获得提交的数据。

链接:http://msdn.microsoft.com/en-us/library/system.transactions.transaction.aspx

答案 2 :(得分:0)

考虑到您有时间限制,您必须在1秒内以某种方式处理数据。

我建议:

问题1 :将您在中生成的数据保存到Stack<..>。在另一个Stack<..>保存到数据库的线程进程之后,直到Stack<..>不为空。由于没有任何保证,您可以在1秒内保存数据,然后将其保存在内存中。

问题2 :已将其存储在内存中,您可以实现最大可能的性能,保持在可接受的已分配内存限制内。

很难在这里建议一些真正实用的东西,因为性能总是严格地针对特定领域,这在简短的问题中无法完整描述。但解决方案,可以像基本准则一样。

答案 3 :(得分:0)

另一种选择是分解表格。

您的其他功能是否只写入记录字段的子集。

因此,在两个表之间有一个1到1的映射,一个用于初始数据,另一个用于functionA。取决于您对后端需求进行分区的能力,但它可以显着减少冲突。

基本思想是更像对象来看待你的表格。所以你有一个基表,如果它是一个类型1的东西你添加到相关表的1对1链接。类型1周围的业务函数只需要写入该表,而不是实体表。

无论如何都有可能。