gpt4 book ai didi

performance - NoSQL 数据库的开销和(低)效率?

转载 作者:行者123 更新时间:2023-12-03 06:13:53 27 4
gpt4 key购买 nike

我有一个关于 NoSQL 类型数据库的问题,特别是 MongoDB,但它通常适用于大多数键值或基于文档的存储。 NoSQL 的一些卖点是速度和可扩展性,但在我看来,与关系数据库相比,开销很大。

  1. 你有很多重复,因为(几乎)一切都是非标准化的。您对此无能为力,因为这是此类数据库的重点。我更关心接下来的事情:

  2. 这会产生大量开销,因为如果您有一个 JSON 文档,则必须在每个文档中保存所有键(以及所有结构信息)。因此,对于 10000 行,您必须保存字符串“age”、“name”... 10000 次。

  3. 数据库不能做很多聪明的事情,例如创建索引或二叉树(以节省时间)或以紧凑的方式存储整数(因为自由格式文档之一可能有一个字符串,其中所有其他有一个 int 等)

我知道你可以编写自己的 View 或映射/归约算法来获得索引之类的东西,但乍一看,对于一般情况,NoSQL 的空间和 CPU 效率肯定非常低下。

事情真的有那么糟糕吗? NoSQL 数据库(例如 MongoDB)采用了哪些类型的优化?与使用关系数据库相比,存储大量相同的复杂 JSON 文档的开销是多少?

最佳答案

首先,任何开销或低效率通常都只是代表优先级的选择;某处的开销会给你在其他地方带来优势。

至于您的具体要点,我认为答案在很大程度上取决于确切的 NoSQL 产品,即使是在键值或基于文档的子组中,但这里有一些想法:

1- You have lots of duplication because (almost) everything is unnormalized. You can't do much about it because this is kind of the point of such databases.

实际上,大多数(如果不是全部)键值数据库都可以与您想要的任何模式一起使用。因此,您可以在键值存储上建立“规范化模式”,从而避免重复。不要忘记,某些(或大多数?)键值数据库有可用的 SQL 解决方案。

2- There is a lot of overhead because, if you have a JSON document, you have to save all the keys (and all the structural information) with each document. So for 10000 rows, you'll have to save the strings 'age', 'name', ... 10000 times.

我想这取决于数据库引擎的实现方式,但是可以使用压缩(无论是复杂的还是简单的“标记化”)并且不会产生显着的开销。

3- The database can't do a lot of clever stuff like creating indices or binary trees (to save time) or storing integers in a compact way (because one of the free-form documents could have a string where all the others have an int, etc.)

同样,没有什么可以阻止键值或基于文档的数据库在后台使用任何类型的树或以紧凑的方式存储整数(例如,它可以有一个简单的二进制标志来指示数据是否是存储为字符串或“紧凑整数”)。至于创建索引,这也是可能的(出于与 1 中所述相同的原因,或者由应用程序手动完成)。

关于performance - NoSQL 数据库的开销和(低)效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12196499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com