我们说我有大约1Tb的SQL电子邮件数据,其中包含以下字段:
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
以获得与gmail地址对应的密钥列表,而不是查询所有文档并检查email_host
属性是否为gmail
。< / p>
这是一个合法/好的策略,可以对此示例数据集进行非规范化处理,如果是这样,那么创建预先引用u::whatever
的视图的正确方法是什么?
答案 0 :(得分:1)
你只需要这样的地图功能:
function(doc) {
if (doc.type == 'user')
emit(doc.email_host, doc);
}
然后使用密钥gmail.com
查询视图以获取使用gmail的所有用户。如果数据库包含其他文档类型,则最好在文档中包含type属性以区分不同类型。
答案 1 :(得分:0)
我只需将email_host添加到您的文档中,并为其提供&#39; @&#39;背后的价值。这样,所有文档都将电子邮件主机作为字段,并且可以轻松查询。应该是高绩效。