2013-06-03 9 views
6

mie chiavi id attuali contiene da 3 o 4 segmenti:quale migliore/più veloce complessa ID Couchbase del oppure il documento in linea type = "my_document_type"

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

Soluzione 1. utilizzare l'ID complesse e creare viste cercando in id per una chiave

function (doc, meta) { 

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


} 

Soluzione 2. per ogni documento aggiungere campi come "tipo", "namespace" E vista creat utilizzarli

function (doc, meta) { 

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


} 

Se scelgo Soluzione 2, devo mantenere id su mia domanda e probabilmente farò come in soluzione 1.

Qualcuno ha esperienza nel nominare id e la creazione di una vista da loro? quali problemi hai avuto con ciascuna di queste soluzioni. Oppure la funzione indexOf() non è consigliata?

+1

È anche possibile pubblicare la domanda o collegarla ad essa su [forum di couchbase] (http://www.couchbase.com/forums/). Ci sono alcuni sviluppatori della base di lavoro che non sono registrati su StackOverflow. – m03geek

+0

Come ha detto @xqterry, se l'applicazione è in grado di gestire tutto ciò che è necessario senza visualizzazioni, è necessario utilizzare solo la prima soluzione. – m03geek

risposta

4

Couchbase crea l'indice di visualizzazione in background, quindi se non si utilizza il parametro stale=false, si ottengono le stesse prestazioni quando si ottengono i documenti dalla vista in entrambe le soluzioni.

Nella prima soluzione probabilmente è possibile ottenere chiavi con una lunghezza maggiore rispetto alla seconda, poiché in 2 soluzioni è possibile digitare tipo doc, non meta. Couchbase contiene tutti i metadati in memeory, quindi le chiavi più lunghe si hanno, è necessaria più memoria. Anche indexOf è più lento di == o ===, quindi l'indice di creazione può richiedere più tempo.

Quindi per me la seconda soluzione è migliore.

Inoltre, è possibile migliorare l'utilizzo del disco delle viste emmitando solo emit(doc.source_id, null) e utilizzare IncludeDocs nella libreria client. Ridurrà le loro dimensioni e quasi non influenzerebbe le prestazioni.

Questo è anche un link per "best practice". Potrebbe anche essere d'aiuto.

1

sto usando come la soluzione 1.

Nel mio caso (server backend gioco sociale), nome della chiave indica il tipo di dati memorizzati, ad esempio, "un giocatore: {} id_area: {uid}", " playerchar: {zone_id}: {player_uid}: {char_id} "ecc. Quindi non ho aggiunto il campo tipo nel documento perché l'applicazione sa cosa vuole, non richiede mai informazioni dal contenuto di valore per la riflessione.

Chi Prestazione/velocità, mi dispiace non ho potuto dare alcun suggerimento, non ho alcun obbligo di eseguire query sui dati con vista, tutte le viste che ho creato funziona solo sullo sviluppo & ambiente di backup, ei dati analysitic & lavori statistiche viene eseguito con altri non di sistema su Couchbase.