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

Имеет ли смысл использовать BOTH mongodb и mysql в одном и том же приложении rails?

У меня есть веская причина использовать MongoDB для части моего приложения. Но люди обычно описывают это как не подходящее для "транзакционных" приложений, таких как банк, где транзакции должны быть точными/согласованными и т.д.

Имеет ли смысл разделить модели в Rails, и некоторые из них используют MySql и другие mongo? Или это вообще вызовет больше проблем, чем это стоит?

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

4b9b3361

Ответ 1

Что мы делаем с CouchDB и PostgreSQL.

Все наши пользователи и группы относятся к базе данных postgresql.
Все остальное (в нашем случае, некоторые записи со статистическими данными) находятся в базе данных couchdb.

В нашем случае это позволяет нам иметь одну базу данных couchdb для каждого клиента (приложение подключается к одному или другому в зависимости от хоста пользователя).
И только одна база данных postgresql содержит всех пользователей в ней.

Итак, я думаю, что неплохо иметь SQL и базу данных NOSQL в одном приложении.

Ответ 2

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

Имейте в виду, что если вы используете MongoDB, мы рекомендуем запустить с репликацией для перехода на другой ресурс.

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

http://dev.mysql.com/doc/refman/4.1/en/innodb-configuration.html

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

Ответ 4

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

Если вам нужен MySQL + InnoDB, и это похоже на то, что вы делаете, я бы только представил MongoDB для предпочтительных более изолированных частей, которые имеют что-то важное, чтобы извлечь выгоду из преимуществ, которые приносит MongoDB, и имеют минимальные отношения к основным таблицам MySQL.

В настоящее время я борюсь с той же проблемой, приложение Rails с 20ish-таблицами в MySQL. Использование Mongodb позволило бы решить некоторые проблемы с дизайном базы данных (особенно вложенные под-объекты и индексируемые столбцы массива), но трудно оправдать дополнительные накладные расходы:

  • 2 разных метода запросов
  • Нестандартный код Awkward вдоль швов объектов MySQL/Mongo, которые связаны друг с другом.
  • Вторая платформа базы данных для поддержки в производстве.

Я собираюсь запустить MongoDB для нашего журнала, и я собираюсь взять его оттуда.

Ответ 5

Я бы сказал, что вы ответили на свой собственный вопрос здесь.

У меня есть веская причина использовать mongodb для части моего приложения.

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

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

Можно рассмотреть некоторые из проблем, которые Майкл поднимает с помощью этого подхода. поскольку вы фокусируетесь на использовании Rails, вы можете использовать ActiveRecord для своих моделей на базе MySQL и использовать MongoMapper для своих моделей на основе MongoDb. Таким образом, вам не придется иметь дело с двумя совершенно разными методами запросов, поскольку MongoMapper обеспечивает очень активный подход ActiveRecordish. Конечно, вы можете легко опуститься в запросы, специфичные для Mongo, по мере необходимости.

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

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