簡體   English   中英

SQL Server 2008批量插入

[英]SQL Server 2008 Batch Insert

我有一個約50,000字的字典; 每個單詞都有很多同義詞,反義詞等。我正在使用Fluent NHibernate,我為應用程序創建了一個10gb MS SQL Server實例,我試圖將其填充為批量更新:

public class Word
{
     public virtual int Id { get; set; }
     public virtual string Text { get; set; }
     public virtual IList<Word> Synonyms { get; set; }
     public virtual IList<Word> Antonyms { get; set; }
}

public class WordMapping : ClassMap<Word>
{
    public WordMapping()
    {
        Id(x => x.Id).UnsavedValue(0);
        Map(x => x.Text);

        HasMany(x => x.Synonyms).Cascade.AllDeleteOrphan();
        HasMany(x => x.Antonyms).Cascade.AllDeleteOrphan();
    }
}
...

List<Word> words = loadWordsFromFile();

using (IStatelessSession session = session.SessionFactory.OpenStatelessSession())
    using (var transaction = session.BeginTransaction())
        {
            foreach (var word in words)
                   session.Insert(word);
            transaction.Commit();
        }

我已將批量大小設置為1000:

 private static ISessionFactory CreateSessionFactory()
 {
    return Fluently.Configure()
                .Database(MsSqlConfiguration
                         .MsSql2008
                         .ConnectionString(connStr)
                         .AdoNetBatchSize(1000))
                .Mappings(M => M.FluentMappings.AddFromAssemblyOf<WordMapping>())
                .ExposeConfiguration(Cfg => _configuration = Cfg)
                .BuildSessionFactory();
 }

它已經運行了幾個小時,看不到盡頭。 這是填充數據庫的最佳方式,還是在處理大型數據集時有更方便的方法?

這可能有點在你正在使用的NHibernate數據訪問層之外,但是當我們將大量數據加載到我的團隊的數據庫中時(我們有幾個20+ TB數據庫),我們使用SqlBulkCopy 它並不是最令人興奮的技術(使用DataTables等),但它的工作非常好而且速度很快。

像lFoust一樣,我也將SQLBulkCopy實用程序用於相當大的ELT到一些數據庫中。

下面是我寫的SqlBulkCopy的代碼示例:

SqlConnection sqlCon = new SqlConnection("ConnectionStringHere");
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlCon);
DataTable dt = new DataTable();

dt.Rows.Add(// add data to the datatable)

using (sqlBulkCopy)
{

.DestinationTableName = "Putnameoftablehere";
.NotifyAfter = dt.Rows.Count/100; //Notify every 1%
.WriteToServer(dt);
.Close();


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM