Как вы можете чередовать рекламные баннеры с помощью CouchApp и CouchDB?

Для контекста: это HTML-приложение с небольшим количеством JavaScript на стороне браузера или вообще без него. Я не могу легко изменить это, поэтому нужно сделать это на сервере.

CouchDB построен так, чтобы не иметь побочных эффектов. Это достаточно справедливо. Но, похоже, нет никакого метода, который я мог бы придумать с помощью шоу, представлений, списков, чтобы изменить то, что показано пользователю с последующими запросами или на основе пользовательских объектов, без записи данных.

И может ли запрос на получение документа привести к созданию новой записи? Я думаю, что нет, так как это будет побочным эффектом.

Но если вы можете, вы можете просто создать журнал, а затем иметь представление, которое выбирает рекламную фирму, набор документов, описывающих рекламу, на которые влияет изменение в журнале, когда было показано предыдущее объявление.

На самом деле я не собираюсь показывать рекламу на своем сайте, у меня будут советы, краткие обзоры статей и второстепенные функции, которые варьируются от загрузки страницы к загрузке страницы.

Любые предложения приветствуются.

Я долго ломал голову над тем, как работать с зернистостью для остальной части нужной мне функциональности, но этот момент кажется противоречащим тому, как работает Couchdb.


person Jim    schedule 21.08.2010    source источник
comment
Угу. Это сложно, Джим. Можете ли вы пояснить, почему вы избегаете js на стороне клиента?   -  person Ben Damman    schedule 31.08.2010
comment
Потому что в основном я буду использовать это для настройки страниц для каждого пользователя. Я избегаю клиентского JavaScript, потому что сайт должен быть дружественным для поисковых систем. У меня есть лучший способ описать проблему. Подумайте о Google... Когда вы входите в систему, Google аннотирует и упорядочивает результаты поиска на основе вашей истории поиска. Мне нужно изменить данные, которые я показываю пользователю, в зависимости от его предпочтений, и я не хочу делать отдельную версию для Google, а также не хочу отправлять тысячу результатов клиенту для изменения порядка. Прямо сейчас, похоже, я буду использовать node.js или что-то еще впереди.   -  person Jim    schedule 15.09.2010
comment
Хорошо. Но если вы используете функцию списка, как я описал ниже, я считаю, что вы можете добиться этого. Позвольте функции списка выполнить переупорядочивание и просто убедитесь, что вы выдаете поля из документа, хранящего пользовательские настройки, как часть функции Просмотр списка, из которой она получает свои данные.   -  person Ben Damman    schedule 16.09.2010


Ответы (2)


Я думаю, вам понадобится функция списка, которая получает набор документов из представления, а затем выбирает только один для возврата либо случайным образом, либо каким-либо другим способом. Однако, поскольку вы находитесь внутри функции списка, вы получаете доступ к деталям запроса пользователя, включая файлы cookie (которые вы также можете установить, кстати). Это больше похоже на то, что вы хотите.

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

Примечание. Вы не можете получить доступ к запросу в функции map/reduce, и вы столкнетесь с проблемами, если сделаете что-то вроде Math.random() внутри функции карты.

Таким образом, функция списка - это путь.

http://guide.couchdb.org/draft/transforming.html

person Ben Damman    schedule 31.08.2010
comment
Доступ к пользовательскому файлу cookie позволил бы мне получить документ пользователей в таблице пользователей, а затем использовать эти данные для применения преобразования к порядку строк в функции списка. Но, поскольку это нарушило бы возможность кэширования, как я понимаю, Couchdb не позволит мне запросить профиль десяти пользователей из списка или показать функцию для изменения результатов. Это означает, что мне нужна веб-инфраструктура для выполнения этой обработки, я полагаю. - person Jim; 15.09.2010
comment
Насколько я понимаю, CouchDB генерирует Etags для функций отображения и списка, хешируя окончательный вывод. Таким образом, возможность кэширования не должна прерываться. - person Ben Damman; 16.09.2010
comment
Кроме того, помните, что вы используете функцию списка с представлением (пара функций map/reduce). Таким образом, ваше представление может выдавать поля из документа пользователя, а также выводить документы, которые вы выбираете, чтобы показать пользователю. Тогда ваша функция списка будет иметь доступ к полям, связанным с пользователем, а также к списку документов для выбора. - person Ben Damman; 16.09.2010
comment
Еще одна вещь: похоже, вы пытаетесь получить доступ к базе данных _users и хранить там настройки. Если вы сделаете это, вы не сможете получить доступ к этим данным в представлении, определенном в другой базе данных. (Хотя вы, возможно, можете получить к нему доступ как часть объекта req в списке или функции show. Я не уверен, но это будет что-то вроде req.userCtx.yourFieldName.) - person Ben Damman; 16.09.2010

Изучите различные методы выбора случайного документа из представления. Это должно позволить вам выбрать случайный документ (предположительно представляющий рекламу, совет и т. д.) для отображения.

person JasonSmith    schedule 21.08.2010
comment
Хорошо, по крайней мере, зная, что это возможно, достаточно. Я читаю подробное руководство по CouchDB и буду внимательно следить за главами, посвященными представлениям. - person Jim; 22.08.2010