我已经学习NoSQL数据库已有一个星期了。
我真的了解NoSQL数据库的优势以及它们非常适合的许多用例。
但是人们通常会在撰写文章时就好像NoSQL可以代替关系数据库一样。还有一点我无法理解:
NoSQL数据库是(通常)键值存储。
当然,可以将所有内容存储到键值存储中(通过将数据编码为JSON,XML等),但是我看到的问题是,在许多情况下,您需要获取一些与特定条件匹配的数据用例。在NoSQL数据库中,只有一个可以有效搜索的条件-密钥。关系数据库经过优化,可以有效地搜索数据行中的任何值。
因此,NoSQL数据库并不是持久存储需要按其内容搜索的数据的真正选择。还是我误会了什么?
一个例子:
您需要存储网上商店的用户数据。
在关系数据库中,您将每个用户存储为users
表中的一行,并带有ID,名称,他的国家等。
在NoSQL数据库中,您将以ID为密钥存储每个用户,并将其所有数据(以JSON等编码)存储为值。
因此,如果您需要从某个特定国家/地区获取所有用户(出于某种原因,营销人员需要了解他们的某些信息),那么在Relational Database中这样做很容易,但是在NoSQL Database中却不是很有效,因为您必须获取每个用户,解析所有数据并进行过滤。
我并不是说这是不可能的,但是它变得更加棘手,如果您要搜索NoSQL条目的数据,我想那不是那么有效。
您可以为每个国家/地区创建一个密钥,以存储该国家/地区中每个用户的密钥,并通过获取存放在该国家/地区的密钥中的所有密钥来获取特定国家/地区的用户。但是我认为这种技术使复杂的数据集变得更加复杂-难以实现且不如查询SQL数据库有效。因此,我认为这不是您在生产中使用的方式。还是?
我不确定我是否会误解或忽略了一些概念或最佳实践来处理此类用例。也许您可以纠正我的陈述并回答我的问题。