2012-11-05 2 views
2

현재 파이썬/플라스크를 사용하여 웹 서비스를 구축 중이며 내 핵심 데이터 구조가 본질적으로 그래프이기 때문에 neo4j 위에 데이터 계층을 구축하고 싶습니다. 나는 neo4j가 제공 한 여러 가지 기술에 대해 다소 혼란 스럽다. 특히 :트랜잭션과 함께 파이썬에서 neo4J (서버) 사용

1/i는 원래 py2neo를 통해 REST API를 사용할 계획 이었지만 트랜잭션 부족은 약간의 문제입니다.

2/"임베디드 데이터베이스"인 neo4j는 필자의 경우에 잘 맞지 않는 것처럼 보입니다. 일괄 및 일회 분석으로 작업 할 때 유용하며 웹 서버와 다른 서버에 데이터베이스를 저장할 필요가 없다고 생각합니다.

3/나는 neo4django 프로젝트를 발견했지만이 트랜잭션 지원을 제공하지는 않습니다. (파이썬 용 neo4j에 대한 네이티브 클라이언트가 없으므로) 그리고 외부에서 사용하는 것이 문제가 될 수 있습니다. 장고 자체. 사실, 프로젝트의 문서를 본 후, 정확히 동일한 제한 사항, 일명 트랜잭션이없는 것처럼 느껴집니다 (단, 단일 연결 시간 초과시 모델을 손상시킬 수있는 경우 어떻게 실제 서비스를 구축 할 수 있습니까?) . 나는 그 프로젝트를 위해 무엇이 사용되는지 이해하지 못한다.

아무에게도 추천 할만한 제품이 있습니까? 나는 완전히 붙어있는 느낌. 이 기능은 Neo4j REST API를 인터페이스를 통해 사용할 수 없습니다 때문에 REST API 클라이언트의

답변

5

없음

덕분에 명시 적으로 (적절한) 트랜잭션을 지원 할 수 있습니다. 서버 측에서 단일 원자 트랜잭션 내에서 모두 작동하는 Cypher 쿼리 및 일괄 처리 실행과 같은 몇 가지 대안이 있습니다. 그러나 클라이언트 응용 프로그램에 대한 일반적인 접근 방식은 부분적으로 완전한 데이터를 정상적으로 처리 할 수있는 코드를 작성하여 명시 적 트랜잭션 제어의 필요성을 제거하는 것입니다.

종종이 접근 방식은 고유 한 색인 생성을 많이 사용하게되므로 py2neo 내에 많은 수의 "get_or_create"유형 메소드를 제공 한 이유 중 하나입니다. Cypher 자체는 엄청나게 강력하며 특히 CREATE UNIQUE 절을 통해 고유성 기능을 제공합니다. 이것들을 사용하면 멱등응으로 쓰기를 할 수 있으며, 중복 데이터로 끝나지 않을 것이라는 점에서 "한 번 이상"하는 것이 잘못 될 수 있습니다.

이 방법은 거래 자체를 제공하지 않지만 대부분의 경우 동일한 최종 결과를 제공 할 수 있습니다. 애플리케이션 거래에서 이 필요한 부분에 대해 스스로에게 도전 할 가치가 있습니다.

희망이는 Neo4j REST 인터페이스에서 batch resource을 통해 트랜잭션을 지원하지

나이젤

2

내가 neo4djangoneo4j-rest-client을 사용합니다 생각을하는 데 도움이됩니다.

>>> n = gdb.nodes.create() 

>>> n["age"] = 25 

>>> n["place"] = "Houston" 

>>> n.properties 
{'age': 25, 'place': 'Houston'} 

>>> with gdb.transaction(): 
    ....:   n.delete("age") 
    ....: 

>>> n.properties 
{u'place': u'Houston'} 

더 많은 정보가 neo4j 받침대 클라이언트 설명서에 대한 transactions에서 찾을 수 있습니다

구문은 API를 emebedded Neo4j 파이썬에서 사용하는 것과 매우 유사하다.

관련 문제