2013-06-03 34 views
6

phím id hiện tại của tôi có chứa từ 3 hoặc 4 đoạn:gì tốt hơn/phức tạp nhanh hơn ID couchbase hoặc tài liệu inline type = "my_document_type"

namespace::my_key::id 
namespace::my_key::my_second_key::id 

Giải pháp 1. Sử dụng id phức tạp và tạo ra quan điểm bằng cách tìm kiếm trong id cho một chìa khóa

function (doc, meta) { 

    if(meta.id.indexOf("::my_key::") !== -1){ 
    emit([doc.source_id], [doc.name,doc.title,doc.ui]); 
    } 


} 

giải pháp 2. đối với mỗi tài liệu thêm các lĩnh vực như "loại", "không gian tên" Và quan điểm creat sử dụng chúng

function (doc, meta) { 

    if(doc.type=='my_key'){ 
    emit([doc.source_id], [doc.name,doc.title,doc.ui]); 
    } 


} 

Nếu tôi chọn giải pháp 2, tôi phải duy trì id về ứng dụng của tôi và có lẽ tôi sẽ làm như trong dung dịch 1.

Có ai có kinh nghiệm trong việc đặt tên id và tạo ra quan điểm từ họ? bạn gặp phải vấn đề gì với mỗi giải pháp này. Hoặc có thể hàm indexOf() không được khuyến nghị?

+1

Bạn cũng có thể đăng câu hỏi hoặc liên kết của mình lên câu hỏi đó trên [diễn đàn couchbase] (http://www.couchbase.com/forums/). Có một số nhà phát triển trên máy chủ không được đăng ký trên stackoverflow. – m03geek

+0

Khi @xqterry cho biết, nếu ứng dụng của bạn có thể xử lý tất cả những gì bạn cần mà không có chế độ xem, bạn chỉ nên sử dụng giải pháp đầu tiên. – m03geek

Trả lời

4

Couchbase xây dựng chỉ mục chế độ xem ở chế độ nền, vì vậy nếu bạn không sử dụng tham số stale=false, bạn sẽ nhận được hiệu suất tương tự khi xem tài liệu từ chế độ xem trong cả hai giải pháp.

Trong giải pháp đầu tiên, bạn có thể nhận được các khóa có độ dài lớn hơn số thứ hai, bởi vì trong 2 giải pháp bạn có thể xáo trộn loại tài liệu chứ không phải meta. Couchbase giữ tất cả siêu dữ liệu trong memeory, vì vậy các phím dài hơn bạn có, bộ nhớ nhiều hơn là cần thiết. Ngoài ra, indexOf chậm hơn == hoặc ===, vì vậy, việc tạo chỉ mục có thể mất nhiều thời gian hơn.

Vì vậy, đối với tôi giải pháp thứ hai tốt hơn.

Ngoài ra, bạn có thể cải thiện việc sử dụng đĩa cho chế độ xem của mình bằng cách tạo ra chỉ emit(doc.source_id, null) và sử dụng IncludeDocs trong thư viện khách hàng của bạn. Nó sẽ giảm kích thước của chúng và hầu như sẽ không ảnh hưởng đến hiệu suất.

Đây cũng là link để "thực hành tốt nhất". Có thể nó cũng sẽ giúp đỡ.

1

Tôi đang sử dụng như giải pháp của bạn 1.

Trong trường hợp của tôi (trò chơi xã hội backend server), tên chính chỉ ra loại dữ liệu được lưu trữ, ví dụ, "cầu thủ: {zone_id}: {uid}", " playerchar: {zone_id}: {player_uid}: {char_id} "v.v. Vì vậy, tôi không thêm trường loại trong tài liệu vì ứng dụng biết những gì nó muốn, không bao giờ yêu cầu thông tin từ nội dung giá trị để phản ánh.

Về Performance/Tốc độ, xin lỗi tôi không thể đưa ra bất cứ đề nghị, tôi không có yêu cầu của dữ liệu truy vấn với quan điểm, tất cả các quan điểm tôi tạo chỉ hoạt động trên phát triển & môi trường sao lưu, và dữ liệu analysitic & số liệu thống kê công việc chạy với hệ thống khác không trên Couchbase.

Các vấn đề liên quan