CouchDB поддерживает несколько запросов диапазона?

На Безграничный мы углубились в вариант # 2 и представили его тысячам студентов. Наш сервер представляет собой JSON REST API (Scala + MongoDB), и весь наш клиентский код обслуживается прямо из CloudFront (то есть: www.boundless.com - это просто псевдоним CloudFront).

Плюсы:

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

Минусы:

  • Не оптимизирован для SEO / готов без особого труда.
  • Требуются первоклассные пользователи веб-интерфейса, которые готовы справиться с реальностью сайта, который на 70% состоит из JavaScript, и что это значит.

Я действительно думаю, что это будущее всех веб-приложений.

Некоторые мысли для пользователей веб-интерфейса (вот где вся новизна / вызов дается этой архитектуре):

  • CoffeeScript. Намного проще создавать качественный код.
  • Магистраль. Отличный способ организовать свою логику и активное сообщество.
  • HAMLC. Шаблоны Haml + CoffeeScript => JS.
  • SASS

Мы создали жгут для нашей интерфейсной разработки под названием «Spar» (одностраничное приложение Rocketship), которое фактически представляет собой конвейер ресурсов от Rails, настроенный для разработки одностраничных приложений. В течение следующих нескольких недель мы будем открывать ресурсы на нашей странице github вместе с сообщением в блоге, объясняющим, как использовать его и общую архитектуру более подробно.

ОБНОВЛЕНИЕ:

Что касается проблем людей с Backbone, я думаю, что они переоценены. Магистраль - это скорее организационный принцип, чем глубокая структура. Сам сайт Твиттера - гигантский зверь из Javascript, охватывающий каждый кейс для миллионов пользователей. устаревшие браузеры, загружая твиты в реальном времени, собирая мусор, отображая большое количество мультимедиа и т. д. Из всех «чистых» js-сайтов, которые я видел, Twitter - самый странный. Было много впечатляюще сложных приложений, доставленных через JS, которые очень хорошо работают.

И ваш выбор архитектуры полностью зависит от ваших целей. Если вы ищете самый быстрый способ поддержки нескольких клиентов и имеете доступ к хорошим фронтенд-талантам, инвестирование в автономный API - отличный способ.

5
задан Svante 24 June 2009 в 13:09
поделиться

4 ответа

Ваше выражение emit мне кажется немного странным. Цель emit - создать ключ (т.е. индекс), а затем значения документа, которые вас интересуют.

например:

emit( doc.index, [doc.name, doc.address, ....] );

Вы генерируете массив для индекса, а не данных для представления.

Кроме того, Couchdb не предусматривает пересечения представлений, так как он не очень хорошо соответствует парадигме map / reduce. Итак, ваши потребности сводятся к тому, чтобы попытаться решить следующее:

Могу ли я создать уникальный индекс, из которого затем можно извлечь определенный диапазон? (используя startkey и endkey)

0
ответ дан 14 December 2019 в 19:23
поделиться

A CouchDB view is an ordered list of entries. Queries on a view return a contiguous slice of that list. As such, it's not possible to apply two inequality conditions.

Assuming that your loan_period is a discrete variable, this case would probably be best solved by emit'ing the loan_period first and then issuing one query for each period.

An alternative solution would be to use couchdb-lucene.

4
ответ дан 14 December 2019 в 19:23
поделиться

На самом деле CouchDB позволяет представлениям иметь сложные ключи, которые представляют собой массивы значений, как указано в вопросе:

[template_id, loan_name, loan_period, loan_amount]

Вы пробовали

params = {:startkey =>["7446567e45dc5155353736cb3d6041c0",nil,5,30000],
  :endkey=>["7446567e45dc5155353736cb3d6041c0",{}],:include_docs => true}

или, возможно,

params = {:startkey =>["7446567e45dc5155353736cb3d6041c0","\u0000",5,30000],
  :endkey=>["7446567e45dc5155353736cb3d6041c0","\u9999",{}],:include_docs => true}
0
ответ дан 14 December 2019 в 19:23
поделиться

You're using arrays as your keys. Couchdb will compare arrays by comparing each array element in increasing order until two element are not equal.

E.g. to compare [1,'a',5] and [1,'c',0] it will compare 1 whith 1, then 'a' with 'c' and will decide that [1,'a',5] is less than [1,'a',0]

This explains why your range key query fails:

["7446567e45dc5155353736cb3d6041c0",nil,5,30000] is greater ["7446567e45dc5155353736cb3d6041c0",nil,5,90000]

1
ответ дан 14 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: