복붙노트

[MONGODB] 시계열 데이터베이스로 MongoDB를

MONGODB

시계열 데이터베이스로 MongoDB를

나는 시계열 데이터베이스 MongoDB를 사용하려고하고있어 사람이 그 시나리오를 설정하는 방법을 가장 추천 수 있는지 궁금 해서요.

시계열 데이터는 주가의 역사와 매우 유사합니다. 나는 다른 컴퓨터에서 가져온 다양한 센서로부터 데이터의 수집이있다. 이 타임 스탬프 억 개의의 값은 내가 (바람직하게는 데이터베이스에서 오히려 응용 프로그램 수준보다) 다음과 같은 질문을하고 싶습니다 :

최적의 설정이 위로가 쿼리를 달성하는 방법에 대한 추천?

제안을 주셔서 감사합니다.

해결법

  1. ==============================

    1.당신이 이제까지의 데이터를 보관할 필요가없는 경우는 '덮인 모음'을 고려할 수 있습니다 (예. 당신은 '밖으로 노화'괜찮다). 그들은 당신이 아주 잘 원하는 맞는처럼 덮인 컬렉션을 차례로하는 소리가 몇 가지 흥미로운 혜택을 제공하는 제한의 번호를 가지고있다.

    당신이 이제까지의 데이터를 보관할 필요가없는 경우는 '덮인 모음'을 고려할 수 있습니다 (예. 당신은 '밖으로 노화'괜찮다). 그들은 당신이 아주 잘 원하는 맞는처럼 덮인 컬렉션을 차례로하는 소리가 몇 가지 흥미로운 혜택을 제공하는 제한의 번호를 가지고있다.

    기본적으로, 캡핑 컬렉션 지정된 크기를 가지고, 그것을하는 것이 랩 어라운드 및 최신의 가장 오래된 문서 시작 덮어 가리 채워질 때까지 서류 신청서에 기록된다. 당신은 약간 당신이 덮인 컬렉션의 문서에서 수행 할 수있는 업데이트 것에 제한된다 - 즉. (이는 여분의 공간을 찾기 위해 디스크에 이동해야 의미로)는 문서의 크기를 변경합니다 업데이 트를 수행 할 수 없습니다. 나는 이것이 당신이 설명하는 것에 대해 문제가되는 볼 수 없습니다.

    결론적으로는, 매우 빠른 삽입 순서에 질의를하게 삽입 순서에 디스크를 당신 덮인 컬렉션의 데이터가 기록됩니다 보장하고 있으며,에있을 것입니다.

    그런데 센서와 그들이 생산 데이터는 어떻게 다른가? 그렇지 않으면 그들을 분할 - 그들은 상대적으로 유사한 경우 I는 사용의 용이성에 대해 동일한 컬렉션 그들 모두를 저장하는 건의 할 것입니다.

    당신은 하나의 모음을 사용하여 가정, 두 쿼리는 매우 드리겠습니다 소리. 마음에 곰에 대한 한 점은 너무 빨리로하지 않을 것이다 당신의 타임 스탬프 키를 쿼리, 당신은 컬렉션 '자연'순서에 따라 쿼리해야 할 것 덮인 수집의 혜택을 얻을 수있을 것이다. (주어진 시간 간격에주의 얼마나 많은 그들의 알 수 있도록) 수치가 일정한 간격으로 촬영하는 경우 I 쿼리 1의 다음과 같은 것을 제안 :

    db.myCollection.find().limit(100000).sort({ $natural : -1 })
    

    100 개 판독 번째를 저장하는 것이, 예를 들어, 가정, 위의 데이터 지난 100 초 가치를 반환합니다. 이전 백초을 원하는 경우에 당신은 (100000)를 .skip 추가 할 수 있습니다.

    두 번째 쿼리를 들어, 맵리 듀스가 필요합니다처럼 나에게 소리를하지만, 특히 어려운 소리하지 않습니다. 그런 다음, 위의 것과 유사한 쿼리에 관심이 문서의 범위를 선택하면지도 기능에 관심이있는 간격으로 만 사람을 선택할 수 있습니다.

    여기에 덮인 컬렉션에 몽고 오피스의 : http://www.mongodb.org/display/DOCS/Capped+Collections

    희망이 도움이!

  2. ==============================

    2.분명히 이것은 오래된 질문이다,하지만 난 시계열 데이터를 MongoDB를 연구 할 때 나는 그것을 가로 질러왔다. 나는 새로운 삽입 작업에 반대는, 가치 업데이트 작업을 사전에 전체 문서를 할당하고 수행하기 위해 다음과 같은 접근 방식을 공유 할 수 있습니다 생각했다. 참고이 방법은 여기와 여기 기록했다.

    분명히 이것은 오래된 질문이다,하지만 난 시계열 데이터를 MongoDB를 연구 할 때 나는 그것을 가로 질러왔다. 나는 새로운 삽입 작업에 반대는, 가치 업데이트 작업을 사전에 전체 문서를 할당하고 수행하기 위해 다음과 같은 접근 방식을 공유 할 수 있습니다 생각했다. 참고이 방법은 여기와 여기 기록했다.

    당신이 매 분마다 데이터를 저장하는 상상해보십시오. 다음과 같은 문서 구조를 고려 :

    {
      timestamp: ISODate("2013-10-10T23:06:37.000Z"),
      type: ”spot_EURUSD”,
      value: 1.2345
    },
    {
      timestamp: ISODate("2013-10-10T23:06:38.000Z"),
      type: ”spot_EURUSD”,
      value: 1.2346
    }
    

    이 표준 관계형 접근 방식 비교입니다. 이 경우 삽입 작업의 많은 원인이 기록 된 값 당 하나의 문서를 생산하고 있습니다. 우리는 더 잘 할 수 있습니다. 다음을 고려하세요:

    {
      timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
      type: “spot_EURUSD”,
      values: {
        0: 1.2345,
        …  
        37: 1.2346,
        38: 1.2347,
        … 
        59: 1.2343
      }
    }
    

    이제, 우리는 하나의 문서를 작성하고 59 업데이트를 수행 할 수 있습니다. 이 업데이트는 원자, 개별 쓰기가 작기 때문에 훨씬 더, 및 기타 성능과 동시성 이점이있다. 그러나 우리는 하나 개의 문서에서 전체 하루를 저장하고, 단지 전체 시간 싶었던합니다. 이것은 다음 마지막 값을 얻기 위해 1440 개 항목을 따라 걷는 우리를 필요로한다. 이를 개선하기 위해, 우리는 다음에 더 확장 할 수 있습니다 :

    {
      timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
      type: “spot_EURUSD”,
      values: {
        0: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
        1: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
        …,
        22: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
        23: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343}
      }
    }
    

    이 중첩 된 접근 방식을 사용하여, 우리는 이제 하루에 맨 마지막 값을 얻기 위해, 최대, + 60 (24)을 걸어야한다.

    우리가 채워진 패딩 사전에 모든 값을 가진 문서를 빌드하는 경우, 우리는 확인 문서가 이동되지 않습니다 때문에 크기를 변경하지 않을 수 있습니다.

  3. from https://stackoverflow.com/questions/7368759/mongodb-as-a-time-series-database by cc-by-sa and MIT license