【问题标题】:'Bulk insert' for cascaded list级联列表的“批量插入”
【发布时间】:2015-04-01 12:18:09
【问题描述】:

我有一个带有级联列表的对象,它的映射方式如下:

HasMany(x => x.Products).Cascade.AllDeleteOrphan(); //.BatchSize(10000);

将 20000 个产品添加到列表后,提交需要超过 30 秒(而最长应为 3 秒)。

我需要的是一种批量插入。我可以采用这种方法:Speed up bulk insert operations with NHibernate。我知道这个解决方案使用StatelessSession,但无论如何,我希望在我的映射中配置这些东西,将对象直接添加到我的Entity 的列表中,NHibernate 会处理剩余的东西。在列表的映射上设置BatchSize 似乎没有任何效果。

有什么方法可以在可接受的时间内完成这项任务吗?

【问题讨论】:

  • 批量插入并不是每个实体都需要的东西。每当我需要它时,我都会在无状态会话 bulkInsert 上创建一个单独的扩展方法,用于此目的
  • 这就是我所担心的。但希望最后死去:-)
  • 如果您阅读 ayande 的博客,他说同样的事情:0 批量插入不是 ORM 的工作,因为您需要专门的工具,所以不要对任何 ORM 有太多期望批量复制/上传

标签: nhibernate fluent-nhibernate


【解决方案1】:

我认为映射中的批量大小仅与获取有关。您可以尝试在您的 nhibernate 配置中使用此配置:

<property name="adonet.batch_size">250</property>

【讨论】:

  • 感谢您的回复。不幸的是,这个选项似乎没有效果。提交仍然需要 30 多秒。
【解决方案2】:

加快速度的唯一方法是使用无状态会话

(阅读:Inserts of stateless session of NHibernate are slow

另外,请注意以下事项 - 使其更快

cfg.AutoCommentSql = false;

cfg.LogFormattedSql = false;

【讨论】:

    猜你喜欢
    • 2013-05-04
    • 2019-03-21
    • 2019-08-30
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多