database - 如何构建我的时间序列 mongodb 文档和条目
问题描述
我将在 MongoDB 数据库中存储一些数字资产的 OHLCV(开盘、高盘、低盘、收盘、成交量)数据。
这些是将进入数据库的每个条目的属性:
首先,将有 5 个时间范围。
- '5m' 表示每 5 分钟递增的数据。
- '15m' 表示每 15 分钟递增的数据。
- '1h' 表示每 1 小时递增的数据。
- '4h' 表示每 4 小时递增的数据。
- '1d' 表示每 1 天递增的数据。
为此,我认为将这些记录中的每一个放在单独的集合中是个好主意,所以我有 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
thetimeframe
和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
, theasset
和 the访问和更新timeframe
我的数据结构适合这种数据库工作流程吗?整个事情看起来像下面的图片。
只是为了澄清,我添加了这一部分。我是否需要某种嵌套,或者数据是否平坦,如下图所示:
解决方案
推荐阅读
- python - 在python中进行线程处理时的面向对象比较的问题
- angularjs - Angular 指令无法解决承诺
- r - ggplot2中的5个值unicode字符
- app-store - 我的应用程序被拒绝..我如何上传新的二进制文件(IOS)
- javascript - svgelement.enter() 上未发生 D3 转换
- android - 动态设置工作请求顺序
- google-api - 使用测试经理帐户将第三方应用分析链接到 Google Ads 时,未从测试客户帐户获取 Google Ad 字词链接 ID
- javascript - Axios 在嵌套的 Vue JS (Laravel API) 中返回 undefined
- php - 我该如何解决这个错误(Laravel 5.7)?
- javascript - 将 AM/PM 字符串转换为小时