JSON 文档数据库(mongodb、elasticsearch)中的键成本
cost of keys in JSON document database (mongodb, elasticsearch)
如果有人对 mongodb 或 elasticsearch 等文档存储数据库中 JSON 键的大小有任何速度或优化效果的经验,我想知道。
例如:我有 2 个文档
doc1: { keeeeeey1: 'abc', keeeeeeey2: 'xyz')
doc2: { k1: 'abc', k2: 'xyz')
假设我有 1000 万条记录,那么以 doc1 格式存储数据将意味着比以 doc2 格式存储更多的 db 文件大小。
除此之外,在速度或 RAM 或任何其他优化方面会有缺点或负面影响吗?
您正确地注意到文档将具有不同的大小。因此,如果您决定采用第二种模式,则每个文档至少可以节省 15 bytes
(类似文档可以节省 60%
)。对于您的 10 million
记录,这将以类似 140MB
的形式结束。这将为您带来以下优势:
- 硬盘节省。唯一的问题是,查看当前硬盘的价格,这几乎没有用。
- RAM 节省。 与硬盘相比,这对于索引很有用。在 indexes should fit in RAM to achieve a good performance 的 mongodb 个工作集中。因此,如果您在这两个字段上有索引,您不仅会保存
140MB
的 HDD space,还会保存 140MB
的潜在 RAM space(这实际上是值得注意的)。
- I/O。由于input/output系统的限制(磁盘reading/writing的速度受到限制),出现了很多瓶颈。对于您的文档,这意味着使用模式 2,您可能每 1 秒 read/write
twice as many documents
。
- 网络。在很多情况下,网络甚至比 IO 慢得多,如果您的数据库服务器在不同的机器上,那么您的应用程序服务器必须通过网络发送数据。而且您还可以发送两倍的数据。
说完优点,再说一个小按键的缺点:
- 数据库的可读性。当您执行
db.coll.findOne()
并看到 {_id: 1, t: 13423, a: 3, b:0.2}
时,很难理解这里究竟存储了什么。
- 应用程序的可读性与数据库类似,但至少在这里你可以有一个解决方案。使用将
currentDate
转换为 c
并将 price
转换为 p
的映射逻辑,您可以编写干净的代码并具有简短的架构。
如果有人对 mongodb 或 elasticsearch 等文档存储数据库中 JSON 键的大小有任何速度或优化效果的经验,我想知道。
例如:我有 2 个文档
doc1: { keeeeeey1: 'abc', keeeeeeey2: 'xyz')
doc2: { k1: 'abc', k2: 'xyz')
假设我有 1000 万条记录,那么以 doc1 格式存储数据将意味着比以 doc2 格式存储更多的 db 文件大小。
除此之外,在速度或 RAM 或任何其他优化方面会有缺点或负面影响吗?
您正确地注意到文档将具有不同的大小。因此,如果您决定采用第二种模式,则每个文档至少可以节省 15 bytes
(类似文档可以节省 60%
)。对于您的 10 million
记录,这将以类似 140MB
的形式结束。这将为您带来以下优势:
- 硬盘节省。唯一的问题是,查看当前硬盘的价格,这几乎没有用。
- RAM 节省。 与硬盘相比,这对于索引很有用。在 indexes should fit in RAM to achieve a good performance 的 mongodb 个工作集中。因此,如果您在这两个字段上有索引,您不仅会保存
140MB
的 HDD space,还会保存140MB
的潜在 RAM space(这实际上是值得注意的)。 - I/O。由于input/output系统的限制(磁盘reading/writing的速度受到限制),出现了很多瓶颈。对于您的文档,这意味着使用模式 2,您可能每 1 秒 read/write
twice as many documents
。 - 网络。在很多情况下,网络甚至比 IO 慢得多,如果您的数据库服务器在不同的机器上,那么您的应用程序服务器必须通过网络发送数据。而且您还可以发送两倍的数据。
说完优点,再说一个小按键的缺点:
- 数据库的可读性。当您执行
db.coll.findOne()
并看到{_id: 1, t: 13423, a: 3, b:0.2}
时,很难理解这里究竟存储了什么。 - 应用程序的可读性与数据库类似,但至少在这里你可以有一个解决方案。使用将
currentDate
转换为c
并将price
转换为p
的映射逻辑,您可以编写干净的代码并具有简短的架构。