그래프 기반 데이터베이스 (http://neo4j.org/)의 사용 사례는 무엇입니까? [닫은

StackOverflow https://stackoverflow.com/questions/1000162

  •  05-07-2019
  •  | 
  •  

문제

나는 관계형 DB를 많이 사용했으며 사용 가능한 다른 유형을 모험하기로 결정했습니다.

이 특정 제품은 좋아 보이고 유망합니다. http://neo4j.org/

그래프 기반 데이터베이스를 사용한 사람이 있습니까? 유용성 전제의 장단점은 무엇입니까?

생산 환경에서 이것을 사용 했습니까? 당신이 그들을 사용하도록 유도 한 요구 사항은 무엇입니까?

도움이 되었습니까?

해결책

이전 작업에서 그래프 데이터베이스를 사용했습니다. 우리는 NEO4J를 사용하지 않았으며 버클리 DB 위에 세워진 사내 였지만 비슷했습니다. 그것은 생산에 사용되었습니다 (여전히 그렇습니다).

우리가 그래프 데이터베이스를 사용한 이유는 시스템에 의해 저장되는 데이터와 시스템이 데이터로 수행 한 작업이 관계형 데이터베이스의 약점이었고 그래프 데이터베이스의 강력한 지점이기 때문입니다. 시스템은 고정 스키마가없고 관계에 의해 연결되는 객체 모음을 저장하는 데 필요했습니다. 데이터에 대해 추론하기 위해 시스템은 그래프 데이터베이스에서 몇 가지 트래버스가 될 많은 작업을 수행해야했지만 SQL에서는 매우 복잡한 쿼리입니다.

그래프 모델의 주요 장점은 빠른 개발 시간과 유연성이었습니다. 기존 배포에 영향을 미치지 않으면 서 새로운 기능을 신속하게 추가 할 수 있습니다. 잠재 고객이 자체 데이터를 가져 와서 모델 위에 이식하려는 경우 일반적으로 영업 담당자가 현장에서 수행 할 수 있습니다. 유연성은 또한 새로운 기능을 설계 할 때 새로운 데이터를 엄격한 데이터 모델로 짜내려고하지 못하게하는 데 도움이되었습니다.

이상한 데이터베이스를 사용하면 다른 이상한 기술을 많이 구축하여 제품을 경쟁 업체의 제품과 구별 할 수있는 비밀을 많이 제공 할 수있었습니다.

주요 단점은 우리가 표준 관계형 데이터베이스 기술을 사용하지 않았다는 것입니다. 이는 고객이 엔터프라이즈 일 때 문제가 될 수 있습니다. 고객은 왜 우리가 거대한 Oracle 클러스터에 대한 데이터를 호스팅 할 수 없었는지 물어볼 것입니다 (고객은 일반적으로 큰 데이터 센터가있었습니다). 팀 중 하나는 실제로 데이터베이스 계층을 다시 작성하여 Oracle (또는 PostgreSQL 또는 MySQL)을 사용하지만 원본보다 약간 느 렸습니다. 적어도 하나의 대기업은 Oracle 전용 정책을 가지고 있었지만 운 좋게도 Oracle은 Berkeley DB를 구입했습니다. 우리는 또한 많은 추가 도구를 작성해야했습니다. 예를 들어 Crystal Reports 만 사용할 수 없었습니다.

우리의 그래프 데이터베이스의 또 다른 단점은 우리가 직접 구축했다는 것입니다. 즉, 우리가 문제를 겪을 때 (보통 확장 성이 있음) 우리는 스스로 해결해야했습니다. 관계형 데이터베이스를 사용했다면 공급 업체는 이미 10 년 전에 문제를 해결했을 것입니다.

Enterprisey 고객을위한 제품을 구축하고 데이터가 관계형 모델에 적합한 경우 가능한 경우 관계형 데이터베이스를 사용하십시오. 응용 프로그램이 관계형 모델에 맞지 않지만 그래프 모델에 맞는 경우 그래프 데이터베이스를 사용하십시오. 다른 것이 맞는다면 사용하십시오.

애플리케이션이 현재 블루브 아키텍처에 맞지 않아야하는 경우 그래프 데이터베이스 또는 CouchDB 또는 BigTable 또는 앱에 맞는 모든 것을 사용하면 멋지다고 생각합니다. 새로운 것을 시도하는 것이 유리하고 재미를 줄 수 있습니다.

선택한 내용은 데이터베이스 엔진을 구축하는 것을 좋아하지 않는 한 데이터베이스 엔진을 직접 구축하지 마십시오.

다른 팁

우리는 1 년 넘게 NEO 팀과 함께 일해 왔으며 매우 행복했습니다. 우리는 학문적 인공물과 그 관계를 모델링하여 그래프 DB를 위해 자리 잡고 네트워크를 통해 추천 알고리즘을 실행합니다.

이미 Java에서 일하고 있다면 Neo4J를 사용한 모델링은 매우 간단하며 우리가 시도한 다른 솔루션 중 R / W에 대해 가장 낮 / 빠른 성능을 가지고 있다고 생각합니다.

솔직히 말해서, 나는 힘든 시간이 있습니다 ~ 아니다 객체 속성과 관계를 유지하기 위해 복잡한 테이블 구조를 설계하는 것보다 훨씬 쉽기 때문에 그래프/네트워크 측면에서 생각합니다.

즉, 비즈니스 측면이 빠른 SQL 쿼리를 실행하기가 더 쉽기 때문에 MySQL에 일부 정보를 저장합니다. NEO와 동일한 기능을 수행하려면 지금 당장 대역폭이없는 코드를 작성해야합니다. 그래도 우리가하자마자 모든 데이터를 NEO로 옮기고 있습니다!

행운을 빕니다.

두 가지 점 :

먼저, 지난 5 년 동안 SQL Server에서 작업해온 데이터에서 최근에 실행 해야하는 쿼리 유형에 대한 SQL로 확장 성벽을 쳤습니다 (Nested CongrenceHsips ... 알고 있습니다 ... 그래프. ). 나는 Neo4J와 함께 놀았으며, 이런 종류의 조회가 필요할 때 조회 시간은 몇 배 더 빠릅니다.

둘째, 그래프 데이터베이스가 구식입니다. 음 .. 아니야. 초기에 사람들이 데이터를 효율적으로 저장하고 조회하는 방법을 알아 내려고 노력하면서 그래프 및 네트워크 스타일 데이터베이스 모델을 만들고 연주했습니다. 이것들은 물리적 모델이 논리 모델을 반영하여 설계되었으므로 효율성이 크지 않았습니다. 이 유형의 데이터 구조는 반 구조화 된 데이터에 적합했지만 구조화 된 밀도 데이터에는 적합하지 않았습니다. 따라서 Codd라는이 IBM 친구는 구조화 된 데이터를 준비하고 저장하는 효율적인 방법을 연구하고 관계형 데이터베이스 모델에 대한 아이디어를 생각해 냈습니다. 그리고 그것은 좋았고 사람들은 행복했습니다.

우리는 여기에 무엇을 가지고 있습니까? 두 가지 다른 목적을위한 두 가지 도구. 그래프 데이터베이스 모델은 반 구조화 된 데이터와 엔티티 간의 관계 (존재하거나 존재하지 않을 수도 있음)를 나타내는 데 매우 좋습니다. 관계형 데이터베이스는 매우 정적 스키마가 있고 조인 깊이가 깊이 깊어지지 않는 구조화 된 데이터에 적합합니다. 하나는 한 종류의 데이터에 적합하고 다른 하나는 다른 종류의 데이터에 좋습니다.

이 문구를 만들기 위해은 총알이 없습니다. 그래프 데이터베이스 모델이 구식이 아니라고 말하면 40 년의 진행 상황을 포기하는 것은 매우 짧습니다. 그것은 C를 사용하는 것이 Java 및 C#과 같은 일을 얻기 위해 우리가 겪은 모든 기술 진보를 포기한다고 말하는 것과 같습니다. 그래도 그것은 사실이 아닙니다. C는 특정 작업에 필요한 도구입니다. Java는 다른 작업을위한 도구입니다.

나는 엔지니어링 데이터를 관리하기 위해 몇 년 동안 MySQL을 사용해 왔으며, 잘 작동했지만, 우리가 가진 문제 중 하나 (그러나 우리가 가지고있는 것을 깨닫지 못했던)는 항상 스키마를 선불로 계획해야한다는 것입니다. 우리가 알고있는 또 다른 문제는 데이터를 도메인 객체와 뒤로 매핑하는 것입니다.

이제 우리는 방금 NEO4J를 시험해보기 시작했으며 우리를 위해 두 가지 문제를 모두 해결하는 것처럼 보입니다. 각 노드 (및 관계)에 다른 속성을 추가하는 기능을 통해 데이터에 대한 전체 접근 방식을 다시 생각할 수있었습니다. 동적 대 정적 언어 (루비 대 Java)와 비슷하지만 데이터베이스의 경우입니다. 데이터베이스에서 데이터 모델을 구축하는 것은 훨씬 더 민첩하고 역동적 인 방식으로 수행 할 수 있으며, 이는 코드를 극적으로 단순화합니다.

또한 코드의 객체 모델은 일반적으로 그래프 구조이므로 데이터베이스의 매핑도 더 간단하고 코드가 적고 버그가 적습니다.

또한 추가 보너스로 NEO4J에 데이터를로드하기위한 초기 프로토 타입 코드는 실제로 이전 MySQL 버전보다 빠르게 성능이 작용합니다. 나는 이것에 대해 확실한 숫자가 없지만 (아직) 좋은 추가 기능이었습니다.

그러나 하루가 끝나면 선택은 아마도 주로 도메인 모델의 특성을 기반으로해야합니다. 테이블이나 그래프에 더 잘 매핑됩니까? 프로토 타입을 수행하여 결정하고 데이터를로드하고 재생하십시오. Neoclipse를 사용하여 데이터의 다른보기를보십시오. 일단 그렇게 한 후에, 당신은 당신이 좋은 일을하고 있는지 알기를 바랍니다.

나는 회사에 인트라넷을 만들고 있습니다.

테이블 (Oracle, MySQL, SQL Server, Excel, Access, Access, 다양한 임의 목록)에 저장된 데이터를로드하는 방법을 이해하고 Neo4J 또는 기타 그래프 데이터베이스에로드합니다. 구체적으로, 공통 데이터가 이미 시스템에있는 기존 데이터와 겹치는 경우 발생하는 일.

예, 일부 데이터가 RDBMS에서 가장 잘 모델링된다는 것을 알고 있지만,이 아이디어가 가려워하는 아이디어가 있습니다. 여러 개의 별개의 테이블을 중첩해야 할 때 그래프 모델이 테이블 구조보다 낫습니다.

예를 들어, 저는 제조 환경에서 일합니다. 우리가 작업하는 주요 프로젝트가 있으며 복잡성 때문에 각 부서는 Bom (자료 청구서) 왼쪽 열의 열에 계층 과이 시트를 만든 개인이 만든 몇 개의 메모 및 수표.

따라서 문제 중 하나는이 모든 노트를 하나의 "보기"로 병합하여 누군가가 특정 부분에서 해결 해야하는 모든 문제를 볼 수 있도록하는 것입니다.

두 번째 문제는 공통 구성 요소가 둘 이상의 하위 어셈블리에 사용될 때 Excel 스프레드 시트가 계층 구조 BOM을 나타내는 데 짜증이납니다. 즉, 누군가가 점화 하위 조립에서 P34 릴레이에 대한 메모를 작성하면 모터 드라이버 하위 어셈블리에 사용 된 P34 릴레이와 동일한 주석이 관련되어야합니다. Excel 스프레드 시트에서는 발생하지 않습니다.

회사 인트라넷의 경우 쉽게 찾을 수 있기를 원합니다. 부품 번호, BOM 구조, 전화 번호, 이메일 주소, 회사 정책 또는 절차와 관련된 데이터와 같은. 컴퓨터 하드웨어 자산과 설치된 소프트웨어를 관리하기 위해 이것을 확장하고 싶습니다.

정보 네트워크가 채워지기 시작하면 "XYZ 프로젝트에서 작업하는 모든 사람에게 이메일을 작성하고 싶습니다"와 같은 멋진 트래버스를 시작할 수 있다고 생각합니다. 사람들은 XYZ 프로젝트 내에서 데이터를 작성하고 수정하는 것으로 태그가 지정되기 때문에 프로젝트와 관련이있을 것입니다. 따라서 XYZ 프로젝트를 검색 키로 사용하면 XYZ 프로젝트와 관련된 모든 세트가 생성됩니다. XYZ 프로젝트를 구축 한 사람들에 대한 링크를 포함합니다. People Links는 이메일 주소에 연결됩니다. 따라서 XYZ 프로젝트에 참여하면 내 이메일에 포함됩니다. 이것은 프로젝트에서 일하는 사람들의 목록을 유지하려는 일부 비서와는 대조적입니다. 우리는 많은 목록을 생성합니다. 우리는 목록을 유지하고 최신 상태인지 확인하는 데 많은 시간을 소비합니다. 그리고 대부분의 제품은 우리 제품에 어떤 가치도 추가하지 않습니다.

또 다른 Cool Traversal은 특정 소프트웨어가 설치된 모든 컴퓨터를 버전으로보고 할 수 있습니다. 이 보고서는 오래된 소프트웨어의 추가 사본을 제거하는 작업을 생성하고 최신 사본이 필요한 사람들을 업데이트하는 데 사용될 수 있습니다. 라이센스 추적에도 유용합니다.

다음은 비 관계형 데이터베이스가 채우는 요구에 대해 이야기하는 좋은 기사입니다. http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php

관계형 데이터베이스가 결함이 있거나 잘못되었다는 점은 (이름을 제외하고), 요즘 사람들이 주류 소프트웨어 및 웹 사이트에서 점점 더 많은 데이터를 처리하기 시작했으며 관계형 데이터베이스가 확장되지 않을 것입니다. 이러한 요구에 대해.

조금 늦었을 수도 있지만 Neo4J를 사용하여 점점 더 잘 알려진 프로젝트가 있습니다. neo4j . 또한 Neo4J의 회사 인 Neotechnology는 고객 페이지

참고 : 저는 NEO4J 팀의 일원입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top