Подтвердить что ты не робот

Реляционные базы данных плохо подходят для Node.js?

Недавно я немного поиграл с Node.js. В моем конкретном случае я закончил использование MongoDB, отчасти потому, что это имело смысл для этого проекта, потому что это было очень просто, а отчасти потому, что Mongoose, казалось, был чрезвычайно простым способом начать с него.

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

Итак, на мой вопрос: существует твердая техническая причина, по которой реляционные базы данных хуже подходят для работы с Node.js, чем альтернативы, такие как MongoDB?

EDIT: просто хочу пояснить несколько вещей:

  • Я специально не ищу подробную информацию о конкретном приложении, которое я создаю.
  • Я не ищу нетехнические причины (например, я не отвечаю на такие ответы, как "Node", и MongoDB являются новыми, поэтому разработчики используют их вместе ")

Я ищу только технические причины, ТОЛЬКО. Например, если была техническая причина, по которой реляционные базы данных выполнялись необычно плохо при использовании с Node.js, то это было бы тем, что я ищу (обратите внимание, что из ответов до сих пор он не появляется это так)

4b9b3361

Ответ 1

Нет, нет технической причины. В основном это просто мнение и использование NoSQL с Node.js в настоящее время является популярным выбором.

Предполагается, что экосистема Node в значительной степени зависит от сообщества. Все, что находится вне Node основного API, требует участия сообщества. И, конечно же, люди будут более склонны поддерживать то, что соответствует их личным предпочтениям.

Но многие используют и поддерживают реляционные базы данных с Node.js. Некоторые известные проекты включают в себя:

Ответ 2

Мне нравится Node.js, но с Node на самом деле имеет смысл использовать RDBM. С помощью решения noSQL вам часто нужно выполнять ручные объединения в вашем коде Node.js и иногда работать с отсутствием транзакций, технической особенностью RDBM, которые имеют функции фиксации/отката. Вот некоторые потенциальные проблемы с использованием нереляционных БД + Node.js серверов:

(a) соединения медленнее, а ответы медленнее, потому что Node не является C/С++

(b) дорогие объединения блокируют ваш поскольку соединение происходит в вашем Node.js-коде не на каком-то сервере базы данных

(c) ручные записи объединений часто сложны и подвержены ошибкам; ваш Запросы noSQL могут быть легко ошибочными или ваш код объединения может быть неправильный или субоптимальный; оптимизированные объединения были сделаны ранее мастерами RDBM и соединения в RDBM доказаны в математике в большинстве случаев корректно.

(d) Некоторые базы данных, такие как MongoDB, не поддерживают транзакции - в моем командном случае это означает, что мы должны использовать внешнюю распределенную блокировку, чтобы запросы можно было сгруппировать в атомную транзакцию. Было бы намного проще, если бы мы могли просто использовать транзакции и избегать блокировок на уровне приложений.

с более мощной системой реляционных баз данных, которая может выполнять оптимизированные объединения в C/С++ на сервере базы данных, а не в вашем Node.js-коде, вы позволяете вашему серверу Node.js делать то, что ему лучше всего.

С учетом сказанного я думаю, что это довольно глупо, что многие крупные производители noSQL не поддерживают объединения (?) Полная де-нормализация - это всего лишь мечта, насколько я могу это видеть. И отсутствие транзакций может быть немного странным. Без транзакций только один запрос является атомарным, вы не можете сделать несколько запросов атомарными без механизма блокировки уровня приложения:/

Ответ 3

В моем опыте node имеет тенденцию быть популярным в базах данных, имеющих API без состояния, это очень хорошо подходит для асинхронного характера узлов. Большинство реляционных баз данных используют соединения с состоянием для транзакций, это минимизирует основные преимущества асинхронного неблокированного ввода-вывода.

Ответ 4

Можете ли вы объяснить, какие конкретные проблемы вы столкнулись с выбранной вами базой данных и node.js?

Несколько причин, по которым MongoDB может быть более популярным, чем реляционные базы данных:

  • MongoDB по существу является хранилищем объектов JSON, поэтому он очень хорошо переводится для приложения javascript. Функции MongoDB - это функции javascript.

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

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

Но вернемся к моему основному моменту, мы можем говорить об этом весь день, и для этого не нужен этот форум. Если у вас есть какие-либо проблемы в любом коде с node.js и вашей базой данных, пожалуйста, задайте эти вопросы.

Изменить: строго технические причины, кроме совместимости с JSON с обеих сторон: их нет.