gpt4 book ai didi

java - 在同一虚拟机内切换 WAL 使用?

转载 作者:行者123 更新时间:2023-12-01 11:00:04 28 4
gpt4 key购买 nike

我是 Hawk model indexing 的开发者之一工具。我们的工具将 XMI 模型索引到图表中,以加快后续查询的速度,并且需要在“批量插入”和“事务更新”模式之间来回切换。当我们第一次注意到目录中有新文件时,使用“批量插入”,从那时起,我们使用“事务更新”模式来保持其图表同步。

我们最近添加了OrientDB 2.1.4 backend使用 OrientGraphFactory 中的 getTx()/getNoTx() 方法来获取适当的 OrientGraph/OrientGraphNoTx 实例。然而,与 Neo4j 相比,我们没有获得很好的吞吐量。当使用 OrientDB 将 WAL 放入 Linux ramdisk 中时,索引 set0.xmi 需要 90 秒,而在相同条件下(机器 + 操作系统 + JDK),使用我们的 Neo4j 后端需要 22 秒。我们正在使用这些附加设置来尝试减少时间:

  • 将 WAL 缓存大小增加至 10000
  • 在页面刷新时禁用同步
  • 仅保存脏对象
  • 使用大量插入意图
  • 禁用事务日志
  • 禁用 MVCC
  • 禁用验证
  • 尽可能使用轻质边缘

我们考虑过在进入“批量插入”模式时禁用 WAL,但似乎没有一种简单的方法来打开和关闭它。看起来它只能在程序启动时设置一次,仅此而已。我们尝试显式关闭底层存储,以便在重新打开存储时再次读取 USE_WAL 标志,但这只会导致 NullPointerExceptions 和其他随机错误。

任何有关我们如何切换 WAL 或如何提高性能的指示将不胜感激。

更新:我们已改用原始文档 API 并自行标记脏节点/边,现在已达到 55 秒,但 WAL 问题仍然存在。也尝试过2.2.0-beta,但实际上花了更长的时间。

最佳答案

我们自己解决了这个问题。留下这个以防万一它可能对某人有帮助:-)。在后端进行了许多内部改进(仍然使用原始文档 API)并切换到 OrientDB 2.0.15 后,我们已经达到了 30 秒,并且我们找到了自己切换 Write Ahead Log 的方法。这对我们有用(db 是我们的 ODatabaseDocumentTx 实例):

private void reopenWithWALSetTo(final boolean useWAL) {
db.getStorage().close(true, false);
db.close();
OGlobalConfiguration.USE_WAL.setValue(useWAL);
db = new ODatabaseDocumentTx(dbURL);
db.open("admin", "admin");
}

我很傻,以为我必须先关闭数据库,然后再关闭存储,但事实证明并非如此:-)。有必要使用 ODatabaseDocumentTx#close 方法的两个参数版本,因为无参数版本对于通过 plocal://URL 使用的 OAbstractPaginatedStorage 实现基本上没有任何作用。

关于java - 在同一虚拟机内切换 WAL 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33415440/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com