У меня есть словарь около 50 000 слов; у каждого слова есть много синонимов, антонимов и т. д. Я использую Fluent NHibernate и создал для приложения экземпляр MS SQL Server 10 ГБ, и я пытаюсь заполнить его как пакетное обновление:
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();
}
Он работал часами без конца. Это лучший способ заполнить мою базу данных или есть более целесообразный подход при работе с большими наборами данных?