Heroku suggests using it,但我在本地开发环境中看到的这些问题
我在fork之后尝试了很多东西来重新打开连接,这是我能想到的最接近的:
cfg = Rails.application.config.neo4j
Neo4j::Session.set_current(Neo4j::Session.open(cfg.session_type, cfg.session_path, cfg.session_options))
BUT:
我怀疑neo4j-core会话是极限:neo4j-core on github而且我应该忘记在fork之后重新打开会话,因为gem只有一个共享会话。
但我对这并不是百分之百的信心,大规模的谷歌搜索没有给我什么。任何人都可以确认基本上没有必要在分叉后重新打开连接吗?
我也很想知道:
我的表现并不是表现问题,但我想确保自己知道自己需要什么。感谢。
其他配置:
答案 0 :(得分:2)
我必须管理员我对连接池知之甚少,直到我昨天读完它们。我想我现在对这个概念有了更好的处理,我一直在考虑如何应用这个概念。
目前,您通过Neo4j::Session.current
开会。该方法的代码就是这样:
def current
@@current_session
end
所以基本上它使用了一个类变量。我很确定这不是线程安全的;)我认为我们应该做类似Thread.current[:neo4j_curr_session]
之类的事情,以便每个线程都有一个会话。到目前为止,类变量没有引起任何问题,但可能会导致问题,我还没有认识到它们。
关于连接池:我认为典型的用例就像puma,每个Web服务器工作者都有一个线程。如果每个人都有一个会话,那么你可能通常不会打开很多会话。也就是说,我可以理解有人可能会想要:
我认为我正确地想到了这一点,但如果没有,我肯定会告诉我。我意识到这是一个非常“回答”,但作为维护者之一,我正在回答你关于项目目前状态的问题;)
如果您想多谈,请加入我们on Gitter
答案 1 :(得分:0)
我怀疑你会发现谷歌(正如你已经发现的那样)。最近,当我去Heroku部署一个Neo4j.rb应用程序时,我开始考虑这个问题。这是应用程序:
https://github.com/neo4j-examples/graphgist_portal
它正在Heroku上运行美洲狮。我决定不关心重新连接的那一刻,因为我很快就会遇到一个问题(我还没有到目前为止)。
至于neo4j-core
,用于管理会话的旧代码有点毛茸茸。我一直在为Cypher会话构建一个新的API。这部分是为了拥有更清晰的代码库,而且还支持适配器样式模式以支持Neo4j 3.0的新Bolt二进制套接字协议。希望这个新的API能够使创建线程安全的应用程序变得更简单,更容易。
如果您对新API感到好奇,那么它实际上是在6.0中发布的,但尚未推出,因为它还没有完成。它主要位于以下目录中:
https://github.com/neo4jrb/neo4j-core/tree/master/lib/neo4j/core
我还在这里汇总了一个图表: