Денормализация и запросы к гигантскому набору данных Couchbase

Допустим, у меня есть около 1 ТБ данных электронной почты SQL со следующими полями:

email, email_host, username, first_name, last_name, last_login

Мне сказали, что запросы MySQL, такие как SELECT * FROM emails WHERE email_host = 'gmail.com', выполняются немного медленнее... мы говорим о 30 минутах или больше.

Я хотел бы попробовать Couchbase, но я не уверен, как денормализировать данные и создать файл views. Похоже, что один из возможных подходов в соответствии с собственными видеоуроками Couchbase — создать «ключ», например:

u::gmail::incremented_id

or

u::john::incremented_id

затем извлеките только все u::gmail, чтобы получить список ключей, соответствующих адресам gmail, вместо того, чтобы запрашивать все документы и проверять, является ли атрибут email_host gmail.

Является ли это законной/хорошей стратегией денормализации этого примера набора данных, и если да, то как правильно создать представление с предварительным индексом u::whatever?


person dsp_099    schedule 01.04.2015    source источник


Ответы (2)


Вам просто нужна такая функция карты:

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

Затем вы запрашиваете представление, используя в качестве ключа gmail.com, чтобы получить всех пользователей, использующих gmail. Если база данных содержит другие типы документов, вам лучше включить в свои документы атрибут типа, чтобы различать разные типы.

person noun    schedule 03.04.2015

Я бы просто добавил email_host в ваш документ и дал ему значение за «@». Таким образом, все документы имеют хост электронной почты в качестве поля и могут быть легко запрошены. Должен быть высокопроизводительным.

person a4xrbj1    schedule 02.04.2015
comment
@ dsp_099 Извините, о чем конкретно вы спрашиваете? - person a4xrbj1; 14.05.2015