2015-12-11 3 views
2

Heroku suggests using it, но эти проблемы я вижу все в моей локальной среде DevПодключить соединения Neo4jrb после вилки puma с preload_app?

  • Я использую МРТ 2.2.3 и 6.0.0 (neo4j.rb ActiveNode модели) с адаптером HTTP
  • Я также на OSX 10.11.2 с Neo4j 2.2.5 и jdk1.7.0_51-B53

Я пробовал много вещей, чтобы возобновить связь после развилки, это было ближе всего я мог бы выяснить:

cfg = Rails.application.config.neo4j 
Neo4j::Session.set_current(Neo4j::Session.open(cfg.session_type, cfg.session_path, cfg.session_options)) 

НО:

  • Когда я сделать возобновлять соединения, как это я держу проблемы, как если бы Фарадей возвращается результат на просьбу дважды
    • основном neo4j.rb называет URL соединения (http://localhost:7474/), чтобы получить URL-адрес данных, а затем вызывает URL-адрес данных. Но URL-адрес соединения для других работников иногда возвращает ответ с URL-адреса данных, который затем взрывается позже, когда он пытается на самом деле запросить Neo4j.
  • Когда я не возобновлять связи, все, кажется, работают, хотя я не моделируются достаточно нагрузки, чтобы знать наверняка

Я Подозревая Neo4j жильный сессия является пределом: neo4j-core on github и что я должен просто забыть о повторном открытии сеанса после вилки, так как у драгоценного камня есть только один общий сеанс.

Но я не уверен на 100% в этом и массивном googling ничего не дал мне. Может ли кто-нибудь подтвердить, что в принципе нет необходимости повторно открывать соединение после форкирования?

Я бы также хотелось знать, если:

  1. Существует своего рода пулы соединений происходит где-то
  2. мне нужно настроить его как-то
  3. драгоценный камень сам по себе должен иметь Объединив как функция/тянуть запрос
  4. я просто должен быть с помощью встроенного режима, если производительность является проблемой

Я не в АСС что это проблема, но я хочу убедиться, что знаю, что будет нужно, когда я буду. Благодарю.

Другие конфигурации:

  • Это находится на MacBook Pro 4-Core i7 = 8 процессоров
  • Я использую бригадир запустить 2 PUMA серверов, один к порту 80 и один на порт 443
    • да я знаю, что я должен прокси через Nginx :-) Это просто быстрая установка для локального разработчика
    • каждый сервер имеет 2 рабочих и 5 темы = 10 потоков (т.е. темы> # процессоры)
+0

Кроме того, не стесняйтесь бросить мимо Gitter в любое время с вопросами/мыслями: https://gitter.im/neo4jrb/neo4j –

ответ

2

я должен админ я не знаю много о пулов соединений до Я прочитал их вчера. Я думаю, что теперь я лучше разбираюсь в концепции, и я размышлял о том, как они могут применяться к драгоценному камню.

В настоящее время вы получаете сеанс через Neo4j::Session.current. Код для этого метода:

def current 
    @@current_session 
    end 

Таким образом, в основном он использует переменную класса. Я уверен, что это не потокобезопасно;) Я думаю, что мы должны делать что-то вроде Thread.current[:neo4j_curr_session] вместо этого, чтобы на каждом потоке была сессия. Переменная класса не вызвала никаких проблем до сих пор, но, возможно, это вызывает проблемы, и я еще не узнал их.

Что касается пулов соединений: типичный прецедент, я думаю, что-то вроде puma, где у вас есть поток для каждого рабочего веб-сервера. Если у каждого из них была сессия, вы, вероятно, обычно не открывали бы много сеансов.То есть, я могу понять, как кто-то может понадобиться:

  • Чтобы просто запустить скрипт Ruby, который будет иметь много потоков, но не хотел бы сеанса для каждого потока
  • Чтобы иметь много веб рабочих потоков потому что они имеют такую ​​большую нагрузку и не хотят сеанса для каждой нити.

Я думаю, что я думаю об этом правильно, но определенно дайте мне знать, если нет. Я понимаю, что это довольно «ответ», но как один из сопровождающих я отвечаю на ваш вопрос о том, каково состояние проекта в настоящее время;)

Если вы хотите больше узнать, то присоединяйтесь к нам.

+0

Я скажу, что отвечает на вопрос «что такое состояние драгоценного камня»: не threadsafe/нужно исправить этот бит, который вы указали. Спасибо Брайан, и я тоже заберу на Gitter, если у меня появятся еще вопросы. – brucek

+1

Да, действительно. Я думаю, что это, вероятно, будет легко. Я поставил проблему (https://github.com/neo4jrb/neo4j-core/issues/241) и пометил ее в моем списке дел –

+0

Я только что сделал быстрое изменение, которое, я думаю, будет служить для создания neo4j-core сеансы потокобезопасны. Только что выпущен как 5.1.13 и 6.0.2 –

0

Сомневаюсь, что вы найдете много от Google (как вы уже узнали). Я на самом деле начал думать об этом недавно, когда я пошел развернуть приложение Neo4j.rb в Heroku. Это приложение:

https://github.com/neo4j-examples/graphgist_portal

Это работает пуму на Heroku. На данный момент я решил не беспокоиться о повторном подключении, потому что я, скорее всего, столкнулся с проблемой (я пока не знаю).

Что касается neo4j-core, то старый код для управления сессиями является довольно волосатым. Я работал над созданием нового API для сессий Cypher. Частично это имеет более чистую кодовую базу, но также поддерживает шаблон адаптивного стиля для поддержки нового битового протокола сокета Bolt для Neo4j 3.0. Надеемся, что этот новый API упростит и упростит создание потокобезопасных приложений.

Если вам интересно узнать о новом API, он был фактически выпущен в версии 6.0, просто не показан, потому что это еще не так. Это в первую очередь в этом каталоге:

https://github.com/neo4jrb/neo4j-core/tree/master/lib/neo4j/core

Я также сколотить схему для него здесь:

http://i.imgur.com/g5FdPDn.png

 Смежные вопросы

  • Нет связанных вопросов^_^