php - 从mysql背景理解mongodb结构

标签 php mysql mongodb nosql

来自关系数据库 (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/

相关文章:

php - mysqli 准备不返回表中的结果

php - 我如何在 Zend 的 application.ini 文件中定义一个 mysql 连接?

node.js - 无法在 NodeJS 中将字符串转换为 ObjectId

c# - Mongodb C# 驱动程序仅返回数组中匹配的子文档

mysql - 如何在一组中找到产品而不是另一组

node.js - MongoDB:如何使用 expressjs 读取所有集合中的所有文档?

php - 基于多个动态值的Where子句,CodeIgniter

php - 如何在一个 HTTP 请求中提供多种字体?

php - 从模型中的 Codeigniter View 中的两个相关选择查询中获取数据

mysql - LEFT JOIN 语法错误