문제

에 관심이 있어요 청각에 대해 디자인 전략을 사용하고 있으로 비-관계형"nosql"데이터베이스 -즉,(주로 새로운)등의 데이터 저장소를 사용하지 않는 전통적인 관계형 디자인 또는 SQL(과 같은 Hypertable,CouchDB,심플,구글 앱 엔진 데이터 저장소,모두,카산드라,SQL 데이터 서비스,etc.).그들은 또한 종종"키/값 저장",그리고 베들처럼 행동하는 거대한 분산 영구적인 해시 테이블이 있습니다.

특히,내가 원하는 차이점에 대해 자세히 알아봅니에 개념적 데이터 디자인 이러한 새로운 데이터베이스가 있습니다.What's 쉽게 무엇을 어렵게,무엇을 할 수 없습니까?

  • 당신이 올라와 다른 디자인하는 작업을 훨씬 더 나은 비-관계형 세계?

  • 는 당신이 당신의 머리에 아무것도 보이는 불가능한가?

  • 당신은 브리지 간격으로 어떤 디자인 패턴을,예를 들어,번역에서 다른 하나?

  • 당신은 심지어 명시적인 데이터 모델 모두에서 이제(예:UML)또는 척 당신이 그들을 완전히 찬성 반구조적/문서를 지향 데이터 blob?

  • 당신은 당신의 중요한 추가 서비스는 RDBMSes 을 제공,좋아하는 관계형성,임의로 복잡한 트랜잭션 지원,트리거,etc.?

나가서는 관계형 SQL DB 배경,그래서 정상화입니다.는 말했다,나는 장점을 가져옵의 비-관계형 데이터베이스에 대한 단순하고 확장,내 창자에게 있어 풍부한 겹치의 디자인 기능입니다.당신은 무엇을 했는가?

참고가 있었 유래에 대한 논의 유사한 주제 여기:

도움이 되었습니까?

해결책

비 관계형 DBM이 데이터 모델과 관련하여 크게 다르므로 개념적 데이터 설계도 많이 다를 것이라고 생각해야합니다. 스레드에서 비 관계형 데이터베이스의 데이터 설계NOSQL Google Group 다른 패러다임은 다음과 같이 분류됩니다.

  1. Bigtable-Like Systems (HBase, Hypertable 등)
  2. 키 가치 상점 (도쿄, 볼드 모트 등)
  3. 문서 데이터베이스 (CouchDB, MongoDB 등)
  4. 그래프 데이터베이스 (Allegrograph, Neo4J, 참깨 등)

나는 대부분 안에 있습니다 그래프 데이터베이스, 그리고이 패러다임을 사용한 데이터 디자인의 우아함은 저를 그곳에 데려온 것이 었습니다. RDBMS. 그래프 데이터베이스를 사용하여 데이터 디자인의 몇 가지 예를 넣었습니다. 위키 페이지 그리고 있습니다 모델링 방법의 예 기본 IMDB 영화/배우/역할 데이터도.

프레젠테이션 슬라이드 (SlideShare) 그래프 데이터베이스 및 대규모 지식 관리의 미래 ~에 의해 마르코 로드리게즈 그래프 데이터베이스를 사용하여 데이터 설계에 대한 아주 좋은 소개가 포함되어 있습니다.

GraphDB 관점에서 구체적인 질문에 답 :

대체 디자인 : 걱정없이 다양한 종류의 엔티티 간의 관계를 추가하거나 어떤 엔티티가 연결될 수 있는지 사전 정의 할 필요가 있습니다.

갭 브리징 : "테이블 지향 그래프"등을 원하지 않기 때문에 도메인 자체에 따라 모든 경우에 따라이 작업을 수행하는 경향이 있습니다. 하지만, 여기에 있습니다 RDBMS에서 GraphDB까지 자동 번역에 대한 일부 정보.

명시 적 데이터 모델 : 나는 항상 이것들 (화이트 보드 스타일)을 수행 한 다음 DB에서도 모델을 사용합니다.

RDBMS World의 미스 : 보고서를 작성하는 쉬운 방법. 업데이트 : 아마도 그렇지 않을 수도 있습니다 저것 그래프 데이터베이스에서 보고서를 작성하기가 어렵습니다. NEO4J 샘플 데이터베이스에 대한 보고서 작성.

다른 팁

나만의 시간과 비-관계형 DBs,그리고 나는 여전히려 내고 그 밖으로 최고의 모델이 될 것입니다.그리고 나는 단지 말 CouchDB.

여전히,나는 몇 가지 예비 결론:

당신이 올라와 다른 디자인하는 작업을 훨씬 더 나은 비-관계형 세계?

디자인에 초점을 이동:의 디자인 문서는 모델(에 해당하는 DB 테이블)가 거의 무관하는 동안 모든 경첩에 디자인 전망(에 해당하는 쿼리).

문서 DB 로 일종의 스왑 복잡:SQL 가 데이터 유연성과 유연한 쿼리,문서 DBs 는 다른 방법이다.

이 CouchDB 모델의 모음입니다"JSON 문서"(기본적으로 중첩된 해시 테이블).각 문서에는 고유한 ID 및 수 있습 손쉽게 검색한 ID 입니다.에 대한 다른 어떤 질문,당신이 쓰는"보기",는 이름이트 맵/감소 기능입니다.뷰 결과를 반환으로 설정의 목록을 키/값 쌍으로 이루어져 있습니다.

트릭은 당신이하지 않는 쿼리 데이터베이스에 감각을 쿼리 SQL 데이터베이스:실행 결과의 보기 기능에 저장되는 인덱스 및 인덱스만 조회할 수 있습니다.(로"모든 것을 얻을 수","get"또는"get 키 범위".)

가장 가까운 비유에서 SQL 세계 것입할 수 있는 경우에만 쿼리를 DB 에 저장 프로시저를 사용하여-매 쿼리를 당신이 지원하려는 사전 정의해야 합니다.

의 디자인 문서 엄청난 유연합니다.내가 찾는 단 두 개의 제한:

  • 관련 데이터에 함께 동일한 문서가 있기 때문에 아무 것도 해당 참여합니다.
  • 하지 않는 문서 너무 큰 그들은 너무 자주 업데이트(모든 회사에 대한 판매에서 올해 동일한 문서),이후 모든 문서 업데이트 트리거 re-indexing.

그러나 모든 것에 경첩을 디자인하실 수 있습니다.

대체 디자인을 내가 찾는 작업자 크기와 더 나은 CouchDB 보다 어떤 SQL 데이터베이스 시스템 수준에서 오히려 저장소 수준입니다.만약 당신이 어떤 데이터를 제공하려는 그들을 웹 페이지의 복잡성을 전체 시스템에 의해 감소 50%이상:

  • 아무 디자인 DB 테이블 (사소한 문제점)
  • 아 ODBC/JDBC 중간층은,모든 질의 및 거래 http (보통제)
  • 간단한 DB-개체 매핑에서 JSON,이는 거의 사소한 비교하여 동일한 SQL (중요!)
  • 할 수 있는 잠재적으로 건너 전체 응용 프로그램을 서버로 설계할 수 있습니다 문서 직접 검색하여 브라우저 AJAX 를 사용하여 추가 조금 자바 스크립트의 연마기 전에 그들은 그들로 표시됩니다. (거대하다!!)

를 위해 정상적인 웹 어플리케이션,문서/JSON 기반 DBs 는 거대한 승리하고,단점이 미만의 유연한 쿼리와 몇 가지 추가 코드에 대한 데이터 유효성 검사에 보이는 작은 가격을 지불합니다.

는 당신이 당신의 머리에 아무것도 보이는 불가능한가?

아직하지 않았습니다.맵/을 줄일 수단으로서 데이터베이스 쿼리에 익숙하지 않은,그리고 많이 필요로 더 많은 생각보다 작성 SQL.거기에 상당히 소수의 기본형,그래서 필요한 결과를 받고 주로 질문을 창조적으로 어떻게 지정한다.

에는 제한이 있는 쿼리에서 볼 수 없을 두 개 이상의 문서에서 동일한 시간에 참여하거나 다른 종류의 멀티-문서 관계,아무것도하지만 지금까지되었다고 믿습니다!

예를 들어 같은 제한,계산 및 총액은 쉽지만 평균 계산할 수 없으로 CouchDB 보기/쿼리가 있습니다.수정:익 합계 계산이 별도로 계산한 평균에 클라이언트입니다.

당신은 브리지 간격으로 어떤 디자인 패턴을,예를 들어,번역에서 다른 하나?

나는 확실하지 않다는 것의 가능합니다.그것은 완료,재 설계를 번역하고자 하는 기능적인 스타일을 프로그램 개체 지향적인 스타일입니다.일반적으로,거기에 훨씬 적은 문서의 형식보다는 SQL 테이블 및에서 더 많은 데이터를 각각의 문서입니다.

방법 중 하나는 생각에서 보는 것입니다 당신의 SQL 을 위해 인서트와 일반적인 검색:는 테이블과 열 업데이트되는 경우 고객이 주문,예를 들면?고있는 사람을 위해 월간 판매 보고서?는 정보해야에서 같은 문서입니다.

는:한 문서를 위한 순서를 포함하는,고객의 ID 및 제품 Id,복제된 필드를 필요에 따라 단순화하는 쿼리를 처리합니다.아무것도 내의 문서를 쿼리할 수 있게 아무것도 요구하는 상호 참조는 순서와 고객에 의해 수행되어야의 클라이언트입니다.그래서 만약 당신이 원하는 보고서에서 지역별 매출액,당신은 아마 지역 코드 순서로.

당신은 심지어 명시적인 데이터 모델 모두에서 이제(예:UML)?

죄송하지 않았다 훨씬 UML 기 전에 문서 DBs:중)

하지만 당신은 어떤 종류를 필요로 하는 모델의 말이 어떤 분야에 속하는 문서 어떤 종류의 값 그들이 포함되어 있습니다.모두 자신의 기준에 대한 후에 확인하는 것이 everybod 를 사용하여 DB 알고 있습니다.없기 때문에 오류가 발생을 저장하는 경우에는 날짜를 텍스트 필드,예를 들어,누군가를 추가하거나 제거할 수 있습니다 어떤 분야 그들이 느끼처럼,모두 필요합니증 코드 및 규칙을 선택하 여유가 있습니다.특히 일하면 외부 리소스입니다.

당신은 당신의 중요한 추가 서비스는 RDBMSes 을 제공합니까?

Nope.하지만 내 바탕이 웹 애플리케이션 개발자,우리가 다루는 데이터베이스의 범위 내에서만 우리가 해야 합니다:)

회사는 내가 작업하는 데 사용한 제품을 만들었(웹 애플리케이션)가 실행되도록 설계에서 SQL 데이터베이스에서는 여러 공급업체 및"서비스"그래서 다른 DB 에서 DB 그들이 구현에 대해 별도로 각 DB.그래서 그것은 적은 작업에 대한 우리를 이동하는 기능을 RDBMS.이 경우에도 확장하는 전체 텍스트 검색합니다.

그래서 어떤 내가 주는 무언가가 나는지에서 첫 번째 장소입니다.분명히 당신의 경험을 달라질 수 있습니다.


경고:어떤 나는 지금은 웹 애플리케이션에 대한 재무 데이터,주가 지수와 같습니다.이것은 매우 좋은 일치에 대한 문서 DB,나의 관점에서 나는 모든 혜택을 얻을 수의 DB(지속성 및 쿼리)의없이 진행됩니다.

하지만 이러한 데이터를 상당히 서로 독립적이 없는 복잡한 관계 검색어입니다.는 최신의 시세에 의해 시세,따옴표를 얻으세 날짜와 범위,회사의 메타 정보,이는 거의 모든 it.또 다른 예에서 나는 보았던 블로그는 응용 프로그램,블로그하지 않은 것이 특징에 의해 대규모의 복잡한 데이터베이스에 스키마 중 하나.

내가 무슨 말을 하려는 성공적인 응용 프로그램의 문서 DBs 내가 알고 있었으로는 데이터 없었 상호 관계에 첫 번째 장소:문서(으로 Google 검색에서),블로그 글 뉴스 기사는 금융 데이터입니다.

저는 있는 데이터 집합 지도 더 나은 SQL 이 문서에 모형,그래서 내가 상상하는 SQL 살아남을 것입니다.

하지만 우리는 그냥 간단한 방법으로 데이터를 저장하고 검색-고 생각이 있다는 것은 우리의 많은-문서 데이터베이스에서는(CouchDB)은 신의 선물이다.

나는 내 마음의 뒤에 couchDB로 이것에 대답하고 있지만, 다른 DBS에게도 가장 사실이라고 생각합니다. 우리는 CouchDB를 사용하는 것을 살펴 보았지만 데이터 액세스가 미리 알려지지 않았고 확장 성이 문제가되지 않기 때문에 마침내 결정했습니다.

더 힘들다 :

  • 개념적 수준에서 다시 생각하여 다르기 때문에 '어려워요'. 데이터 액세스 패턴을 미리 알아야하므로 자동 변환을 적용 할 수 없습니다. 적어도 액세스 패턴을 추가해야합니다.
  • 일관성은 데이터베이스에 의해 처리되지 않지만 응용 프로그램에서 처리해야합니다. 보증이 적 으면 더 복잡한 응용 프로그램 비용으로 마이그레이션, 장애가없고 확장 성이 향상됩니다. 응용 프로그램은 갈등과 불일치를 다루어야합니다.
  • 문서 (또는 키/값)를 교차 응용 프로그램 수준에서 처리 해야하는 링크.
  • SQL 유형의 데이터베이스에는 훨씬 더 성숙한 IDE가 있습니다. 많은 지원 라이브러리를 얻을 수 있습니다 (해당 라이브러리의 레이어링은 SQL에 필요한 것보다 훨씬 더 복잡해 지지만).

더 쉬운 :

  • 데이터 액세스 패턴을 알고 있다면 더 빠릅니다.
  • 응용 프로그램 프로그래머로서 약속을하지 않기 때문에 데이터베이스의 마이그레이션 / 실패는 더 쉽습니다. 최종 일관성을 얻지 만. 아마. 드디어. 얼마간.
  • 하나의 키 / 값은 테이블에서 한 줄보다 이해하기가 훨씬 쉽습니다. 모든 (트리) 관계는 이미 있으며 완전한 객체를 인식 할 수 있습니다.

모델링은 거의 동일해야하지만 한 문서에 넣은 내용에주의해야합니다. UML은 OO 모델링과 DB 모델링에도 이미 두 개의 다른 짐승 인 DB 모델링에도 사용될 수 있습니다.

C# / Silverlight와 잘 통합 된 좋은 Open OO 데이터베이스를보고 싶었습니다. 선택을 더욱 어렵게 만들기 위해. :)

플랫 파일은 오랫동안 모든 크기의 데이터 세트에 대해 비전과 비현실적인 것으로 간주되었습니다. 그러나 더 많은 메모리가있는 더 빠른 컴퓨터를 사용하면 파일을 메모리에로드하여 적어도 합리적으로 작은 N 및 로컬 단일 사용자 애플리케이션에 대해 실시간으로 정렬 할 수 있습니다.

예를 들어, 일반적으로 10,000 개의 레코드 파일을 읽고 반 초 이내에 필드에 정렬 할 수 있습니다.

물론, 연락 파일 대신 데이터베이스를 사용해야하는 이유가 있습니다-관계형 작업, 데이터 무결성, 멀티 우스저 기능, 원격 액수, 대용량, 표준화 등이 있지만 컴퓨터 속도와 메모리 용량이 증가했습니다. 경우에 따라 더 실용적인 데이터.

실생활에서 볼 수있는 관계형 데이터베이스는 귀하의 주장과 반대로 전혀 정규화되지 않는 경향이 있습니다. 물어 보면 디자이너들은 주로 성능 때문이라고 말합니다. RDBM은 결합에 능숙하지 않으므로 테이블은 정규화 관점에서 너무 넓은 경향이 있습니다. 객체 지향 데이터베이스는 이것에 훨씬 더 나은 경향이 있습니다.

RDBMS에 문제가있는 또 다른 지점은 기록/시간 의존적 키를 처리하는 것입니다.

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