我有一个关于 NoSQL 类型数据库的问题,特别是 MongoDB,但它通常适用于大多数基于键值或文档的存储。NoSQL 的一些卖点是速度和可扩展性,但在我看来,与关系数据库相比,开销很大。
你有很多重复,因为(几乎)一切都是非规范化的。您对此无能为力,因为这是此类数据库的重点。我更关心下一个:
有很多开销,因为如果你有一个 JSON 文档,你必须保存每个文档的所有键(和所有结构信息)。因此,对于 10000 行,您必须保存字符串 'age'、'name'、... 10000 次。
数据库不能做很多聪明的事情,比如创建索引或二叉树(以节省时间)或以紧凑的方式存储整数(因为一个自由格式的文档可能有一个字符串,而所有其他文档都有一个 int, ETC。)
我知道您可以编写自己的视图或 map/reduce 算法来获得类似索引的东西,但乍一看,对于一般情况,NoSQL 必须非常低效地占用空间和 CPU。
真的有那么糟糕吗?NoSQL 数据库(比如 MongoDB)中进行了哪些优化?与使用关系数据库相比,存储大量相同的复杂 JSON 文档的开销是多少?