Сохранение 1000 + записывает к базе данных за один раз

Java Service Wrapper может быть то, что вы ищете. Он кроссплатформенный, может использоваться для запуска в качестве службы Windows, захвата ввода-вывода и в целом для полного управления любым Java-приложением. Это очень легкий вес и хорошо продуманный. Atlassian использует его, чтобы обернуть свои продукты (Jira, Bamboo и т. Д.), Так что это проверено в бою.

12
задан victor hugo 11 June 2009 в 16:54
поделиться

5 ответов

установка adonet.batch_size может улучшить ситуацию.

Для этого вы должны

  • установить adonet.batch_size в конфигурации NH

Пример:

    m_sessionFactory = Fluently
         .Configure()
         .Database(MsSqlConfiguration
             .MsSql2005
             .ConnectionString(c => c.FromConnectionStringWithKey("testme"))
             )
         .Mappings(m => m.FluentMappings
             .AddFromAssemblyOf<TestImpl>())
         .ExposeConfiguration(config =>
         {
             config.SetProperty("adonet.batch_size", "1");
             m_configuration = config;
         })
         .BuildSessionFactory();
  • установите размер пакета в сеансе непосредственно перед сохранением

     с помощью (ISession session = m_nhibernateSessionFactory.GetSession ())
    используя (var tx = session.BeginTransaction ())
    { 
     session.SetBatchSize (1000); 
     foreach (сервер var в serverz)
     {
     session.SaveOrUpdate (сервер);
     }
     tx.Commit ();
    }
    
15
ответ дан 2 December 2019 в 06:09
поделиться

DataSet? Нет. Массовая вставка? Да.

Если вы вставляете так много записей и вставки довольно упрощены, вам следует взглянуть на выполнение массовых вставок и извлечение ORM.

1
ответ дан 2 December 2019 в 06:09
поделиться

Я считаю, что это то, что вы ищете:

Операции с массовыми данными с сеансами без сохранения состояния NHibernate

По сути, вместо открытия ISession, вы открываете IStatelessSession и в своем hibernate.cfg.xml вы можете установить:

 <property name="adonet.batch_size">100</property>
5
ответ дан 2 December 2019 в 06:09
поделиться

Я думаю, у вас есть несколько вариантов в зависимости от вашей ситуации.

Если вы можете использовать альфа-версию NHibernate 2.1, вы можете попробовать использовать новый доступный исполняемый HQL.

http: //nhibernate.info/blog/2009/05/05/nh2-1-executable-hql.html

Ответ Тобиаса также будет работать. Простая установка размера пакета значительно повысит производительность.

Если вы хотите испачкать руки с ADO.Net ...

Выполнение массовых вставок в Sql Server возможно с помощью Sql Bulk Copy.

Пример этого находится здесь: http://dotnetslackers.com/articles/ado_net/SqlBulkCopy_in_ADO_NET_2_0.aspx

Мне кажется, что вы создаете новую сущность на основе другой сущности в базе данных. Мне это кажется идеальным сценарием использования хранимой процедуры.

3
ответ дан 2 December 2019 в 06:09
поделиться

Самый быстрый способ вставить записи - это сгенерировать текстовый файл и использовать синтаксис LOAD FILE. Большинство баз данных имеют удивительно быстрые реализации для импорта файлов данных в базы данных. Для MySQL см. Ниже:

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Для других баз данных обратитесь к соответствующему руководству. Это полезно, если вы часто вставляете миллион записей или тысячи записей. В противном случае лучшее, что вы можете сделать, - это создать большой SQL-запрос с тысячами вставок и выполнить его напрямую в подключении к базе данных, пропуская ORM и связанные с ними проверки.

1
ответ дан 2 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: