反规范化和查询一个巨大的 Couchbase 数据集

Denormalizing and querying a giant Couchbase data set

假设我有大约 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 自己的视频教程会话,一种可能的方法是创建一个 "key,",例如:

u::gmail::incremented_id

u::john::incremented_id

然后只获取所有 u::gmails 以获得与 gmail 地址对应的键列表,而不是查询所有文档并检查 email_host 属性是否为 gmail .

这是对样本数据集进行非规范化的合法/好的策略吗?如果是,创建预索引视图的正确技术是什么 u::whatever

我只想将 email_host 添加到您的文档中,并为其提供“@”后面的值。这样所有文档都将电子邮件主机作为一个字段,并且可以轻松查询。应该是高性能的。

你只需要一个像这样的地图函数:

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

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