由于多种原因,目前我正在考虑转移到NoSQL DB来存储/管理一组“记分卡”。由于记分卡是一张简单的表格,其中包含针对指标/指标的区域和列的行。至于一个月简单的记分卡的文件看起来是这样的:NoSQL数据库中文档之间的交叉链接/更新
{
"month": 1,
"headers": ["Region", "# of page views", "# of unique visitors"],
"data": [
["Region 1", {"value": 1000, "previousValue": 800, "arrow": "up" }, {"value": 100, "previousValue": 110, "arrow": "down"}],
["Region 2", {"value": 500, "previousValue": 600, "arrow": "down" }, {"value": 10, "previousValue": 11, "arrow": "down"}]
]
}
造成这种渲染表:
| Region | # of page views | # of unique visitors |
|----------|-----------------|----------------------|
| Region 1 | 1000 (↑) | 100 (↓) |
| Region 2 | 500 (↓) | 10 (↓) |
每个月
,新的记分卡将被上传,即一个新的文件被创建。该记分卡可能具有不同的结构,例如,
{
"month": 2,
"headers": ["Region", "# of page views", "# of comments"],
"data": [
["Region 1", {"value": 1100, "previousValue": 1000, "arrow": "up"}, {"value": 5, "previousValue": null, "arrow": null}],
["Region 3", {"value": 1500, "previousValue": null, "arrow": null},{"value": 1, "previousValue": null, "arrow": null}]
]
}
导致
| Region | # of page views | # of comments |
|----------|-----------------|---------------|
| Region 1 | 1100 (↑) | 5 (-) |
| Region 3 | 1500 (-) | 1 (-) |
当我现在接收的更新月1记分卡,我也需要更新previousValue
(以及arrow
)在第2个月记分卡属性。鉴于结构可能已经改变,我怎样才能最有效地做这个更新?我怎样才能“连接”细胞?
在RDBMS中,我将标准化另一个表中的值并链接valueIds。然而,因为任何记分卡都可能有很多值,所以我认为将valueIds存储在记分卡文档中并在第二步中检索所有值实际上是效率低下的!
我还没决定使用NoSQL DB提供程序。目前最喜欢的是CouchDb,但也可以是MongoDB或DocumentDB。后端在ASP.NET WebAPI中实现。
我不能看到这一点对于具有'previousValue'。可以通过选择前一个月并计算应用程序来完成数据库。在连接的“细胞”,这可能是有益的:http://docs.ehealthafrica.org/couchdb-best-practices/#linked-documents总体思路可以使用被查询之前“已知” _id的,像'_id:“统计数据 - 每月的-2015-03''。 – h4cc
@JuliusBeckmann:链接的单元格可能工作,谢谢!但我想没有办法在数据库中进行“连接”,以便将值插入到文档中,对吗?即需要在客户端应用程序中执行此操作... –