V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xdlailai
V2EX  ›  问与答

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

  •  
  •   xdlailai · 2021-06-16 16:37:16 +08:00 · 1868 次点击
    这是一个创建于 1016 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题~
    12 条回复    2021-06-16 17:36:07 +08:00
    wellsc
        1
    wellsc  
       2021-06-16 16:51:10 +08:00 via iPhone
    索引?
    xdlailai
        2
    xdlailai  
    OP
       2021-06-16 16:54:25 +08:00
    @wellsc 现在测试时只添加了不到 10 条数据,已经读的很慢了,数据条数还没到一定的量级,索引的作用有限
    TomVista
        3
    TomVista  
       2021-06-16 16:54:50 +08:00
    容我先笑一会儿,

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

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

    还是你在 7M 的内容里查找。。。
    Mithril
        9
    Mithril  
       2021-06-16 17:09:43 +08:00
    虽说 MongoDB 是存 JSON 的,但人家存的是你需要索引的 JSON 啊。。。你这 7M 的 JSON 不会所有 field 都要索引吧。。
    需要索引的摘出来当 JSON 存,然后把这 7M 的东西直接当二进制文件扔进去,找个地方存个关联就行了。
    或者你也可以把这 7M 的 JSON 直接当字符串存进去,不要索引。
    clf
        10
    clf  
       2021-06-16 17:14:42 +08:00   ❤️ 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  
       2021-06-16 17:26:33 +08:00   ❤️ 1
    @xdlailai

    比如

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

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

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

    然后另一个方案就是拆分 bigData,拆成两个 collection 依靠 id 关联,一个 collection 是需要数据库操作的 存成 DBObject,另一部分存成 string
    stabc
        12
    stabc  
       2021-06-16 17:36:07 +08:00
    @Mithril 谁告诉你不索引就不需要存 JSON 的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2906 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 15:17 · PVG 23:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.