Представление CouchBase для нескольких диапазонов

Я оцениваю CouchBase для приложения и пытаюсь выяснить что-то о запросах диапазона в представлениях. Я знаю, что могу получить представление для одного ключа, нескольких ключей или диапазона. Могу ли я получить для нескольких диапазонов? то есть я хочу получить элементы с ключом просмотра 0-10, 50-100, 5238-81902. Мне может одновременно понадобиться 100 разных диапазонов, поэтому необходимость делать 100 запросов к базе данных кажется слишком накладной.


person David Pfeffer    schedule 25.03.2014    source источник


Ответы (1)


Насколько я знаю, в Couchbase нет возможности реализовать получение значений из нескольких диапазонов в одном представлении. Возможно, в Couchbase N1QL есть (или будут реализованы в будущем) какие-то фичи, но я с ними не работал.

Ответ на ваш вопрос 100 запросов не будут большими накладными расходами. Couchbase работает тихо и быстро, и он предназначен для обработки большого количества операций в секунду. Кроме того, если ваше представление спроектировано правильно, оно не будет «пересчитываться» при каждом запросе.

Также есть другой способ: 1. Определите минимальное и максимальное значение вашего диапазона (в вашем примере это будет 0..81902) 2. Представление запроса, которое будет возвращать только идентификаторы документов и значение, на котором был основан диапазон, без включения все документы в результате. 3. На стороне клиента отфильтруйте массив результатов предыдущего шага в соответствии с вашими диапазонами (0-10, 50-100, 5238-81902), а затем используйте getMulti с идентификаторами документов, которые остались в массиве.

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

person m03geek    schedule 25.03.2014
comment
Хороший ответ, если вы действительно беспокоитесь о том, чтобы часто нажимать на Couchbase (что не является проблемой), вы всегда можете кэшировать результаты диапазона в свой собственный ключ/документ. - person scalabilitysolved; 25.03.2014
comment
Меня меньше беспокоят фактические обращения к Couchbase, а больше — накладные расходы на такое количество запросов. (т. е. память, потоки и т. д.). Я делаю это из C#, а Couchbase SDK не является асинхронным, поэтому я буду связывать потоки. - person David Pfeffer; 25.03.2014
comment
Я бы не слишком беспокоился об этом, мы запускаем стек Couchbase в производстве с Java (немного отличается), и у нас не было проблем с памятью/поточностью с SDK, плюс мы довольно сильно его подтолкнули. Вы можете прочитать об этом здесь scalabilitysolved.com/< /а> - person scalabilitysolved; 25.03.2014
comment
@DavidPfeffer Давным-давно я неправильно использовал Couchbase C# SDK: я создал 1 экземпляр клиента Couchbase для каждого веб-запроса. Даже при этом узким местом было максимальное количество подключений, которые может иметь Windows, а не память. Поэтому я думаю, что если вы используете SDK правильно, у него не будет слишком больших накладных расходов. Также, как я уже говорил ранее, вы можете попробовать также второй подход, который уменьшит количество запросов до 2, но увеличит время ЦП и использование памяти на клиенте при фильтрации результатов. Может быть, если у вас много диапазонов и тихая большая задержка в сети между приложением и кушеткой, второй подход будет лучше. - person m03geek; 26.03.2014