我们最近使用 Hibernate 和 EntityManager(无 Spring)实现了数据库绑定,以将记录写入数据库。为了简单起见,我将只讨论仅执行插入的过程的变体。(另一个非常相似的过程更新现有记录一次以设置状态,但除此之外,仅插入一堆记录。)
此过程可以在每个事务中插入多达 10,000 条记录,但平均值低于此值,可能至少是一半。我们可能会在同一 JVM 下同时在不同线程中运行该进程的几个实例。
我们遇到了一个生产问题,运行该进程的服务正在占用机器上的所有 24 个核心。(他们添加了 12 个只是为了尝试适应这一点。)我们已将这种高利用率缩小到 Hibernate。
我花了几天时间研究,除了使用 hibernate.jdbc.batch_size 和 hibernate.order_inserts 之外,找不到任何可以提高性能的东西。不幸的是,我们使用 IDENTITY 作为生成策略,因此 Hibernate 可以/不会批处理这些插入。
我花了几天时间进行研究,但在进行大量插入时没有发现任何其他性能提示。(我见过很多关于读取、更新和删除的提示,但关于插入的提示却很少。)
我们有一个根 JobPO 对象。我们简单地调用合并,所有插入都是通过级联注释处理的。我们需要在单个事务中完成此操作。
我们只有 8 个不同的表需要插入,但记录的层次结构有点复杂。
public void saveOrUpdate(Object dataHierarchyRoot) {
final EntityManager entityManager = entityManagerFactory.createEntityManager();
final EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
// This single call may result in inserting up to 10K records
entityManager.merge(dataHierarchyRoot);
transaction.commit();
} catch (final Throwable e) {
// error handling redacted for brevity
} finally {
entityManager.close(); …Run Code Online (Sandbox Code Playgroud) 我正在使用Beyond Compare 4(64位版本,版本4.1.5,内部版本21031)。这对我来说是一个新应用。
我想比较两个文件夹(当前源代码树与先前版本)。除了查看单个差异之外,我还想知道哪些文件已更改。
我选择了“查看”->“忽略不重要的差异”。列表中有许多文件以红色显示,好像它们有所不同。但是,当我查看文件上的实际差异时,它显示没有区别。(它在左上角显示一个“ +”,文字为“ 110过滤线”。)
实际上,看起来每个文件似乎都以红色显示在列表视图中。(我假设红色表示存在差异。)
我还尝试通过会话->文本比较报告创建报告。...它显示在顶部的“模式:差异”和“忽略不重要”,但它列出了看起来像所有文件的文件。
如果重要的话,这些文件是.java文件。
如何查看仅具有重要差异的那些文件的列表?