2013-09-01 2 views
3

노드 또는 레이블로 범주를 구현해야하는지 결정하려고합니다.
특히 범주에 속한 노드의 수를 얻기위한 쿼리가 그렇게 쉬운 것은 아닙니다.
노드가 더 많은 범주에 속할 수 있어야합니다! 레이블로노드 범주는 레이블, 노드 또는 레이블 및 노드로 분류됩니까?

카테고리, 변형 1
는 어딘가 카테고리의 목록을 유지 :

MATCH a:cat1, b:cat2, c:cat3, ... 

종류의 많은 내가 열을 많이 얻을 것이다 .. 그것은 정말 좋은하지 그래서. 또한 쿼리에 대한 사전 처리가 많이 있습니다.
내가 카운트를 쉽게 얻을 수 있는지 확실하지 않습니다. 레이블로

카테고리, 2

MATCH n:category <-- the category label is used to limit the amount of nodes 
RETURN DISTINCT labels(n), count(*) as count 

같은 뭔가를 반환합니다 변형 :

["category","the actual category label"], 2 

완벽 보이지만 노드가 여러 카테고리

["category","cat1","cat2"], 2 <-- two nodes found with category "cat1" and "cat2" 
["category","cat1"], 4 <-- four nodes found with category "cat1" 
이있는 경우이 작동하지 않습니다

이제 카테고리 당 카운트를 얻는 방법을 모르겠다.
어쩌면 extract(..labels()..) 또는 filter(..labels()..)으로 뭔가 할 수 있을지 모르지만 어떻게해야할지 모르겠다.

노드로 분류 예이 작품은 ... 꽤 직설적입니다. 그러나 레이블을 노드를 범주화하는 것으로 간주하지 않습니까? 게다가 내가 만들 수있는 모든 여분의 관계 ..

아마 내가 레이블과 노드 모두로 구현해야합니까?
그러면 레이블을 사용하여 카테고리가있는 모든 노드를 빠르게 얻을 수 있습니다. 그리고 노드를 가지고 범주 수를 얻을 수있었습니다.

난 아직이 문제에 대한 좋은 관점 찾고 있어요, 그래서 내가 아직 구체적인 구현 질문을 드릴 수 없습니다.

+0

얼마나 많은 종류? 이 노드는 다른 카테고리로 분류 되나요, 아니면 카테고리가 하나입니까? –

+0

처음에는 내 응용 프로그램에 대해 1 명의 사용자 만 있었지만 1 명의 사용자는 약 10-50 개의 범주를 만들 것이라고 추측합니다. 사용자는 자신의 카테고리를 정의 할 수 있으므로 사용자베이스가 커지면 카테고리도 확장됩니다. 그것은 단지 한 종류의 범주에 불과합니다. 노드는 그룹화하는 방법이 다르지만 그룹화 노드에 노드를 연결하여 수행됩니다. 나는''cat_ "'을 가진 카테고리에 사용 된 레이블의 접두사에 대해 생각했다. – Flip

답변

5

내 두 센트. 카테고리의 당신의 종류

, 나는 카테고리 당 노드로 이동하고 그 범주에 속하는 노드에서 BELONGS_TO 관계를 만들 것입니다. 내 선호도에는 여러 가지 이유가 있습니다. 라벨이 추가 된 이유

하나는 많은 사람들이 노드에서 "유형"속성을 가하고 있다고합니다. 레이블에 대해 이야기하는 또 다른 방법은 노드를 범주화 할 수 있다는 점에서 그래프에 약간의 "스키마"를 추가하는 것입니다. 라벨의 도입으로

는 항상 남용 될 위험이있다. 이것은 주로 그래프를 저장하기 위해 설계된 데이터베이스의 추가 도구 일뿐입니다. 극단적 인 경우 거의 모든 것에 대해 레이블을 사용할 수 있으며 "태그가 지정된"노드 저장소로 끝납니다.

마지막으로 관계를 탐색하는 것은 Neo4j가하는 가장 빠른 것입니다. 우리는 마이크로 초의 단위를 말하고 있습니다. 노드에 수천 개의 관계를 추가하는 것을 두려워하지 마십시오. 개발자가 정의한 "스키마와 유사한"정보에 대한 레이블을 남겨 두었습니다.

그래서 사용자가 추가 한 카테고리에 귀하의 경우에, 나는 확실히 라벨에 찬성, 카테고리 노드와 BELONGS_TO 관계를 만들 것입니다. 이 자기 마케팅의 비트가 면책 조항

마지막으로 한가지. 노드 당 수십만 또는 수십만 개의 관계가있는 지점에 이르면 관계 만 계산하면 노드의 해당 개수를 속성으로 캐시하는 것이 좋습니다. 나는 정확하게 이것을하는 GraphAware Framework을 위해 "Relationship Count Module"이라는 모듈을 개발했다. 저는 MSC에서 시연했습니다. 2 주 내에 공개 될이 논문은 모듈이 10-25 %의 쓰기 처리량 패널티 (penalty)에 대해 고차원 버텍스에 대한 카운트 쿼리를 몇 배의 속도로 가속화한다고 발표했다. 그것에 대한 자세한 내용이 필요하면 알려주십시오.

+0

대답은 Thx입니다. 어떤 라벨을 사용해야하고 어떤 라벨을 사용해야하는지에 대한 충분한 설명을 제공하기 때문에 받아 들일 것입니다. REST API를 사용하고 있는데, REST를 통해 프레임 워크와 모듈을 사용할 수 있습니까? 프레임 워크에 의해 정의 된 추가 cypher 함수가있을 수 있습니까? 후속 정보를 알고 싶습니다. – Flip

+0

감사합니다. 그래, 현재 프레임 워크는 REST와 Cypher에서 사용할 수 있습니다. 왜냐하면 그 순간에 모든 것은 메타 데이터를 배경으로 그래프에 추가하기 때문입니다. Cypher를 포함한 모든 API를 사용하여 읽을 수 있습니다. 그러나 지원은 더 좋을 수 있으며 로드맵에 있습니다. 그것없이 시작하여 기능을 먼저 개발하는 것이 좋습니다. 성능 측정 및 최적화를 시작할 때 graphaware.com의 모든 정보를 얻으십시오. 프레임 워크가 그 시점에서 훨씬 더 많은 것을 할 수있는 기회가 있습니다. 행운을 빕니다. –

관련 문제