从mysql背景中了解mongodb结构

时间:2016-03-22 17:02:15

标签: php mysql mongodb nosql

来自关系数据库(mySql)背景,我曾经有多个带有关系密钥的表来存储数据。我从来不知道像mongodb这样的noSql,但想把它部署到下一个项目中,但仍然掌握着与我不同的结构模型。

假设我想建立一个有用户,物品和市场的市场。不同mySql表中的项类别:

  • 用户表:UserID,名称等
  • 项目:ItemID,所有者(UserID),类别(CatID)等
  • 项目类别:CatID,ItemName

如果我错了,纠正我,我会在mongodb做的​​是首先创建json userdata,然后在每条记录中注入项目

{
"_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.....
]}

所以我只有一个数据集,用户包含用户拥有的所有内容。我不会有物品或类别表。不再是item_id或cat_id,因为它是用项目名称标识的,所以当我想搜索特定项目时,我会用名字搜索它。

如果用户有很多项目,CMIIW会创建一个非常大的记录。如果这是常态,一条记录可以存储多少个字符?服务器一次抓取一个巨大的块,然后将其解析为我的查询,效率会降低吗?

或者更有意义的是拥有2个数据集,一个是用户,另一个是项目,所以它会使一个较小的对象记录碎片。

1 个答案:

答案 0 :(得分:0)

重要的是要知道应用程序将如何与数据交互。

MongoDB中的数据具有灵活的架构。关于这一点的一个好处是,它允许您专注于您的应用程序设计,并让数据库设计符合应用程序的好处(请参阅Domain Driven Design方法)。您应该首先了解应用程序如何访问数据,而不是首先设计数据库模式。

我建议结帐MongoDB: Data Modelling Introduction。对文档结构的关键考虑因素是决定嵌入或使用引用。

在设计数据模型时,请始终考虑数据的应用程序使用情况(即查询,更新和处理数据)以及数据本身的固有结构。

有关每个型号需要考虑的因素,请参阅Operational Factors and Data Models。其中一个就是你所提到的 - 文件的大小。目前BSON文档大小的限制为16MB。另请参阅Document Growth,了解与尺寸相关的因素。

在保存服务器的数据传输方面,您可以limit fields to return from a query

希望有所帮助。