Это мой 30-й день или что-то вроде того, чтобы поиграть с MongoDB. К сожалению, мы вернулись к MySQL после работы с MongoDB из-за текущих проблем с инфраструктурой моей компании. Но, реализовав одну и ту же модель на MongoDB и MySQL, я теперь отчетливо вижу разницу.
Конечно, при работе с базами данных без схемы, такими как MongoDB, используется схема, но схема определяется приложением, а не базой данных. База данных будет пихать во все, что ей дают. До тех пор, пока вы знаете, что администраторы не осуществляют тайный вход в Mongo и не вносят изменения, а весь доступ к базе данных осуществляется через некоторую оболочку , единственное место, на которое вы должны обратить внимание на схему, - это классы вашей модели. Например, в нашем приложении Rails это две модели, которые есть в Mongo,
class Consumer
include MongoMapper::Document
key :name, String
key :phone_number, String
one :address
end
class Address
include MongoMapper::EmbeddedDocument
key :street, String
key :city, String
key :state, String
key :zip, String
key :state, String
key :country, String
end
Теперь после перехода на MySQL наши классы выглядят так:
class Consumer < ActiveRecord::Base
has_one :address
end
class Address < ActiveRecord::Base
belongs_to :consumer
end
Не обманывайтесь краткостью занятий. В последней версии с MySQL поля извлекаются из базы данных напрямую. В первом примере поля находятся прямо перед нашими глазами.
В MongoDB, если нам нужно было изменить конкретную модель, мы просто добавляем, удаляем или модифицируем поля в самом классе, и это работает сразу же. Нам не нужно беспокоиться о синхронизации таблиц / столбцов базы данных со структурой класса. Поэтому, если вы ищете схему в MongoDB, ищите ответы в своем приложении, а не в базе данных.
По сути, я говорю то же самое, что и @Chris Shain:)