非规范化和查询巨型Couchbase数据集

时间:2015-04-01 19:06:17

标签: database couchdb couchbase database-performance denormalization

我们说我有大约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的视图的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

你只需要这样的地图功能:

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

然后使用密钥gmail.com查询视图以获取使用gmail的所有用户。如果数据库包含其他文档类型,则最好在文档中包含type属性以区分不同类型。

答案 1 :(得分:0)

我只需将email_host添加到您的文档中,并为其提供&#39; @&#39;背后的价值。这样,所有文档都将电子邮件主机作为字段,并且可以轻松查询。应该是高绩效。