由於多種原因,目前我正在考慮轉移到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:鏈接的單元格可能工作,謝謝!但我想沒有辦法在數據庫中進行「連接」,以便將值插入到文檔中,對嗎?即需要在客戶端應用程序中執行此操作... –