Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SQLServer存储数据_C#_Sql_Performance_Mongodb_Storing Data - Fatal编程技术网

C# 使用SQLServer存储数据

C# 使用SQLServer存储数据,c#,sql,performance,mongodb,storing-data,C#,Sql,Performance,Mongodb,Storing Data,我现在正在我的项目中使用SQLServer2008来存储和获取数据。到现在为止,一切都很顺利。我可以在不到50ms的时间内获取20000条记录。但是面临着插入物的问题。在我的项目中,我需要能够每分钟插入大约100000条记录。对于SQL server来说,这似乎非常缓慢。 我尝试使用另一个数据库NOSQL DB,比如mongoDB,它在存储数据方面比SQLServer270s快,但在获取数据20000=>180ms方面不如sql快。 所以我在这里问,是否有任何方法可以使SQL在存储方面更快。或者

我现在正在我的项目中使用SQLServer2008来存储和获取数据。到现在为止,一切都很顺利。我可以在不到50ms的时间内获取20000条记录。但是面临着插入物的问题。在我的项目中,我需要能够每分钟插入大约100000条记录。对于SQL server来说,这似乎非常缓慢。 我尝试使用另一个数据库NOSQL DB,比如mongoDB,它在存储数据方面比SQLServer270s快,但在获取数据20000=>180ms方面不如sql快。 所以我在这里问,是否有任何方法可以使SQL在存储方面更快。或者为了让mongoDB更快地获取数据,我不是mongoDB方面的专家,我知道关于它的基本知识

SQL的插入函数

public IEnumerable<T> GetRecords<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression, int from, int to) where T : class, new()
{
    return _db.GetCollection<T>(collectionName).Find<T>(expression).Skip(from).Limit(to).Documents;
}
Mongo的选择功能MongoDB 1.6

更新
:数据结构:int-Id,string-data

我猜您是在自己的事务中执行每个insert。如果不显式提供,可能会创建一个隐式事务。由于SQL server需要确保将事务提交到硬盘驱动器,因此每个事务的开销都非常大


为了加快速度,请尝试在一个ExecuteOnQuery调用中执行多个插入,并尝试使用1000个左右。也不要打开和关闭连接,而是保持连接打开,从而在同一事务中进行多次插入。

我猜您是在自己的事务中执行每个插入。如果不显式提供一个插入,则可能会创建一个隐式事务。由于SQL server需要确保将事务提交到硬盘驱动器,因此每个事务的开销都非常大


为了加快速度,请尝试在一个ExecuteOnQuery调用中执行多个插入,并尝试使用1000个左右。也不要打开和关闭连接,但要保持连接打开,这样就可以在同一事务中进行多次插入。

MongoDB的读写速度非常快。根据数据大小,在商品硬件上每秒50k读写是可行的。除此之外,您始终可以选择使用分片和副本集进行扩展,但如上所述:每秒20 k次操作
MongoDB什么都不是。

MongoDB读写速度非常快。根据数据大小,在商品硬件上每秒50k读写是可行的。除此之外,您始终可以选择使用分片和副本集进行扩展,但如上所述:每秒20 k次操作
使用MongoDB什么都不是。

通常,将数据插入数据库的速度取决于操作的复杂性

如果插入速度明显较慢,则表明插入存在优化问题。例如,确定您的程序正在生成哪些SQL insert语句,然后使用database EXPLAIN函数确定底层数据库正在使用哪些操作。这通常会提示您如何更改设置以提高这些操作的速度

这可能意味着您必须更改数据库,也可能意味着您需要将插入内容批处理到单个调用中,而不是单独插入每个项目


我看到您每次都在设置和关闭连接。。这本身就需要相当长的时间。尝试使用持久连接。

通常,将数据插入数据库的速度取决于操作的复杂性

如果插入速度明显较慢,则表明插入存在优化问题。例如,确定您的程序正在生成哪些SQL insert语句,然后使用database EXPLAIN函数确定底层数据库正在使用哪些操作。这通常会提示您如何更改设置以提高这些操作的速度

这可能意味着您必须更改数据库,也可能意味着您需要将插入内容批处理到单个调用中,而不是单独插入每个项目


我看到您每次都在设置和关闭连接。。这本身就需要相当长的时间。尝试使用持久连接。

您应该看看SqlBulkCopy类

您应该看看SqlBulkCopy类

通常需要存储的字符串有多大。表上是否有需要在插入期间更新的索引。与直接插入相比,SQL的大容量插入命令可以非常快地使用吗?通常需要存储的字符串都很大。表上是否有需要在插入期间更新的索引。与直接插入相比,SQL的大容量插入命令可以非常快地使用吗?非常好的建议。但是,大容量复制与标准插入操作的语义不同,因此它可能不适合您的需要。非常好的建议。但是,大容量复制没有与标准插入操作相同的语义,因此它可能不适合您的需要。
public IEnumerable<T> GetRecords<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression, int from, int to) where T : class, new()
{
    return _db.GetCollection<T>(collectionName).Find<T>(expression).Skip(from).Limit(to).Documents;
}