2012-01-14 10 views
7

Câu hỏi này không nhất thiết Couchbase 2.0 phát triển xem trước cụ thể tuy nhiên tôi nghĩ rằng nó có thể giúp mọi người điều tra vào sản phẩm Couchbase mới.Mô hình dữ liệu Couchbase - Tài liệu hướng

Tôi đang tìm kiếm lời khuyên về mô hình hóa dữ liệu. Chúng tôi đang điều tra Couchbase để có thể sử dụng nó cho Realtime Analytics.

Tuy nhiên, tôi không thể tìm thấy bất kỳ tài liệu nào về cách tốt nhất để lập mô hình dữ liệu trong thế giới thực.

Tôi sẽ đề xuất một kịch bản và nếu cộng đồng có thể giúp tôi hoặc thảo luận một số ý tưởng về cách mô hình này có thể được mô hình hóa thì sẽ rất hữu ích?

Lưu ý đây không phải là đại diện của sản phẩm của chúng tôi và tôi không yêu cầu mọi người để giải quyết mô hình của chúng tôi cho chúng ta câu hỏi là dự kiến ​​hơn để thảo luận

phép giả định rằng khách hàng thực hiện mua sản phẩm tại một ngày cụ thể/thời gian, sản phẩm có thông tin với chúng như id, tên, mô tả và giá cả, mua hàng được thực hiện vào một ngày.

Yêu cầu ban đầu là có thể đếm tất cả các giao dịch mua giữa hai ngày. Đối với bất kỳ 1 ngày có thể có hơn 100.000 lần mua hàng - đây là một doanh nghiệp khá lớn;)

Nếu bất kỳ cú pháp nào không chính xác, vui lòng cho tôi biết - mọi lời khuyên/trợ giúp đều được hoan nghênh.

Nếu chúng ta đã mô hình hóa một cái gì đó dữ liệu như vậy (mà có lẽ hoàn toàn không chính xác):

mua với các sản phẩm

{ 
    "_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" 
} 

Vì vậy, cho rằng bố trí tài liệu chúng ta có thể gặp nhau mua và chúng ta có thể thấy các sản phẩm đã mua trong đó - tuy nhiên làm thế nào chúng ta có thể đi về việc đếm tất cả các giao dịch mua giữa hai ngày? Ngoài ra, làm cách nào bạn có thể thấy nhật ký của tất cả các giao dịch mua giữa hai ngày theo thứ tự giảm dần?

Đây có phải là cái gì đó Couchbase phù hợp không?

Có thể có hàng trăm ngàn người mua giữa hai ngày và khách hàng không muốn chờ đợi cho các báo cáo ... .as tôi chắc chắn rằng tất cả mọi người đã có kinh nghiệm;)

Nó sẽ là tốt nhất để sử dụng incr chức năng và nếu có thì bạn sẽ làm thế nào để mô hình hóa dữ liệu?

Rất cám ơn mọi người đã đọc bài viết này - tôi hy vọng sẽ mở rộng thêm điều này để đưa ra thêm ví dụ về các vấn đề về mô hình hóa thế giới thực nếu có thể.

James

+0

Hi all, Một người sử dụng hữu ích trên kênh IRC Couchbase đã chỉ cho tôi theo hướng trang tour du lịch thế giới 'CouchConf'. Có rất nhiều bài thuyết trình với video và các trang trình bày kèm theo từ mỗi hội nghị. http://www.couchbase.com/couchconf-world-tour Đặc biệt, San Francisco có rất nhiều tài liệu hỗ trợ. http://www.couchbase.com/couchconf-sanfrancisco – eggsy84

Trả lời

6

Trong trường hợp đơn giản nhất bạn có thể viết một hàm Map đó sẽ tạo ra một cái nhìn sử dụng trường ngày như một chìa khóa.

Vì vậy, với một thiết kế tài liệu chút thay đổi:

{ 
    "_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" 
} 

chức năng Bản đồ của bạn sẽ trông như thế:

function(doc) { 
    for (var product in doc.products) { 
    emit(doc.date, doc.products[product].price); 
    } 
} 

Bạn tùy chọn có thể thêm một giảm chức năng đó sẽ tổng hợp mua hàng theo ngày.

function(keys, values) { 
    return sum(values); 
} 

Sau đó, bạn có thể truy vấn chế độ xem bằng cách sử dụng thông số khóa và khóa khởi động.

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

Kết quả của truy vấn xem sẽ là:

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

Hoặc loại bỏ các tham số nhóm để có được số tiền cho toàn bộ phạm vi ngày:

{"rows":[ 
{"key":null,"value":7.930000000000001} 
]} 

Hy vọng rằng sẽ giúp.

- John

+1

Câu trả lời tuyệt vời cảm ơn bạn! Vì vậy, đây là cách phổ biến để mô hình dữ liệu với couchbase? Ví dụ. Giả sử tất cả những gì tôi muốn biết là có bao nhiêu sản phẩm được bán mỗi ngày (không phải tổng giá trị) thường được mô hình hóa như vậy và sau đó được tính với chế độ xem và bản đồ/giảm hoặc mọi người có xu hướng lưu trữ dữ liệu như mong đợi để đọc nó - bằng cách sử dụng chức năng quầy (incr) hoặc một cái gì đó tương tự? – eggsy84