来自关系数据库 (mySql) 背景,我曾经有多个表和关系键来存储数据。我从来不知道 mongodb 之类的 noSql,但想为下一个项目部署它,但仍然掌握着对我来说陌生的结构模型。
假设我想建立一个市场,其中不同的 mySql 表中有用户、项目和项目类别:
- 用户表:用户 ID、姓名等
- 项目:项目 ID、所有者 (UserID)、类别 (CatID) 等
- 项目类别:CatID、ItemName
如果我错了请纠正我,我会在 mongodb 中做的是先创建 json 用户数据,然后在每条记录中注入(inject)项目
{
"_id" : ObjectId("51f7be1cd6189a56c399d456"),
"name" : "john",
"age" : 31,
"email":"foo@bar.io",
"items" : [
{"item name":"corolla",
"item category":"car" },
{"item name":"vespa",
"item category":"bike" }, an so on.....
]}
所以我只有 1 个用户数据集,其中包含用户拥有的所有内容。我不会有项目或类别表。没有更多的 item_id 或 cat_id 因为它是用项目名称标识的,所以当我想搜索特定项目时,我会用名称搜索它。
如果用户有很多项目,CMIIW 将创建一个非常大的记录。如果这是常态,一条记录可以存储多少个字符?服务器一次抓取一大块,然后将其解析为我的查询是否效率较低?
或者有 2 个数据集更有意义,一个是用户,另一个是项目,这样它会使一个更小的对象记录片段。
最佳答案
需要知道的一件重要事情是应用程序将如何与数据交互。
MongoDB 中的数据具有灵活的模式。这样做的一个好处是,它允许您专注于您的应用程序设计,并让数据库设计符合应用程序的利益(参见 Domain Driven Design 方法)。与其先设计数据库模式,不如弄清楚应用程序将如何访问数据。
我建议结帐MongoDB: Data Modelling Introduction .文档结构的关键考虑因素是决定嵌入还是使用引用。
在设计数据模型时,请始终考虑数据的应用用途(即数据的查询、更新和处理)以及数据本身的固有结构。
参见 Operational Factors and Data Models每个模型要考虑的因素。其中之一就是您提到的 - 文档的大小。目前 BSON 文档大小的限制是 16MB .另见 Document Growth考虑与尺寸相关的因素。
在保存从服务器传输的数据方面,您可以 limit fields to return from a query .
希望对您有所帮助。
关于php - 从mysql背景理解mongodb结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36160718/