不关闭 Environment 或 EntityStore 是否安全?
Is it safe not to close an Environment or EntityStore?
我想问一下不关闭环境是否安全?
final PersistentEntityStore entityStore = manager.getPersistentEntityStore(xodusRoot, instance);
final List<User> users = new LinkedList<>();
try {
} finally {
//entityStore.close
}
不关闭环境背后的原因是这里的示例代码是在 Servlet 环境中使用的,在该环境中我们实现了一种 Sigleton 查找 table(映射)来保存环境和 EntiyStores,如果我们关闭它 下一个 HTTP POST 请求将得到一个 "Environment already closed" 错误,因此我们不关闭它。
而我们在这里实现 Lookup table (map) 的原因是为了防止 servlet 请求获得数据库锁定问题,尤其是在多个并发请求时。
这样做安全吗?或者这甚至是正确的方法?
通常,不关闭 Environment 或 EntityStore 是安全的。在大多数情况下,如果 JVM 退出,未关闭的数据库将被打开而不会丢失数据。在最坏的情况下,数据库将恢复到最近的有效快照,就像在 system/hardware 次失败后一样。但是,未关闭的数据库会消耗一些额外的物理 space(GC 会受到影响),从而导致性能下降。您可以在销毁您的 servlet 时关闭查找 table 中的所有 Environments/EntityStores。
我想问一下不关闭环境是否安全?
final PersistentEntityStore entityStore = manager.getPersistentEntityStore(xodusRoot, instance);
final List<User> users = new LinkedList<>();
try {
} finally {
//entityStore.close
}
不关闭环境背后的原因是这里的示例代码是在 Servlet 环境中使用的,在该环境中我们实现了一种 Sigleton 查找 table(映射)来保存环境和 EntiyStores,如果我们关闭它 下一个 HTTP POST 请求将得到一个 "Environment already closed" 错误,因此我们不关闭它。
而我们在这里实现 Lookup table (map) 的原因是为了防止 servlet 请求获得数据库锁定问题,尤其是在多个并发请求时。
这样做安全吗?或者这甚至是正确的方法?
通常,不关闭 Environment 或 EntityStore 是安全的。在大多数情况下,如果 JVM 退出,未关闭的数据库将被打开而不会丢失数据。在最坏的情况下,数据库将恢复到最近的有效快照,就像在 system/hardware 次失败后一样。但是,未关闭的数据库会消耗一些额外的物理 space(GC 会受到影响),从而导致性能下降。您可以在销毁您的 servlet 时关闭查找 table 中的所有 Environments/EntityStores。