0

比方說,我有一個具有以下字段SQL郵件1TB的數據:反規範化和查詢一個巨大的Couchbase數據集

email, email_host, username, first_name, last_name, last_login

有人告訴我,像SELECT * FROM emails WHERE email_host = 'gmail.com' MySQL的查詢效率有點慢...我們正在說30分鐘或更長時間。

我想嘗試一下Couchbase,但我不確定如何去反規範化數據和構建views。看來,一個可能的方法爲每Couchbase自己的視頻輔導課是創建一個「關鍵」,如:

u::gmail::incremented_id

u::john::incremented_id

則僅獲取所有u::gmail s到有一個與Gmail地址對應的密鑰列表,而不是查詢所有文檔,並檢查email_host屬性是否爲gmail

這是一個合法的/好的策略去了解這個反規範化的樣本數據集,如果是這樣,什麼是正確的技術來創建一個視圖preindex u::whatever

回答

1

你只需要一個地圖功能是這樣的:

function(doc) { 
    if (doc.type == 'user') 
    emit(doc.email_host, doc); 
} 

然後你使用的關鍵gmail.com讓所有使用Gmail的用戶查詢視圖。如果數據庫包含其他文檔類型,則最好在文檔中包含一個類型屬性以區分不同的類型。

0

我只是將email_host添加到您的文檔,並給它後面的'@'值。這樣,所有文檔都將電子郵件主機作爲字段並且可以輕鬆查詢。應該是高績效的。

+0

能否請您擴展此答案?謝謝 – 2015-04-02 15:34:12

+0

@ dsp_099對不起,你有什麼特別要求? – a4xrbj1 2015-05-14 07:53:58