1

我现在在我的项目中使用 SQL Server 2008 来存储和获取数据。到目前为止,这一切都很完美。我可以在 50 毫秒 (JSON) 内获取 20000 条记录。但面临插入东西的问题。在我的项目中,我需要能够每分钟插入 100000 条记录。这对于 SQL server 来说似乎很慢。
我尝试使用像 mongoDB 这样的另一个数据库(NOSQL DB),与 SQLServer(270s)相比,它在存储数据(5s)方面非常快,但在获取数据(20000 => 180ms)方面不如 sql 快。
所以我在这里问是否有任何方法可以使 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)数据

4

4 回答 4

4

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

ExecuteNonQuery()为了让事情进展得更快,请尝试在一次调用中执行许多插入(尝试一千左右) 。也不要打开和关闭,而是保持连接打开(因此在同一个事务中)进行多次插入。

于 2011-02-19T12:19:28.230 回答
3

你应该看看 SqlBulkCopy 类 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

于 2011-02-19T12:29:04.943 回答
0

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

于 2011-02-19T12:21:05.533 回答
0

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

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

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

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

于 2011-02-19T12:21:51.613 回答