大小为 7M 字节的 json 直接存 mongodb,读取速度超过 5s,有优化读取速度的办法吗 - V2EX
xdlailai

大小为 7M 字节的 json 直接存 mongodb,读取速度超过 5s,有优化读取速度的办法吗

  •  
  •   xdlailai Jun 16, 2021 2623 views
    This topic created in 1795 days ago, the information mentioned may be changed or developed.
    如题~
    12 replies    2021-06-16 17:36:07 +08:00
    wellsc
        1
    wellsc  
       Jun 16, 2021 via iPhone
    索引?
    xdlailai
        2
    xdlailai  
    OP
       Jun 16, 2021
    @wellsc 现在测试时只添加了不到 10 条数据,已经读的很慢了,数据条数还没到一定的量级,索引的作用有限
    TomVista
        3
    TomVista  
       Jun 16, 2021
    容我先笑一会儿,

    如果不依赖 json 结构,不对这 7m 进行数据库操作,可以存成字符串,然后拿出来进行 json 格式化

    如果依赖数据库操作的话,建议单独拆分成 collection
    shd
        4
    shd  
       Jun 16, 2021
    内网吗 带宽多少。
    TomVista
        5
    TomVista  
       Jun 16, 2021
    @TomVista 应用场景和数据结构发一下吧,标题里的信息没啥帮助,对解决问题
    xdlailai
        6
    xdlailai  
    OP
       Jun 16, 2021
    @TomVista 哎,其他系统整的大 json,没办法。第一个如果没看到啊,还麻烦再详细解释下,存字符串是啥意思。
    xdlailai
        7
    xdlailai  
    OP
       Jun 16, 2021
    @shd 本地测试的,网络关系不大了
    ynkkdev
        8
    ynkkdev  
       Jun 16, 2021
    问题是也不知道你是怎么查的,直接_id 查找要 5S 以上?

    还是你在 7M 的内容里查找。。。
    Mithril
        9
    Mithril  
       Jun 16, 2021
    虽说 MongoDB 是存 JSON 的,但人家存的是你需要索引的 JSON 啊。。。你这 7M 的 JSON 不会所有 field 都要索引吧。。
    需要索引的摘出来当 JSON 存,然后把这 7M 的东西直接当二进制文件扔进去,找个地方存个关联就行了。
    或者你也可以把这 7M 的 JSON 直接当字符串存进去,不要索引。
    clf
        10
    clf  
       Jun 16, 2021   1
    你 json 的大致结构呢?然后搜索条件是啥?竟然还用到索引了……

    mongo 设计的时候建议采用这样的模式:
    1.频繁搜索的条件字段丢关系数据库,只用于存储的数据放在 mongo 里,关系数据库采用 id 和 mongo 连接。
    2.如果没有关系数据库,也是同样的拆成两个集合。

    比如说你的 7M json 结构是:
    id ObjectId
    field1 String
    field2 Long
    field3 String
    field4 String
    otherFields ... (占了 7M 大部分,且不用于搜索)

    此时 f1-f4 是常用的搜索条件的时候,那么你的数据应该改成:
    collection1:
    id ObjectId
    field1 String
    field2 Long
    field3 String
    field4 String
    dataId String

    collection2:
    id ObjectId
    data Object

    MongoDB 的优势在于单条数据查询效率上,以及灵活的存储结构。虽然有索引对全集合的搜索优化,但不意味着你设计存储的时候就能随便乱来。
    TomVista
        11
    TomVista  
       Jun 16, 2021   1
    @xdlailai

    比如

    有个字段 bigData 存的 7m 的 json,不需要通过数据库对 bigData 进行操作

    直接存一个 bigData:"{size:7m} ",而不是 bigData:{size:7m}

    区别 是一个是 string 一个是 DBObject,

    然后另一个方案就是拆分 bigData,拆成两个 collection 依靠 id 关联,一个 collection 是需要数据库操作的 存成 DBObject,另一部分存成 string
    stabc
        12
    stabc  
       Jun 16, 2021
    @Mithril 谁告诉你不索引就不需要存 JSON 的?
    About     Help     Advertise     Blog     API     FAQ     Solana     913 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 22:25 PVG 06:25 LAX 15:25 JFK 18:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86