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 文档数据库中的的主要内容,如果未能解决你的问题,请参考以下文章