这个问题不一定是Couchbase 2.0开发特定于预览版的,但是我认为它可以帮助人们研究新的Couchbase产品。
我正在寻找有关数据建模的建议。我们正在研究Couchbase,以期可能将其用于实时分析。
但是,我找不到任何有关如何最好地模拟现实世界数据的文档。
我将提出一个方案,如果社区可以帮助我或讨论一些有关如何建模的想法,这将非常有用吗?
请注意,这并不代表我们的产品,我并不是在要求人们为我们解决建模问题,这个问题更适合用于讨论
假设客户在特定的日期/时间购买了产品,产品具有诸如ID,名称,描述和价格之类的信息,并且购买是在某个日期进行的。
最初的要求是能够计算两个日期之间的所有购买。对于任何一天,可能有超过100,000笔购买-这是一笔相当大的生意;)
如果任何语法不正确,请通知我-欢迎提供所有建议/帮助。
如果我们像这样对数据建模(可能完全不正确):
购买产品
{
"_id" : "purchase_1",
"_rev" : "1-1212afdd126126128ae",
"products" : [
"prod_1" : {
"name" : "Milk",
"desc" : "Semi-skimmed 1ltr",
"price" : "0.89"
},
"prod_7568" : {
"name" : "Crisps",
"desc" : "Salt and Vinegar",
"price: "0.85"
}
]
"date" : "2012-01-14 14:24:33"
}
{
"_id" : "purchase_2",
"_rev" : "1-1212afdd126126128ae",
"products" : [
"prod_89001" : {
"name" : "Bread",
"desc" : "White thick sliced",
"price: "1.20"
}
]
"date" : "2012-01-14 15:35:59"
}
因此,考虑到该文档的布局,我们可以看到每个购买,也可以看到该购买中的产品-但是,我们如何计算两个日期之间的所有购买呢?另外,您如何查看两个日期之间降序排列的所有购买的日志?
这是Couchbase适合的东西吗?
在两个日期之间可能有成千上万的购买,并且客户不喜欢等待报告…。因为我敢肯定,每个人都经历过;)
最好使用incr函数,如果是这样,您将如何对数据建模?
非常感谢所有读过此书的人-我希望在可能的情况下进一步举例说明真实世界中的建模问题。
詹姆士
最佳答案
在最简单的情况下,您可以编写一个Map函数,该函数将使用日期字段作为键来创建 View 。
因此,使用略微修改的文档设计:
{
"_id": "purchase_1",
"_rev": "2-c09e24efaffd446c6ee8ed6a6e2b4a22",
"products": [
{
"id": "prod_3",
"name": "Bread",
"desc": "Whole wheat high fiber",
"price": 2.99
}
],
"date": "2012-01-15 12:34:56"
}
{
"_id": "purchase_2",
"_rev": "2-3a7f4e4e5907d2163d6684f97c45a715",
"products": [
{
"id": "prod_1",
"name": "Milk",
"desc": "Semi-skimmed 1ltr",
"price": 0.89
},
{
"id": "prod_7568",
"name": "Crisps",
"desc": "Salt and Vinegar",
"price": 0.85
}
],
"date": "2012-01-14 14:24:33"
}
您的 map 函数如下所示:
function(doc) {
for (var product in doc.products) {
emit(doc.date, doc.products[product].price);
}
}
您可以选择添加一个reduce函数,该函数可以按日期汇总购买。
function(keys, values) {
return sum(values);
}
然后,您可以使用startkey和endkey参数查询 View 。
http://localhost:5984/couchbase/_design/Products/_view/total_price_by_date?startkey="2012-01-01"&endkey="2012-01-31"&group=true
查询 View 的输出将是:
{"rows":[
{"key":"2012-01-14 14:24:33","value":4.94},
{"key":"2012-01-15 12:34:56","value":2.99}
]}
或删除组参数以获取整个日期范围内的总和:
{"rows":[
{"key":null,"value":7.930000000000001}
]}
希望能有所帮助。
- 约翰
关于nosql - Couchbase数据建模-面向文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8863862/