Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MongoDB—存储和读取数据的最佳方式_Php_Mongodb_Database - Fatal编程技术网

Php MongoDB—存储和读取数据的最佳方式

Php MongoDB—存储和读取数据的最佳方式,php,mongodb,database,Php,Mongodb,Database,我有一个Mongo数据库 我有两个收藏: 使用者 职位 用户发送帖子,但问题在这里。哪条路更好 仅在帖子后面存储用户id(帖子创建者) 在帖子后面存储用户信息,如(_id,name,username,…) 在第一种方法中,我们需要从集合用户获取用户信息 在第二种方法中,我们需要只在用户更新配置文件信息时更新用户发送的所有POST数据 哪个更好?在MongoDB中,将一个文档嵌入另一个文档是正常的。我认为第二种方法更好,因为: 1——您不必手动考虑关系,因此它更干净 2-通过选择第一种方式,您必

我有一个Mongo数据库

我有两个收藏:

  • 使用者
  • 职位
  • 用户发送帖子,但问题在这里。哪条路更好

  • 仅在帖子后面存储用户id(帖子创建者)
  • 在帖子后面存储用户信息,如(_id,name,username,…)
  • 在第一种方法中,我们需要从集合用户获取用户信息

    在第二种方法中,我们需要只在用户更新配置文件信息时更新用户发送的所有POST数据


    哪个更好?

    在MongoDB中,将一个文档嵌入另一个文档是正常的。我认为第二种方法更好,因为:

    1——您不必手动考虑关系,因此它更干净


    2-通过选择第一种方式,您必须添加一个或多个额外查询(性能问题)

    以找到应用程序的最佳方式,问问自己以下问题:

    a) 用户集合上写入(更新)查询的nr是高还是低?(可能很低)

    b) 收集后读取查询的nr是高还是低?(可能很高)

    c) (用户)数据一致性有多重要

    非规范化是MongoDB中常用的方法。 如果写入的nr比读取的nr少,则通过嵌入数据对数据进行非规范化将产生更好的读取性能,但写入性能较慢,因为您需要在更多位置写入。需要注意的是,可能会出现数据不一致的情况,因为在mongodb中,只有在单个文档上写入时,写入才是原子的

    通过选择解决方案#1,您对帖子的读取速度将变慢,因为这需要对用户集合进行其他读取查询。数据的一致性得到了保证,您还可以获得更大的灵活性

    通过选择解决方案#2,您可以更快地阅读文章,因为所有内容都在那里,嵌入在一个查询中。但用户查询更新速度较慢。在这个解决方案中,数据的一致性并没有得到保证,但在某些应用程序中,当更新的不一致性可以稍后处理时,这可能不是一个大问题。 在这里,你可以只嵌入你需要的部分用户数据,而不是全部,比如只有用户名(和_id),如果你只需要用户名就可以在帖子上显示它

    如果您有一个非常大的数据集,其中包含大量post,用户集合更新较少,post集合读取次数较多,并且用户数据可能包含可能发生的不一致性,这些不一致性并不重要,可以稍后修复,那么就性能而言,更好的解决方案是#2


    一篇关于模式设计的有趣文章可以在中找到。

    阅读请求肯定比编辑请求多

    所以,若使用第一种方法,则必须添加一些查询以从集合中读取数据,这样会降低读取性能


    确保第二种方法更好。

    您应该尽量避免使用MongoDB中的关系


    我建议您使用第二种方法。

    存储关系数据的最佳方法是将其存储在关系数据库中。@Federkun您的意思是第一种方法更好吗?因此您已经同意使用第一种方法。。在我看来,第一也是好的