Каково различие между CouchDB и Lotus Notes?

Так что я решил сделать, так как код выглядел бы беспорядочно, чтобы бросить все внутри Artist.find({}), это создать отдельную вспомогательную функцию:

const buildQuery = (criteria) => {
    console.log(criteria);
};

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

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

Итак, внутри вспомогательной функции я сделал отдельный объект для return из этой функции, которая будет представлять фактический query, который я хочу отправить Монго.

const buildQuery = (criteria) => {
    console.log(criteria);
    const query = {};
};

В любом случае я не изменяю объект, я просто читаю некоторые из желаемых результатов поиска или то, что пользователь хочет видеть из этого объекта пользовательского интерфейса, и поэтому я сделал этот объект с именем query и добавил Идея age.

const buildQuery = (criteria) => {
    console.log(criteria);
    const query = {};
    query.age = {};
};

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

const buildQuery = (criteria) => {
    console.log(criteria);
    const query = {};
    if (criteria.age) {
        query.age = {};
    }
};

Так что именно здесь вступают в игру операторы запросов Монго. Два оператора, с которыми я хочу поработать, это операторы, большие или равные ($gte), и операторы, меньшие или равные ($lte).

Вот как я на самом деле реализовал это на практике:

const buildQuery = (criteria) => {
    console.log(criteria);
    const query = {};
    if (criteria.age) {
        query.age = {
            $gte: criteria.age.min,
            $lte: criteria.age.max
        };
    }
};

Объект query здесь в конечном итоге будет возвращен из функции buildQuery:

const buildQuery = (criteria) => {
    console.log(criteria);
    const query = {};
    if (criteria.age) {
        query.age = {
            $gte: criteria.age.min,
            $lte: criteria.age.max
        };
    }
    return query;
};

То query ] объект будет передан в операцию поиска:

module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
  // write a query that will follow sort, offset, limit options only
  // do not worry about criteria yet

  const query = Artist.find(buildQuery(criteria))
    .sort({ [sortProperty]: 1 })
    .skip(offset)
    .limit(limit);

  return Promise.all([query, Artist.count]).then(results => {
    return {
      all: results[0],
      count: results[1],
      offset: offset,
      limit: limit
    };
  });
};

const buildQuery = (criteria) => {
    console.log(criteria);
    const query = {};
    if (criteria.age) {
        query.age = {
            $gte: criteria.age.min,
            $lte: criteria.age.max
        };
    }
    return query;
};

Итак, что я делаю здесь, чтобы получить эквивалент Artist.find({ age: { $gte: minAge, $lte: maxAge }).

Итак, для yearsActive я решил реализовать нечто почти идентичное:

const buildQuery = criteria => {
  console.log(criteria);
  const query = {};
  if (criteria.age) {
    query.age = {
      $gte: criteria.age.min,
      $lte: criteria.age.max
    };
  }

  if (criteria.yearsActive) {

  }

  return query;
};

Так что, если пользователь меняет ползунок, я буду ожидать, что у моего объекта критериев будет определено свойство yearsActive, определенное для это так:

const buildQuery = criteria => {
  console.log(criteria);
  const query = {};
  if (criteria.age) {
    query.age = {
      $gte: criteria.age.min,
      $lte: criteria.age.max
    };
  }

  if (criteria.yearsActive) {
    query.yearsActive = {
       $gte: criteria.yearsActive.min,
       $lte: criteria.yearsActive.max
     }
  }

  return query;
};
21
задан fooledbyprimes 3 October 2008 в 16:22
поделиться

7 ответов

Разработка Lotus Notes началась более чем 20 лет назад, с версия 1, выпущенная в 1989 . Это было разработано Ray Ozzie, в настоящее время Главным Архитектором программного обеспечения для Microsoft.

Lotus Notes (клиент) и Domino (сервер) был вокруг в течение долгого времени и является зрелыми хорошо представляемыми продуктами. Это имеет:

  • А полный клиент-серверный стек с быстрым проектированием приложений и развертыванием документа ориентировал базы данных.
  • А полная инфраструктура открытых ключей для безопасности и шифрования.
  • модель надежной репликации А и активная активная кластеризация через гетерогенные платформы (кто-то однажды показал кластер домино с Xbox и огромный сервер AIX ).
  • А создал в собственном каталоге для руководящих пользователей, к которым можно также получить доступ по LDAP.
  • А создал в собственной почтовой системе, которая может масштабироваться для управления миллионами пользователей со много почтовыми файлами ГБ с живым доступом сервера или копируемый локально для офлайнового доступа. Это может взаимодействовать через интерфейс со стандартной интернет-почтой через SMTP и также имеет POP, и доступ IMAP встроил. Почтовая инфраструктура является базовой функцией, которая доступна всем приложениям, основывался на Domino Примечаний (любой документ в базе данных может быть отправлен по почте к любой другой базе данных с простым doc.send () команду).
  • А создал в стеке HTTP, который позволяет размещенным базам данных сервера быть полученными доступ по сети.
  • хост А опций интеграции для доступа, передачи и взаимодействия с RDBMS и ERP-системами, с тесно двойной интеграцией с доступными базами данных Notes разрешения DB2, которые будут поддержаны реляционным хранилищем, где желаемый.

Назад совместимость всегда была сильной чертой Domino Примечаний, и весьма распространено найти базы данных, которые были разработаны для версии 3, работающей безупречно в самых актуальных версиях. IBM помещает огромное усилие в это, и она имеет большое влияние, как продукт в настоящее время работает.

-

CouchDB был создан Damien Katz, стартовая разработка в 2004. Он ранее работал на IBM на Domino Примечаний, разрабатывая шаблоны и в конечном счете полностью переписывая одну из базовых функций, механизма формулы, для ND6.

CouchDB совместно использует фундаментальное понятие ориентированной базы данных документа с представлениями, что Domino Примечаний имеет.

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

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

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

В представлениях Domino Примечаний создаются путем выполнения избранной функции (записанный на языке формулы Domino Примечаний) на каждом документе в базе данных. Избранная функция просто определяет, если документ должен быть в представлении или нет. Дизайн представления Domino примечаний также определяет многие столбцы для представления. Каждый столбец имеет формулу, которая выполняется против выбранного документа для определения значения для того столбца.

CouchDB в состоянии произвести намного более сложные индексы представления, чем Domino Примечаний может.

CouchDB также имеет систему репликации.

-

Сводка ( TL; DR): CouchDB является совершенно новым программным обеспечением, которое разрабатывает ядро, которое имеет подобный концептуальный, но намного более сложный дизайн к используемому в Domino Lotus Notes. Domino Lotus Notes является зрелым полнофункциональным продуктом, который способен к тому, чтобы быть развернутым сегодня. CouchDB запускается с нуля, создавая прочную основу для будущей разработки комплекта. Domino Lotus Notes продолжает разрабатывать новые возможности, но делает так на 20-летней платформе, которая стремится поддержать назад совместимость. Существуют функции в Domino Примечаний, которого Вы могли бы пожелать, были в CouchDB, но существуют также функции в Domino Примечаний, которые анахроничны в современном мире.

48
ответ дан 29 November 2019 в 06:23
поделиться

Существует интервью подкаста с Jan Lehnardt команды CouchDB здесь .

, не возвращаясь и слушая его снова, я полагаю, что Damien Katz, который был инициатором и является все еще ведущим разработчиком на CouchDB, был также парнем позади базы данных Notes. Таким образом, существует смысл, в котором CouchDB является лучшим DB Примечаний, я предполагаю. Он объясняет некоторые различия в его блог .

1
ответ дан 29 November 2019 в 06:23
поделиться

Damien Katz работал в Iris (Lotus), но он не был парнем позади Базы данных Примечаний. Он известен в сообществе Lotus Notes за перепроектирование Механизма Формулы Примечаний.
Существуют определенно некоторые общие черты между CouchDB и Lotus Notes, такие как их ориентированные на документ, нереляционные данные и возможности репликации, но они являются более разрозненными, чем подобный. CouchDB является сервером базы данных, и Lotus Notes является платформой сотрудничества уровня предприятия.

6
ответ дан 29 November 2019 в 06:23
поделиться

Сервер клиента/Domino Lotus Notes состоит из объекта ("документ") - устройство хранения данных (не реляционный) механизм, полностью интегрировал основанную на сертификате модель обеспечения безопасности / управление пользователями и разрешение конфликтов для синхронизации офлайновых/онлайн изменений в данных - это - платформа для распределенных приложений.

" CouchDB является ориентированным на документ, Сервер управления Нереляционной базы данных (NRDBMS). "

CouchDB доступен через API стиля REST.

1
ответ дан 29 November 2019 в 06:23
поделиться

Это - приложение Примечаний и UI, который обычно ненавидят люди. Не архитектура позади.

10
ответ дан 29 November 2019 в 06:23
поделиться

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

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

CouchDB не имеет никакого фронтэнда также, просто серверный компонент. Клиент Примечаний сосет, и именно это ДЕЙСТВИТЕЛЬНО ненавидят люди. Вы когда-либо пытались послать по электронной почте мм, я имею в виду "заметку" что-то из Примечаний? Не приятный :(

0
ответ дан 29 November 2019 в 06:23
поделиться

@Lex, Возможно, вы должны сказать, над какой версией Notes / Domino вы работаете, потому что ваши комментарии неверны.

«Нет поддержки транзакций» - Domino имеет ведение журнала транзакций. Если вам нужен более сложный журнал транзакций, который также доступен в кодировании.

«не подходит для обработки нескольких транзакций с данными» - на самом деле он справляется с ними отлично. У вас есть блокировка документов и разрешение конфликтов репликации. Во многом зависит от того, как вы настроили приложение для обработки рабочего процесса.

«Нет разделения между производственной средой и средой разработки». - Ложь. Единственный способ, которым это могло быть правдой, - это если у вас плохо развернутая среда. Разработчики обычно не должны иметь доступа для развертывания изменений проекта в производственной среде. Они будут работать по шаблону, который не копируется на главные серверы. После того, как обновления выполнены и утверждены, администратор развертывает их. Они делают это, беря шаблон и подписывая его контролируемой подписью, разрешенной для работы в производственной среде, затем вставляют шаблон и обновляют дизайн связанных приложений.

«Чем больше данных в Lotus Notes, тем больше просмотров будет создано» - этот комментарий не имеет абсолютно никакого смысла. Я не верю, что вы использовали Notes / Domino в каких-либо профессиональных целях.

«Сценарий лотоса не является объектно-ориентированным» - Да, вы здесь хорошо заметили. Однако это не означает, что язык ошибочен. Также они внесли большое количество улучшений начиная с 8.x и 8.5.1. Например, встроенная поддержка веб-сервисов (укажите WSDL и код LS создан для вас). 8.5.1 Также имеется много новых функций дизайнера, таких как шаблоны кода, автозаполнение, всплывающая справка LSDoc по вашим собственным функциям и т. Д.

Вы также касаетесь только LotusScript. Но вы также можете ввести код: Java, SSJS / DOJO (XPages), Javascript, язык @Formula, веб-службы (SOAP / REST), C-API, плагины Eclipse (RCP). Вывод в формате JSON, а также XML.

8.5.1 Клиент Designer теперь можно загрузить бесплатно, если вы хотите его протестировать.

Так что, хотя я считаю, что я не в состоянии комментировать CouchDb, вы определенно не пользуетесь Notes / Domino.

5
ответ дан 29 November 2019 в 06:23
поделиться
Другие вопросы по тегам:

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