2017-10-28 6 views
0

monogo의 DB에 참여 주 기계, 나는 지난 10 분 동안 어떤 기계가 핑을 보냈는지 알아야합니다. 각 시스템은 10 분마다에 대해 핑을 보내, 매우 큰 컬렉션 -MongoDB의 스키마 디자인/I는 SQL의 강력한 배경으로 MongoDB를 새로운 해요 다음과 같은 시나리오를 설계 할 수있는 이상적인 방법이 무엇인지 알 수

  1. pings :

    나는이 명 컬렉션을 가지고있다.
  2. machines - 나는 "살아"기계를 조회 할 필요 덜 1000 기계

및, 마지막 10 분 핑을 전송 즉 모든 기계에 대한 아주 작은 컬렉션입니다. MongoDB의에서

pings = { 
    _id  - ObjectID 
    machineID - ObjectID 
    pingTime - ISODate 
} 

machines = { 
    _id  - ObjectID 
    name  - String 
    type  - string 
} 

답변

1

데이터 모델링 SQL과는 다르게 작동합니다 같은

현재 내 스키마 보인다. SQL을 사용하면 엔티티, 속성 및 관계를 식별 한 다음 머리를 벽에 부딪혀 JOIN이 유스 케이스에서 발생하는 질문에 올바르게 대답 할 수 있습니다.

다른되는 NoSQL 데이터베이스 범위 – 변화와 MongoDB를 가진

및 –는, 데이터 모델링은 다르게 작동합니다 : 당신은 당신의 사용 사례 처음에서 발생하는 문제를 식별하고 데이터를 모델링 따라 그렇게 질문에 대한 답변이 얻을 수있는 있음 가장 효율적인 방법으로

기계 목록을보고 기계 세부 정보를 얻으려는 개별 기계를 클릭하는 웹 응용 프로그램이 있다고 가정합니다. 그래서 우리는 우리가 검사하기를 원하는 기계를 가지고 있습니다. 이것은 들릴지도 모르겠지만 여기서도 중요합니다. 목록을 가정하면 당신의 machines 모델에서 생성됩니다, 당신은 이미 기계의 세부 사항을 생성하기 위해 손에 모든 정보를 볼 수 :

당신이 설명 된 사용 사례를 들어
db.pings.find({machineID:givenmachine["_id"]}) 

, 내가 ping 데이터 모델을 약간 수정 한 것입니다 :

{ 
    _id: new ObjectID(), 
    machine: "host.example.com", 
    pingTime: new ISODate() 
} 

이유 : 중복성이있는 대중적 신념과는 달리 나쁜 것은 본질적으로 나쁘지 않습니다. 불특정 다수 중복입니다. 이 훨씬 더 효율적인 쿼리하게하지만 사용 사례, 그것은 유효성을 검사 :

t = new Date() 
t.setMinutes(t.getMinutes() - 10); 
db.pings.distinct("machine",{pingTime:{$gte:t}}) 

이 pingTime에 인덱스가를, 그것은 번개 빠른 것, 단 하나 명의 컬렉션을 포함했다. 그리고 기계 이름을 변경했다하더라도, 이는 해당 기계의 가동 상태 (?)를 확인하는 것과 비교하면 다소 드문 유스 케이스 여야합니다.

+0

감사합니다. 이중화 (mongo에 포함되어 있지 않습니까?)에 대해 생각했지만 컴퓨터에 대한 여러 가지 속성이 필요한 경우 어떻게해야합니까? 그래서 큰 핑 문서로 끝날 것입니다 ... 몽고가 나의 유스 케이스에 맞는지, 아니면 RDBMS에 있어야하는지 모르겠습니다 ... – Michael

+1

@Michael 따라서 모든 질문을 곧바로 받아야합니다 * 처음 * , 모델링하기 전에. 그러나 다시 : 당신은 ping을 보낸 호스트에 대한 효율적인 질의를 할 수 있습니다. 이제 제한된 하위 집합에 대해 db.machines.find ({name : {$ in : resultset}})'할 수 있습니다.더 좋은 점은, 세부 정보 페이지를 원한다면, db.machines.find ({name : nameOfMachineYouWantTheDetailsFor})와 같은 간단한 쿼리 만하면됩니다. –

+0

흠 ... 당신이 말하는 것을 이해합니다. SQL에서 모든 정규화가 끝난 후에 그렇게 생각하는 것이 조금 이상합니다 ... SQL에서 mongo 로의 "마이그레이션"튜토리얼을 알고 있습니까? 어쩌면 SQL로 구현되는 시나리오와 Mongo에서 구현되는 시나리오가있을 것입니다. – Michael