在MongoDB中的架构
以下是对MongoDB的基本内容进行总结的内容。这是一个关于MongoDB的综合网站的摘录,包括已经存在于网络上的合理解释的内容。
MongoDB中的模式
可以使用无模式灵活地处理数据
MongoDB是一种无模式的数据库,具有动态模式。
– 即使在同一集合中,文档的结构可以是不同的。
– 还可以在每次更新时更改文档的结构。
因此,在像无法固定列这样的应用/开发中经常需要更改模式的情况下,它是一个方便的数据库。如果使用RDBMS进行开发,则每当表模式发生更改时,必须在数据库和应用程序两侧进行修正,但使用MongoDB只需要在应用程序端进行修正。
MongoDB中的模式设计 (与RDB的比较)
MongoDBはスキーマレスで動的なスキーマをもちます。
・同じコレクションにあるドキュメントの構造が異なっていても可
・更新ごとにドキュメントの構造を変更させることも可能
従って、カラムを固定できないような用途/開発時などのスキーマの変更が頻繁に行われる場合には便利なデータベースです。RDBMSで開発を行っている場合には、テーブルのスキーマが変更になるたびにデータベース側とアプリ側の双方で修正を行わなければなりませんが、MongoDBを使っていればアプリケーション側の修正のみですみます。
MongoDB的模式设计(与关系数据库的比较)
MongoDBはRDBMSと違ってJOINはできません。代わりに基準となるオブジェクトに別のオブジェクトをあらかじめembedded(埋め込み)させておくことで,ある程度同じように扱うことができるようにすることができます。
此外,MongoDB不具备关系的概念。可聚合的信息不会分散到相关表中,而是作为相同文档的子文档进行聚合。
基本上,RDBMS 會對數據進行規範化。通過聚合和整理數據,將其加工成應用程序易於處理的形式後存儲。然而,MongoDB 將數據直接存儲在數據庫中,以應用程序處理的形式。
在MongoDB中的模式设计和性能
在 MongoDB 中,数据文件被映射到虚拟内存中(在 Linux 上使用 mmap 功能),MongoDB 进程可以访问这个虚拟内存。如果要访问的数据已经存储在物理内存中,可以实现高速访问,但如果要访问的数据不在物理内存中(发生页面错误),则需要将数据从磁盘读取到物理内存中,然后再进行访问。因此,访问的数据(包括索引)是否在内存中将极大地影响处理性能。
MongoDB的集合应该根据应用程序最常访问的模式进行设计。然而,在关系数据库中,基本上应该进行规范化,而不需要考虑如何访问并改变模式设计。
例如,如果数据库中存储了客户的个人信息,并且在应用程序中显示客户的所有个人信息是主要功能,那么将每个客户的所有个人信息存储在同一个集合中的模式是适合的。这样可以通过一次随机访问数据库,高频访问数据有更高的可能性存在于内存中,提高性能。