繁体   English   中英

使用SQL Server存储数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM