建模Azure Cosmos DB

我正计划为自己的目的从CoinMarketCap API保存记录。 我想每隔15分钟将价格信息保存在前100个加密硬币上,我想将它保存在Azure Cosmos数据库中。建模Azure Cosmos DB

由于im新的文档db的整个概念,我需要一些建模文档的帮助。

首先我从这个模型开始。

[ 

{

"id": "bitcoin",

"name": "Bitcoin",

"symbol": "BTC",

"rank": "1",

"price_usd": "573.137",

"price_btc": "1.0",

"24h_volume_usd": "72855700.0",

"market_cap_usd": "9080883500.0",

"available_supply": "15844176.0",

"total_supply": "15844176.0",

"percent_change_1h": "0.04",

"percent_change_24h": "-0.3",

"percent_change_7d": "-0.57",

"last_updated": "1472762067"

},

{

"id": "ethereum",

"name": "Ethereum",

"symbol": "ETH",

"rank": "2",

"price_usd": "12.1844",

"price_btc": "0.021262",

"24h_volume_usd": "24085900.0",

"market_cap_usd": "1018098455.0",

"available_supply": "83557537.0",

"total_supply": "83557537.0",

"percent_change_1h": "-0.58",

"percent_change_24h": "6.34",

"percent_change_7d": "8.59",

"last_updated": "1472762062"

},

...

]

但是,由于每次我写入数据库时​​id都没有变化,记录只是更新了,而没有汇总。我想这是预期的。

因此,为了确保记录汇总,我重写了这个模型。

[ 

{

"id": <timestamp>_bitcoin

"identifier": "bitcoin",

"name": "Bitcoin",

"symbol": "BTC",

"rank": "1",

"price_usd": "573.137",

"price_btc": "1.0",

"24h_volume_usd": "72855700.0",

"market_cap_usd": "9080883500.0",

"available_supply": "15844176.0",

"total_supply": "15844176.0",

"percent_change_1h": "0.04",

"percent_change_24h": "-0.3",

"percent_change_7d": "-0.57",

"last_updated": "1472762067"

},

{

"id": <timestamp>_ethereum

"identifier": "ethereum",

"name": "Ethereum",

"symbol": "ETH",

"rank": "2",

"price_usd": "12.1844",

"price_btc": "0.021262",

"24h_volume_usd": "24085900.0",

"market_cap_usd": "1018098455.0",

"available_supply": "83557537.0",

"total_supply": "83557537.0",

"percent_change_1h": "-0.58",

"percent_change_24h": "6.34",

"percent_change_7d": "8.59",

"last_updated": "1472762062"

},

...

]

在这里,我以使其独特添加了一个单独的id带有时间戳和参考旧ID。

这是行得通的,但我认为这是一些重复的数据(如名称和符号),我认为这看起来不好,有双重。但也许这就是它在文档db世界中的方式?

我也想过这样的模型。

[ 

{

"id": <timestamp>_bitcoin

"identifier": "bitcoin",

"name": "Bitcoin",

"symbol": "BTC",

"rank": "1",

"price_history": [{

"price_usd": "573.137",

"price_btc": "1.0",

"24h_volume_usd": "72855700.0",

"market_cap_usd": "9080883500.0",

"available_supply": "15844176.0",

"total_supply": "15844176.0",

"percent_change_1h": "0.04",

"percent_change_24h": "-0.3",

"percent_change_7d": "-0.57",

"last_updated": "1472762067"

]}

},

{

"id": <timestamp>_ethereum

"identifier": "ethereum",

"name": "Ethereum",

"symbol": "ETH",

"rank": "2",

"price_history": [{

"price_usd": "12.1844",

"price_btc": "0.021262",

"24h_volume_usd": "24085900.0",

"market_cap_usd": "1018098455.0",

"available_supply": "83557537.0",

"total_supply": "83557537.0",

"percent_change_1h": "-0.58",

"percent_change_24h": "6.34",

"percent_change_7d": "8.59",

"last_updated": "1472762062"

]}

},

...

]

但由于没有选择新的记录添加到price_history无需重写整个文件,这不会是一个好主意。此外,由于price_history中的记录数量将无限制地增长,因此该文档将变得非常庞大且难以处理。

接下来我想分解成单独的文件,但不知道如果这是要走的路。所以我现在有点迷路了。

有什么建议吗?

回答:

这里的事实部分:

  1. 具有每加密硬币单一的文件,在15个分钟的间隔在文档中嵌入定价信息是不可行的。 Cosmos DB具有2MB的文档大小限制。如果你追求嵌入策略,你将冲破这个大小限制。另外,你说得对,更大的文件更难以处理,并且会招致更高的RU费用。

  2. 在NoSQL中,一般来说,数据的重复不一定是主要的罪。您需要考虑如何检索数据以及您需要使用哪些信息。这一点尤其重要,因为关系数据库中不存在关系连接。

现在的完全意见部分:

  • 考虑包含关于每个需要跟踪的硬币一般信息的加密文件的硬币。你甚至可能不需要这个文件。

  • 将时间序列数据存储为单独的文档。由于前面提到的文档大小限制,您实际上必须采用这种方式,并且时间戳读数的数量没有上限。

  • 对于存储为每个时间戳一部分的1小时,24小时和7天回溯聚合,您可以使用聚合函数进行查询,并在每次编写新条目时设置每个时间戳的这些属性。鉴于您只存储100种不同的加密货币,并且您的时间戳每15分钟一次,这是可行的。

There's a great video第9频道由Ryan CrawCour和大卫Makogon,随着宇宙DB建模数据,我得到解决此我的头的时候发现非常有帮助的交易。

回答:

这里是一个很好的文章总结了数据建模的最佳实践在非关系世界https://docs.microsoft.com/en-us/azure/cosmos-db/modeling-data

HTH

以上是 建模Azure Cosmos DB 的全部内容, 来源链接: utcz.com/qa/266472.html

回到顶部