[英]using SQL server to store data
我现在在项目中使用SQL Server 2008来存储和获取数据。 到现在为止一切都很完美。 我可以在不到50ms(JSON)的时间内获取20000条记录。 但是面临插入东西的问题。 在我的项目中,我需要能够每分钟插入100000条记录。 这对于SQL Server来说似乎很慢。
我试图使用另一个数据库(NOSQL DB),例如mongoDB,与SQLServer(270s)相比,它在存储数据(5s)方面非常快,但在获取数据时却不如sql(20000 => 180ms)。
所以我在这里问是否有任何方法可以使SQL的存储速度更快。 或者使mongoDB更快地获取(我不是mongoDB的专家,我知道它的基本知识)。
public static void ExecuteNonQuery(string sql)
{
SqlConnection con = GetConnection();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
try
{
cmd.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
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的Select函数(MongoDB 1.6)
更新 :数据结构:(int)Id,(string)数据
我猜您正在执行自己的事务中的每个插入操作(如果未显式提供隐式事务,则可能会创建一个隐式事务)。 由于SQL Server需要确保将事务提交到硬盘驱动器,因此每个事务的开销都非常大。
为了使处理速度更快,请尝试在单个ExecuteNonQuery()
调用中执行多次插入(尝试执行约一千次ExecuteNonQuery()
。 也不要打开和关闭,而是要保持连接处于打开状态(因此在同一事务中)以进行多个插入。
MongoDB的读写速度非常快。 在商用硬件上,每秒读写50k是可行的-取决于数据大小。 除此之外,您始终可以选择使用分片集和副本集进行扩展,但要说的是:MongoDB每秒可进行2万次操作是什么 。
通常,将数据插入数据库的速度取决于操作的复杂性。
如果插入的速度非常慢,则表明插入的优化问题。 仔细地确定程序正在生成哪些SQL插入语句,然后使用数据库EXPLAIN函数找出底层数据库正在使用哪些操作。 这通常为您提供有关如何更改设置以提高这些操作速度的线索。
这可能意味着您必须更改数据库,或者可能意味着将插入的内容批量处理到一个调用中,而不是分别插入每个项目。
我看到您每次都在建立和关闭连接。这本身需要花费大量时间。 尝试使用持久连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.