这是我第 30 天,或者类似于玩 MongoDB 的一天。不幸的是,由于我公司当前的基础设施问题,我们在使用 MongoDB 之后又切换回 MySQL。但是在 MongoDB 和 MySQL 上实现了相同的模型后,我现在可以清楚地看到差异。
当然,在处理像 MongoDB 这样的无模式数据库时会涉及到模式,但模式是由应用程序决定的,而不是由数据库决定的。数据库将推入给定的任何内容。只要您知道管理员没有秘密登录 Mongo 并进行更改,并且所有对数据库的访问都是通过某些 wrapper 的控制器,那么您应该查看模式的唯一地方就是您的模型类。例如,在我们的 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 完全一样:)