使用SQL服务器存储数据

时间:2011-02-19 12:12:00

标签: c# sql performance mongodb storing-data

我现在正在我的项目中使用SQL Server 2008来存储和获取数据。到现在为止,这是完美的。我可以在不到50毫秒(JSON)中获取20000条记录。但面临插入问题的问题。在我的项目中,我需要能够每分钟插入100000条记录。这对SQL服务器来说似乎很慢。
我尝试使用另一个数据库(NOSQL数据库),如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)

更新 :data structure:(int)Id,(string)Data

4 个答案:

答案 0 :(得分:4)

我猜你正在自己的事务中执行每个插入(如果你没有显式提供隐式事务,则可能已经创建了一个隐式事务)。由于SQL服务器需要确保事务提交到硬盘驱动器,因此每个事务都有非常重要的开销。

为了让事情变得更快,尝试在单个ExecuteNonQuery()调用中执行许多插入(尝试使用大约一千个)。也不要打开和关闭,但要保持连接打开(因此在同一个事务中)进行多次插入。

答案 1 :(得分:3)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

如果插入速度非常慢,则表明插入的优化问题。直接识别程序生成的SQL插入语句,然后使用数据库EXPLAIN函数来确定底层数据库正在使用的操作。这通常会为您提供有关如何更改设置以提高这些操作速度的线索。

这可能意味着您必须更改数据库,或者可能意味着将插入内容批量处理为单个调用而不是单独插入每个项目。

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