Neo4j recommandations de configuration du serveur
Question
Je vais mettre en place un système basé sur Neo4j en cours d'exécution sur JRuby GlassFish. GlassFish comme avec la plupart des systèmes de rails permet d'un mécanisme d'exécuter plusieurs instances. En cas GlassFish il y a un cadre interne pour la taille du pool de fil.
Mon problème est que je rencontre des problèmes avec la base de données Neo4j étant ouvert plus d'une fois, ce qui est à l'origine d'une erreur. Je suis en train de mise à niveau vers Rails3 à tirer la dernière Neo4j.rb mais dans le même temps voulu assurer que j'avais la configuration du serveur droit.
Voici ma configuration:
# # GlassFish configuration. # # Please read the comments for each configuration settings before modifying. # # application environment. Default value development environment: staging # HTTP configuration http: # port port: 3000 #address address: 0.0.0.0 # context root. The default value is '/' contextroot: / # Grizzly is NIO based HTTP libraries used by GlassFish gem grizzly: chunking-enabled: true request-timeout: 30 send-buffer-size: 8192 max-keepalive-connextions: 256 keepalive-timeout: 30 thread-pool: idle-thread-timeout-seconds: 900 max-queue-size: 4096 max-thread-pool-size: 5 min-thread-pool-size: 2 #Logging configuration log: log-level: all jruby-runtime-pool: initial: 1 min: 1 max: 5 daemon: enable: true jvm-options: -server -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewRatio=2 -XX:+DisableExplicitGC -Dhk2.file.directory.changeIntervalTimer=6000
La solution
Vous pouvez essayer de régler la JRuby-exécution-pool valeur maximale à 1 au lieu (ont pas testé). Si vous utilisez une application multithread (comme des rails 3 et Neo4j) Je pense qu'il n'y a pas besoin d'utiliser plus d'un JRuby-exécution, droit?
Autres conseils
Le Neo4j.start
méthode prend une instance de base de données en option Neo. Je ne l'ai pas essayé, mais si vous pouvez expérimenter en sorte que seule instance Neo est créée et assurez-vous que chaque aspect d'exécution pour cette instance partagée d'abord, votre travail multiple pourrait approche d'exécution.
Où mettre l'instance partagée? Si vous utilisez dans un contexte de servlet, vous pouvez le mettre dans un attribut de contexte de servlet. Puisque vous n'êtes pas, la meilleure façon serait probablement d'écrire une petite classe Java wrapper pour le démarrage et le stockage de l'instance unique, et l'importation de cette classe Java dans chaque exécution.