json 是如何实际存储在 noSql 文档数据库中的

Posted

技术标签:

【中文标题】json 是如何实际存储在 noSql 文档数据库中的【英文标题】:How is a json actually stored in a noSql document database 【发布时间】:2022-01-05 07:42:55 【问题描述】:

我想知道 JSON 是如何存储在像 MongoDb 等 NoSQL 数据库中的。如果我要将 JSON 数据存储在 SQL DB 中,那么我可以选择将其存储为 text(varchar) 列。但是那样我就会失去 NoSQL DB 的好处。 NoSQL DB 是否将 JSON 保存在文件中?字段的更新是如何发生的?是否在内存中读取完整的文件,然后更新并写回文件?

【问题讨论】:

在 MongoDB 中 BSON(binary json) 被保存在数据库中,数据被压缩,并且在每次更新之前整个文档被加载到内存中。每个集合和每个索引都创建一个文件,而不是每个文档。这些都是我所知道的,也许其他人可以提供更多信息 【参考方案1】:

广泛的答案——特别是因为你说“MongoDB 和其他人”——是“在许多方面,每一个都可能是数据库引擎所独有的,它提取 JSON 并进入什么目标字段类型。”即使是大多数较新的关系数据库也对 JSON 数据具有特殊的性能和类型处理,postgres jsonb 列类型是一个显着的突出。这里没有简单、一致应用的答案。

【讨论】:

【参考方案2】:

大多数 NoSql 数据库将 json 保存为 VARCHAR 或 STRING。不同的 NoSql 数据库使用不同的策略来保存在磁盘上。例如,Cassandra 为每个表创建一个文件。对于每次更新,C* 只是将数据附加到文件中。在compaction之类的过程中,文件中的数据可以被压缩,对于多行单个主键,单个行保存在压缩过程中,压缩取决于行的时间戳

更新操作总是耗费时间和资源。大多数 NoSql 数据库不使用更新操作,可以在内部将更新操作转为插入操作。这意味着,对于信号主键,一次可以存在多行。压缩过程负责将多行合并为单行。

【讨论】:

以上是关于json 是如何实际存储在 noSql 文档数据库中的的主要内容,如果未能解决你的问题,请参考以下文章

NoSQL 数据库的主主备份及操作图解

分布式文档型NoSQL数据库——MongoDB初探

JSON

JSON

NoSQL(Mongo)的面向文档的数据抽象层?

Mongodb使用