jjzjj

mongodb - 解决 Overembedding MongoDB with Slow Down performance

coder 2023-11-07 原文

目前我在一个存在严重过度嵌入问题的项目中工作,因为在一个集合中只有 3 个对象(数组)位于其中,其中几乎包含应用程序业务模型的 70%(我们收到了这个来自其他开发团队的项目,是一个完整的挑战)。另一个问题是,该应用程序使用实时跟踪地理定位,并持续使用此集合。

我的提示是,我完全确定数据库服务器中的过载问题和应用程序在几个小时内变慢的原因是过度嵌入。

我们认为解决方案是建立一个新的数据库模式(理解 MongoDB 是无模式的,但不是限制),尝试用低引用规范化树集合中的这三个对象(像关系模型一样模拟外键),但是,例如,您建议使用旧(当前)数据库设计和制作数据仓库,只进行读取查询,只迁移用户数据或将所有数据库迁移到新模型(可能非常非常复杂......或者不是?)......

附加信息: 公交车统计

{
    "ns" : "pruebas.buses",
    "count" : 1343,
    "size" : 38393616,
    "avgObjSize" : 28587,
    "numExtents" : 7,
    "storageSize" : 58277888,
    "lastExtentSize" : 20643840.0,
    "paddingFactor" : 1.0,
    "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
    "userFlags" : 1,
    "capped" : false,
    "nindexes" : 1,
    "totalIndexSize" : 65408,
    "indexSizes" : {
        "_id_" : 65408
    },
    "ok" : 1.0
}

这是来自这个名为 Buses 的集合的文档示例:

{
    "_id" : "BAOB-02",
    "school" : "BAOBAB",
    "licensePlate" : "UFS 118",
    "color" : "BLANCO",
    "model" : 2002,
    "username" : "baobab02",
    "students" : [ 
        {
            "firstNames" : "MATTHIAS ",
            "lastNames" : "GARCIA VELANDIA",
            "_id" : "1002",
            "classroom" : "",
            "blood" : "",
            "telephone" : null,
            "cellphone" : null,
            "guardians" : [ 
                {
                    "firstNames" : "GUSTAVO ",
                    "lastNames" : "GARCIA GARAVITO",
                    "_id" : ObjectId("553515248a854eba40c1d2fc")
                }, 
                {
                    "firstNames" : "CLAUDIA ",
                    "lastNames" : "VELANDIA ",
                    "_id" : ObjectId("553515248a854eba40c1d2fb")
                }
            ],
            "parents" : [ 
                {
                    "firstNames" : "GUSTAVO ",
                    "lastNames" : "GARCIA GARAVITO",
                    "telephone" : null,
                    "cellphone" : 3103247894.0,
                    "email" : "gggzipa@gmail.com",
                    "_id" : ObjectId("553515248a854eba40c1d2fe")
                }, 
                {
                    "firstNames" : "CLAUDIA ",
                    "lastNames" : "VELANDIA ",
                    "telephone" : null,
                    "cellphone" : 3102487056.0,
                    "email" : "ar.claudiavelandia@gmail.com",
                    "_id" : ObjectId("553515248a854eba40c1d2fd")
                }
            ],
            "addressInfo" : {
                "pm" : {
                    "address" : "KM 2 TABIO - CAJICA",
                    "apartment" : "",
                    "neighborhood" : "VIA TABIO",
                    "monday" : true,
                    "tuesday" : true,
                    "wednesday" : true,
                    "thursday" : true,
                    "friday" : true,
                    "saturday" : false,
                    "coords" : [ 
                        4.9242399390697, 
                        -74.0441983938217
                    ],
                    "stopOrder" : 1
                },
                "am" : {
                    "address" : "NA",
                    "apartment" : "",
                    "neighborhood" : "",
                    "monday" : false,
                    "tuesday" : false,
                    "wednesday" : false,
                    "thursday" : false,
                    "friday" : false,
                    "saturday" : false,
                    "coords" : []
                }
            },
            "code" : "1002"
        }, 
        {
            "firstNames" : "JUAN PABLO",
            "lastNames" : "ROMERO GUZMAN",
            "_id" : "1003",
            "classroom" : "",
            "blood" : "",
            "telephone" : null,
            "cellphone" : null,
            "guardians" : [ 
                {
                    "firstNames" : "NELSON ANDRES",
                    "lastNames" : "ROMERO ",
                    "_id" : ObjectId("5535158b8a854eba40c1d300")
                }, 
                {
                    "firstNames" : "ANA MARIA",
                    "lastNames" : "GUZMAN MORENO",
                    "_id" : ObjectId("5535158b8a854eba40c1d2ff")
                }
            ],
            "parents" : [ 
                {
                    "firstNames" : "NELSON ANDRES",
                    "lastNames" : "ROMERO ",
                    "telephone" : null,
                    "cellphone" : 3192997309.0,
                    "email" : "nelsonandresromerojimenez@hotmail.com",
                    "_id" : ObjectId("5535158b8a854eba40c1d302")
                }, 
                {
                    "firstNames" : "ANA MARIA",
                    "lastNames" : "GUZMAN MORENO",
                    "telephone" : null,
                    "cellphone" : 3143095644.0,
                    "email" : "ananita28@hotmail.com",
                    "_id" : ObjectId("5535158b8a854eba40c1d301")
                }
            ],
            "addressInfo" : {
                "pm" : {
                    "address" : "CRR 7 2 46",
                    "apartment" : "APT. 404 INT. 8",
                    "neighborhood" : "CAPELLANIA",
                    "monday" : true,
                    "tuesday" : true,
                    "wednesday" : true,
                    "thursday" : true,
                    "friday" : true,
                    "saturday" : false,
                    "coords" : [ 
                        4.91861203215498, 
                        -74.0340435504913
                    ],
                    "stopOrder" : 2
                },
                "am" : {
                    "address" : "NA",
                    "apartment" : "",
                    "neighborhood" : "",
                    "monday" : false,
                    "tuesday" : false,
                    "wednesday" : false,
                    "thursday" : false,
                    "friday" : false,
                    "saturday" : false,
                    "coords" : []
                }
            },
            "code" : "1003"
        }
    ],
    "auxiliary" : {
        "firstNames" : "LEIDY VIVIANA",
        "lastNames" : "MORANTES BARON",
        "telephone" : null,
        "cellphone" : 3203178186.0,
        "email" : "vivis_120490@hotmail.com"
    },
    "driver" : {
        "firstNames" : "VICTOR JULIO",
        "lastNames" : "MORANTES MORANTES",
        "telephone" : null,
        "cellphone" : 3118955381.0
    },
    "__v" : 13
}

此集合包含内部 Students +- 18,每个 Student 通常有 2 个 parent 。目前存在 1300 份文件。实时地理定位跟踪的数据分配在另一个集合中,但该项目使用另一台服务器进行 REDIS 缓存(我知道缓存所有数据库不是一个好的做法,但我们计划将此缓存分段仅用于跟踪服务)

以及所有数据库的统计信息>

{
    "db" : "pruebas",
    "collections" : 20,
    "objects" : 5785288,
    "avgObjSize" : 285.557788652873,
    "dataSize" : 1652034048.0,
    "storageSize" : 2388484096.0,
    "numExtents" : 112,
    "indexes" : 18,
    "indexSize" : 176544368.0,
    "fileSize" : 4226809856.0,
    "nsSizeMB" : 16,
    "extentFreeList" : {
        "num" : 0,
        "totalSize" : 0
    },
    "dataFileVersion" : {
        "major" : 4,
        "minor" : 22
    },
    "ok" : 1.0
}

PD/一个月前,我们可能会为 MongoDB 应用优化技术,例如使用负载均衡器和 Mongos 进行分片或复制......但无论如何,我们知道如果数据库设计错误,解决问题的最佳形式是做一个新模型。 并且感谢,如果有人花时间阅读所有这些奇怪的案例..如果提出建设性的评论和建议,请提前感谢

最佳答案

在上面的描述中,根本原因没有被提及,看起来像是基于假设,brodriguezs 正在走向模式改变

修改模式之前的一些提示。

您可以在此处看到一些重要提示 - https://docs.mongodb.com/manual/administration/analyzing-mongodb-performance/

关于mongodb - 解决 Overembedding MongoDB with Slow Down performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39418814/

有关mongodb - 解决 Overembedding MongoDB with Slow Down performance的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  3. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  4. ruby - 如何更快地解决 project euler #21? - 2

    原始问题Letd(n)bedefinedasthesumofproperdivisorsofn(numberslessthannwhichdivideevenlyinton).Ifd(a)=bandd(b)=a,whereab,thenaandbareanamicablepairandeachofaandbarecalledamicablenumbers.Forexample,theproperdivisorsof220are1,2,4,5,10,11,20,22,44,55and110;therefored(220)=284.Theproperdivisorsof284are1,2,

  5. ruby - 为什么这些方法没有解决? - 2

    这个问题在这里已经有了答案:WhydoRubysettersneed"self."qualificationwithintheclass?(3个答案)关闭29天前。给定这段代码:classSomethingattr_accessor:my_variabledefinitialize@my_variable=0enddeffoomy_variable=my_variable+3endends=Something.news.foo我收到这个错误:test.rb:9:in`foo':undefinedmethod`+'fornil:NilClass(NoMethodError)fromtes

  6. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

  7. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  8. 【RuntimeError: CUDA error: device-side assert triggered】问题与解决 - 2

    RuntimeError:CUDAerror:device-sideasserttriggered问题描述解决思路发现问题:总结问题描述当我在调试模型的时候,出现了如下的问题/opt/conda/conda-bld/pytorch_1656352465323/work/aten/src/ATen/native/cuda/IndexKernel.cu:91:operator():block:[5,0,0],thread:[63,0,0]Assertion`index>=-sizes[i]&&index通过提示信息可以知道是个数组越界的问题。但是如图一中第二行话所说这个问题可能并不出在提示的代码段

  9. ruby-on-rails - 如何解决#<Book::ActiveRecord_Relation:0x007fb709a6a8c0> 的未定义方法 `to_key'? - 2

    我遇到了未定义方法`to_key'的问题这是我的books_controller.rbclassBooksController和我的索引页如下。index.html.erb......现在当我要访问索引页面时出现如下错误。undefinedmethod`to_key'for# 最佳答案 index通常返回一个集合。事实上,您的Controller符合要求。但是,您的View试图为其定义一个表单。正如您所发现的,这不会成功。表单适用于实体,而不适用于集合。该错误在您看来以及您希望如何处理index。

  10. ruby-on-rails - 本地 gem 的“bundle 安装”没有解决依赖关系,而 'gem install' 可以 - 2

    我在目录“/home/enterprise/pkg”中有一个本地gem(enterprise-0.0.1.gem)。它依赖于active_directorygem(v1.5.5),这是在它的enterprise.gemspec文件中指定的,如下所示:-gem.add_dependency("active_directory")在我的应用程序的Gemfile中,我添加了以下行:-gem'enterprise','0.0.1',path=>'/home/enterprise/pkg'当我做的时候bundleinstall在我的应用程序的源目录中,只安装了企业gem。因此,我遇到了引用act

随机推荐