Java Service Wrapper может быть то, что вы ищете. Он кроссплатформенный, может использоваться для запуска в качестве службы Windows, захвата ввода-вывода и в целом для полного управления любым Java-приложением. Это очень легкий вес и хорошо продуманный. Atlassian использует его, чтобы обернуть свои продукты (Jira, Bamboo и т. Д.), Так что это проверено в бою.
установка adonet.batch_size может улучшить ситуацию.
Для этого вы должны
Пример:
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 ();
}
DataSet? Нет. Массовая вставка? Да.
Если вы вставляете так много записей и вставки довольно упрощены, вам следует взглянуть на выполнение массовых вставок и извлечение ORM.
Я считаю, что это то, что вы ищете:
Операции с массовыми данными с сеансами без сохранения состояния NHibernate
По сути, вместо открытия ISession, вы открываете IStatelessSession и в своем hibernate.cfg.xml вы можете установить:
<property name="adonet.batch_size">100</property>
Я думаю, у вас есть несколько вариантов в зависимости от вашей ситуации.
Если вы можете использовать альфа-версию 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
Мне кажется, что вы создаете новую сущность на основе другой сущности в базе данных. Мне это кажется идеальным сценарием использования хранимой процедуры.
Самый быстрый способ вставить записи - это сгенерировать текстовый файл и использовать синтаксис LOAD FILE. Большинство баз данных имеют удивительно быстрые реализации для импорта файлов данных в базы данных. Для MySQL см. Ниже:
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
Для других баз данных обратитесь к соответствующему руководству. Это полезно, если вы часто вставляете миллион записей или тысячи записей. В противном случае лучшее, что вы можете сделать, - это создать большой SQL-запрос с тысячами вставок и выполнить его напрямую в подключении к базе данных, пропуская ORM и связанные с ними проверки.