2014-01-24 2 views
5

Мы используем couchbase в качестве нашего магазина nosql и любим его для своих возможностей. Однако существует проблема, с которой мы сталкиваемся с созданием ассоциаций через сопоставление вида. Это можно счесть похожим на операцию соединения. Хотя наши наборы данных являются конфиденциальными, я иллюстрирую проблему с этой моделью.View Collation with Couchbase

Объем данных значителен, поэтому его нельзя обрабатывать в памяти. Предположим, у нас есть данные о мороженых, почтовом индексе и средней температуре дня. Один тип документа содержит код zipcode для icecream , а другой - данные транзакции мороженого, продаваемого в определенном почтовом индексе. Проблема заключается в том, чтобы определить набор верхних мороженого, продаваемых температурой данного дня.

Мы разрушаем этот корпус с целью испускания двух выходов, один из которых представляет собой индексный индекс для отображения температуры, а другой представляет собой продажу мороженого в почтовом индексе. :

Key Value 
[zip1] temp1 
[zip1,ice_cream1] 1 
[zip2,ice_cream2] 1 

мнения сверки здесь механизм, чтобы создать ассоциацию между ice_cream продажей, молнией и средней температурой т.е. соединения.

У нас есть ограничение на то, что поиск температуры происходит только один раз за 24 часа, когда почтовый индекс сначала просматривается, и это действительная средняя температура для использования в этот день. например, поиск произошел в 12:00 часов 1 января, следующий поиск не произойдет до 12:00 pm 2 января. Однако средняя температура, принятая в первом поиске, действительна только для 1 января, а вторая - для 2 января , включая первую половину дня. Теперь все усложняется, когда я хочу сделать тот же запрос с вовлеченным компонентом времени, конкретно связав среднюю температуру с ледяными кремами, которые были проданы в этот день в этом zip.eg. х icecreams ваниль были проданы, когда средняя температура в течение этого дня 70 F

Key Value 
[y,m,d,zip1] temp1 
[y,m,d,zip2,ice_cream2 ] 1 
[y,m,d2,zip1,ice_cream1] 1 

Это интересное влияние на запросы, скажем, я запрашиваю за последний 1 день я не могу делать какие-либо ассоциации между мороженым и температура до происходит при первом поиске, так как это происходит при выравнивании двух клавиш. Чистый эффект заключается в том, что я теряю количество мороженого за этот день до этого поиска температуры . Мне было интересно, есть ли у кого-то из вас подобные проблемы, и если вы знаете образец или решение, чтобы не потерять эти показатели.

ответ

2

Во-первых, добро пожаловать в StackOverflow и благодарим вас за большой вопрос.

Я понимаю конкретный вопрос, который у вас есть, но то, что я не понимаю, - это масштаб ваших данных, поэтому, пожалуйста, простите меня, если я появляюсь по неверному пути с тем, что я собираюсь предложить. Мы можем работать взад и вперед по этому вопросу в зависимости от того, как он может удовлетворить ваши конкретные потребности.

Во-первых, вы обнаружили, что CB не поддерживает объединения в своих запросах. Я собираюсь предположить, что это не проблема, если CB используется должным образом.Концептуальная модель как Couchbase следует использовать для фильтрации данных выглядит следующим образом:

  1. Создать вид CB быть как можно точнее
  2. Выбрать записи как можно точнее от ЦБ, используя представление
  3. Fine -фильтр записывать по мере необходимости на уровне доступа к данным (также выполнять любые соединения) перед отправкой в ​​остальную часть приложения.

Из вашего описания это звучит для меня так, как если бы вы пытались быть слишком умны с запросом на просмотр CB. Я бы предложил один из двух способов:

  1. Вручную просмотрите значение, которое вы хотите, когда это произойдет со вторым запросом на просмотр.
  2. Посмотрите больше записей, чем вам нужно, затем тонко фильтруйте их (шаг 3 выше).
+2

спасибо @ rmayer06 за ваш ответ и приветствие, я делал именно то, о чем вы упоминали в № 2 [смотрите больше записей ...], это казалось неуклюжим способом делать что-то. Масштаб данных находится в диапазоне сотен миллионов записей. Ручной поиск каждый раз не является вариантом из-за объема таких запросов, которые понадобятся. – hvd