Как структурировать мой документ и записи timeseries mongodb - PullRequest
0 голосов
/ 10 июля 2020

Я буду хранить некоторые данные OHLCV (открытие, максимум, минимум, закрытие, объем) для группы цифровых активов внутри базы данных MongoDB.

Это свойства каждой записи, которая будет go в базу данных:

Сначала будет 5 таймфреймов.

  • 5 м для данных, которые увеличиваются каждые 5 минут.
  • 15 м для данных, которые увеличивается каждые 15 минут.
  • '1h' для данных, которые увеличиваются каждые 1 час.
  • '4h' для данных, которые увеличиваются каждые 4 часа.
  • '1d 'для данных, которые увеличиваются каждый день.

Для этого я подумал, что было бы неплохо поместить каждую из этих записей в отдельные коллекции, поэтому у меня есть 5 коллекций: myassetdb.5m , myassetdb.15m, myassetdb.1h, myassetdb.4h, myassetdb.1d

Это хорошая идея?

Тогда каждая запись документа оформляется следующим образом:

{
    "_id": {
        "$oid": "5f084269ef9c1e67f3bc8671"
    },
    "asset": "BTC/EUR",
    "timeframe": "5m",
    "stream": {
        "timestamp": {
            "$timestamp": {
                "t": 1,
                "i": 1594377598
            }
        },
        "open": {
            "$numberDecimal": "8417.5"
        },
        "high": {
            "$numberDecimal": "8418.5"
        },
        "low": {
            "$numberDecimal": "8401.2"
        },
        "close": {
            "$numberDecimal": "8411.5"
        },
        "volume": {
            "$numberDecimal": "14.69836761"
        }
    },
    "date": {
        "$date": "2020-07-10T10:39:58+00:00"
    }
}

Здесь важны asset name, timeframe и stream. Важно, чтобы позже я мог продолжать добавлять записи с самыми последними данными в зависимости от времени. И в целом это будет структура, похожая на процесс в формате CSV. Там, где все выглядит так:

timestamp,open,high,low,close,volume,pair,timeframe
1592479800,8407.6,8409,8407.6,8409,9.07373197,BTC/EUR,5m
1592480100,8409,8411.3,8408.7,8410.3,7.2545515,BTC/EUR,5m
1592480400,8410.4,8410.4,8403.2,8405.9,12.64222715,BTC/EUR,5m
1592480700,8405.9,8406,8394.2,8403.1,7.87145576,BTC/EUR,5m

Так что я могу добавлять новые записи как потоки данных

timestamp,open,high,low,close,volume,pair,timeframe
1592479200,8417.5,8418.5,8401.2,8411.5,14.69836761,BTC/EUR,5m
1592479500,8411.5,8411.7,8407.6,8407.6,3.79545517,BTC/EUR,5m
(new data above this line)..................................
1592479800,8407.6,8409,8407.6,8409,9.07373197,BTC/EUR,5m
1592480100,8409,8411.3,8408.7,8410.3,7.2545515,BTC/EUR,5m
1592480400,8410.4,8410.4,8403.2,8405.9,12.64222715,BTC/EUR,5m
1592480700,8405.9,8406,8394.2,8403.1,7.87145576,BTC/EUR,5m

Не поймите меня неправильно, я включил здесь пример CSV, чтобы продемонстрировать мои данные нужны. Мне просто нужно иметь доступ и обновлять на основе date, asset и timeframe

Подходит ли моя структура данных для такого рабочего процесса БД? Все это выглядит как на изображении ниже.

enter image description here

Just for clarification, I'm adding this section. Do I need some kind of nesting, or is it ok for the data to be flat, as for example in the image below:

введите описание изображения здесь

...