2011-11-22 4 views
12

내 응용 프로그램에 가장 적합한 솔루션이 무엇인지 혼란스러워합니다. 지금까지 본 것처럼 neo4j 독립형 (RestGraphDatabase)과 EmbeddedGraphDatabase (RemoteGraphDatabase는 아직 프로덕션 용으로 사용되지 않음) 중에서 선택해야합니다.Neo4j 서버와 임베디드

프로 REST :

->는 neo4j DB (샘플에 액세스 할 수 있습니다 다른 서비스 : 난 종류 A의 노드에 대한 책임이 하나 개의 서비스를을, B와 C는 두 번째 서비스는 노드 D와 H에 대한 책임 D 노드를 A 노드에 연결할 수 있음). 그런 식으로 나는 깨끗한 도메인 구조를 가지고있다. 모든 서비스는 자체 도메인 노드에 대해서만 책임이 있습니다. 각 서비스를 업데이트 할 수 있으며 전체 응용 프로그램을 종료 할 필요가 없습니다.

-> 나는 다른 언어 (PHP)

단점에서 neo4j의 DB에 액세스 할 수 있습니다 - 성능이 neo4j 서버와 서비스가 동일한 시스템에 있기 때문에 대기 시간은 (AN EmbeddedGraphDatabase로 좋은하지 않습니다 그다지 크지 않다). - 거래 없음

내 질문 : 독립 실행 형 서버와 함께가는 것이 좋은 결정입니까? 또는 임베디드 서비스를 사용해야하며 서비스를 큰 서비스로 혼합해야합니까? 트랜잭션 지원없이 큰 (복잡한) 응용 프로그램을 실행할 수 있습니까?

답변

8

REST 서버의 성능이 떨어지는 것이 옳습니다. 그러나 일괄 작업을 사용하여 REST 서버와의 트랜잭션 같은 것을 가질 수 있습니다. http://docs.neo4j.org/chunked/milestone/rest-api-batch-ops.html을 참조하십시오. 또한 서버 측에서 트랜잭션 로직을 수행하는 도메인 별 서버 플러그인을 빌드 할 수도 있습니다 (http://docs.neo4j.org/chunked/milestone/server-extending.html).

아키텍처에서 여러 클라이언트 시스템에서 데이터베이스에 액세스 할 수 있어야하는 경우 유일한 옵션은 REST 서버 또는 Neo4j HA (고 가용성)입니다. HA는 Neo4j Enterprise 라이센스에서만 사용할 수 있습니다.

응용 프로그램 아키텍처에서 어떤 도구가 사용되는지 알려주고 다른 방법은 사용하지 마십시오. 이미 애플리케이션이 별도의 서비스로 가장 적합하다고 판단한 경우 기본 지속성 모델을 지원하기 위해 애플리케이션을 하나로 결합하지 마십시오. 귀하의 응용 프로그램에 대해서는 아무 것도 모르지만 귀하의 설명에서 REST 서버를 선택하고 일괄 처리 또는 서버 플러그인을 활용할 것입니다.

+0

REST-API (두 개의 Python 라이브러리로 테스트)에 큰 데이터 세트 (10GB를 가져 오기 때문에 심각한 데이터 세트조차도 포함하지 않음)에 심각한 성능 문제가 있다는 점을 말씀 드리고 싶습니다. 배치 가져 오기 도구를 사용했지만 특정 제한을두면 서버가 거의 차단됩니다. 해당 문제에 대한 공개 토론이 있지만 아직 해결책을 모르고 있습니다. 일반적으로 모든 무거운 물건을 넣을 때는 내장 된 설정을 사용하는 것이 좋습니다. – Bouncner

+0

@Bouncner 3 년 후에, 이것이 여전히 사실인지 아십니까? 귀하와 같은 시간에 우리는이 성능 문제에 주목했지만 그 이후로는 사용하지 않았습니다. –

6

모두 사용 사례에 따라 다릅니다. 이미 프로와 콘의 일부를 나열했습니다.

서버용 다른 하나의 전문가는 웹 관리/시각화입니다.

더 많은 옵션이 있습니다. 고성능을 위해 내장 된 graphdb를 가질 수 있으며 일부 서비스 만 포함되도록 실행하고 사용자 정의 도메인 중심 원격 (REST 또는 기타) API를 사용하여 다른 서비스의 그래프 데이터베이스를 노출 할 수 있습니다.

Neo4j Server를 사용하고 성능 중요 서비스 중 일부를 Server-Plugins 또는 Extensions으로 추가하면 유스 케이스에 맞는 맞춤형 원격 API를 더 잘 나타낼 수 있습니다.

서비스를 개발하기 위해 내장 된 그래프 db를 사용하기 시작합니다. 특정 엔드 포인트를 다른 서비스에 나중에 노출하려면 Neo4j 서버로 전환하는 것이 매우 쉽습니다.

REST-API에는 요청 당 하나의 트랜잭션이 있습니다. 더 큰 연산의 경우 API에는 batch operation이 있습니다.