首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多Xodus应用程序访问/共享单个目录

多Xodus应用程序访问/共享单个目录
EN

Stack Overflow用户
提问于 2019-07-11 19:01:21
回答 1查看 266关注 0票数 1

根据这个帖子的评论

“我有xodus目录,我想在两个应用程序之间共享.但是一个应用程序具有读/write访问权限,另一个应用程序具有只读访问权限.是除Environments.newInstance(”xodusDir“)之外创建环境的任何其他方式;对于只读访问xodus数据库.我只需要从其他应用程序中只读取对xodus的访问。”

回覆

“在即将推出的1.3.0版本中,这是可能的。”

这是否意味着可以让多个进程创建指向同一个目录的环境/持久存储:

代码语言:javascript
复制
  Environment environment = getEnvironment(xodusRoot, dir);
  final PersistentEntityStore store = PersistentEntityStores.newInstance(environment);

使用此拓扑结构:

这是可能的还是有一个解决办法来做到这一点?

据我所知,xd.lck阻止两个实例访问同一个Xodus目录。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 09:10:30

从1.3.0版本开始,您可以在只读模式下打开数据库,忽略锁:

代码语言:javascript
复制
final EnvironmentConfig config = new EnvironmentConfig().
            setLogDataReaderWriterProvider("jetbrains.exodus.io.WatchingFileDataReaderWriterProvider").
            setLogCacheShared(false).
            setMemoryUsagePercentage(1);
final Environment env = Environments.newInstance(dir, config);
final PersistentEntityStore store = PersistentEntityStores.newInstance(env);

它不仅会忽略锁,而且还会使用java.nio.file.WatchService自动获取新数据。

可以像通常一样打开一个实例Environment/EntityStore (主实例),也可以像上面那样打开多个实例(次要实例)。代理服务器应该正确地分配通信量,这样辅助实例就不会收到写请求。显然,您的应用程序必须解决这种体系结构不可避免的最终一致性问题。

辅助实例可以在任何JVM中打开。如果您在同一个JVM中打开用于打开主实例的辅助实例,那么请注意内存的使用情况,因为辅助实例不使用共享日志缓存。主实例(如果不使用setMemoryUsagePercentage)可以占用最大堆内存的50%。如果内存的总体使用率不超过50-55%,这是很好的(尽管这取决于您使用的GC和GC设置)。

如果您在单独的JVM中打开辅助实例,那么在上面的代码中跳过setLogCacheSharedsetMemoryUsagePercentage设置。您唯一需要配置的是监视DataReaderWriterProvider。

使用1.3.91版本,您甚至可以在不同主机上使用辅助实例运行JVM(s)。每个主机都应该在其文件系统上拥有数据库的副本,它可以按以下方式打开:

代码语言:javascript
复制
final EnvironmentConfig config = new EnvironmentConfig().
            setLogDataReaderWriterProvider("jetbrains.exodus.io.WatchingFileDataReaderWriterProvider");
final Environment env = Environments.newInstance(dir, config);
final PersistentEntityStore store = PersistentEntityStores.newInstance(env);

与基础结构有关的唯一额外的事情是提供数据库更改的定期同步。1.3.91版本经过测试,并在rsync中运行良好。在大多数情况下,每5-10秒同步一次是可以的,尽管高写入工作负载会导致一些同步延迟。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56995773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档