nosql – Couchbase数据建模 – 面向文档

前端之家收集整理的这篇文章主要介绍了nosql – Couchbase数据建模 – 面向文档前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题不一定是Couchbase 2.0开发预览特定的,但我认为它可能有助于人们调查新的Couchbase产品.

我正在寻找有关数据建模的建议.我们正在调查Couchbase,以便将其用于实时分析.

但是,我找不到任何关于如何最好地模拟现实世界数据的文档.

我将提出一个场景,如果社区可以帮助我或讨论如何建模的一些想法,那将非常有用吗?

请注意,这不代表我们的产品,我不是要求人们为我们解决我们的建模问题更倾向于讨论

让我们假设客户在特定日期/时间购买产品,产品有信息,如ID,名称,描述和价格,购买是在日期进行的.

最初的要求是能够计算两个日期之间的所有购买.任何1天的购买量可能超过10万 – 这是一项非常大的业务;)

如果任何语法不正确请告诉我 – 欢迎所有建议/帮助.

如果我们将数据建模为类似的东西(可能完全不正确):

购买产品

  1. {
  2. "_id" : "purchase_1","_rev" : "1-1212afdd126126128ae","products" : [
  3. "prod_1" : {
  4. "name" : "Milk","desc" : "Semi-skimmed 1ltr","price" : "0.89"
  5. },"prod_7568" : {
  6. "name" : "Crisps","desc" : "Salt and Vinegar","price: "0.85"
  7. }
  8. ]
  9. "date" : "2012-01-14 14:24:33"
  10. }
  11.  
  12. {
  13. "_id" : "purchase_2","products" : [
  14. "prod_89001" : {
  15. "name" : "Bread","desc" : "White thick sliced","price: "1.20"
  16. }
  17. ]
  18. "date" : "2012-01-14 15:35:59"
  19. }

因此,考虑到文档布局,我们可以看到每次购买,我们可以看到购买中的产品 – 但是我们怎么能计算两个日期之间的所有购买?另外,您如何看到日期降序排列的两个日期之间所有购买的日志?

这是Couchbase适合的吗?

在两个日期之间可能会有成千上万的购买,而且客户不喜欢等待报告….我确信每个人都有经验;)

是否最好使用incr函数,如果是这样,您将如何建模数据?

非常感谢任何阅读此内容的人 – 我希望在此进一步解释,如果可能的话,还会提供更多真实世界建模问题的例子.

詹姆士

在最简单的情况下,您可以编写一个Map函数,该函数将使用日期字段作为键创建视图.

因此,稍加修改的文档设计:

  1. {
  2. "_id": "purchase_1","_rev": "2-c09e24efaffd446c6ee8ed6a6e2b4a22","products": [
  3. {
  4. "id": "prod_3","name": "Bread","desc": "Whole wheat high fiber","price": 2.99
  5. }
  6. ],"date": "2012-01-15 12:34:56"
  7. }
  8.  
  9. {
  10. "_id": "purchase_2","_rev": "2-3a7f4e4e5907d2163d6684f97c45a715","products": [
  11. {
  12. "id": "prod_1","name": "Milk","desc": "Semi-skimmed 1ltr","price": 0.89
  13. },{
  14. "id": "prod_7568","name": "Crisps","desc": "Salt and Vinegar","price": 0.85
  15. }
  16. ],"date": "2012-01-14 14:24:33"
  17. }

您的地图功能如下所示:

  1. function(doc) {
  2. for (var product in doc.products) {
  3. emit(doc.date,doc.products[product].price);
  4. }
  5. }

您可以选择添加一个reduce函数,该函数将按日期汇总购买.

  1. function(keys,values) {
  2. return sum(values);
  3. }

然后,您可以使用startkey和endkey参数查询视图.

  1. http://localhost:5984/couchbase/_design/Products/_view/total_price_by_date?startkey="2012-01-01"&endkey="2012-01-31"&group=true

查询视图的输出将是:

  1. {"rows":[
  2. {"key":"2012-01-14 14:24:33","value":4.94},{"key":"2012-01-15 12:34:56","value":2.99}
  3. ]}

或者删除group参数以获取整个日期范围的总和:

  1. {"rows":[
  2. {"key":null,"value":7.930000000000001}
  3. ]}

希望有所帮助.

– 约翰

猜你在找的NoSQL相关文章