【问题标题】:using SQL server to store data使用 SQL Server 存储数据
【发布时间】:2011-02-19 12:12:00
【问题描述】:

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

【问题讨论】:

  • 您通常需要存储的字符串有多大。表上是否有索引(在插入期间需要更新)。你能使用 SQL 的 Bulk INSERT 命令吗(与直接插入相比非常快)

标签: c# sql performance mongodb storing-data


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

    • 非常好的建议。但是,批量复制与“标准”插入操作的语义不同,因此它可能不适合您的需要。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        • 2015-10-26
        • 2013-08-20
        • 1970-01-01
        相关资源
        最近更新 更多