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

2021-06-16 16:37:16 +08:00
 xdlailai
如题~
2057 次点击
所在节点    问与答
12 条回复
wellsc
2021-06-16 16:51:10 +08:00
索引?
xdlailai
2021-06-16 16:54:25 +08:00
@wellsc 现在测试时只添加了不到 10 条数据,已经读的很慢了,数据条数还没到一定的量级,索引的作用有限
TomVista
2021-06-16 16:54:50 +08:00
容我先笑一会儿,

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

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

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

比如

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

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

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

然后另一个方案就是拆分 bigData,拆成两个 collection 依靠 id 关联,一个 collection 是需要数据库操作的 存成 DBObject,另一部分存成 string
stabc
2021-06-16 17:36:07 +08:00
@Mithril 谁告诉你不索引就不需要存 JSON 的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/783770

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX