然而,所有这些都需要付出代价 。CPU和内存的代价通常很高 。
NoSQL采用了解决所有这些问题的方法 。
- 解决灵活的查询NoSQL数据库通过要求您事先制定所有主要数据访问模式并设计数据库以处理这些问题来避免您在数据访问时灵活性的需求 。您不需要在读取时汇总数据,而是通过以读取方式布置数据的方式存储数据的预连接版本 。
- 解决数据完整性NoSQL数据库将数据完整性的责任推到了应用程序中 。您需要将数据去规范化并复制到数据库中 。在更改时,可能需要更新包含相同数据的多个记录 。
- **解决存储效率**NoSQL数据库的存储效率不如其关系对手高 。但是,当设计RDBMS时,存储费用相对于计算来说非常昂贵 。与当前情况相比,存储价格已经大幅下降,计算则成为首选 。因此,实际上通过优化计算而不是存储来对数据进行建模是非常有意义的 。

文章插图
SQL数据库中的数据存储示例
将此数据模型转换为NoSQL数据库,例如DynamoDB,然后它看起来像下面这样 。

文章插图
NoSQL数据库(DynamoDB)的对应数据存储示例
解决水平扩展关系数据库之所以很难水平扩展的主要原因是查询语法的灵活性 。由于数据访问模式的灵活性,系统不知道哪些数据将在查询实际执行之前被获取 。因此,为了避免在执行查询时进行跨机器网络调用,所有数据都必须保持在本地,即在同一节点上 。
NoSQL数据库通过要求将数据拆分为较小的段并在这些段之一中执行所有查询来采用水平扩展 。
为了更好地了解这一点,让我们以user_id作为分区键,并在图中进行跟踪 。

文章插图
大多数NoSQL数据库在将分区键值分配给节点之前对其进行哈希处理 。这有助于更好地分发数据 。
在读取和写入操作期间,所有查询必须包括分区键,以便直接访问相关节点 。
解决查询性能的不可预测性在SQL数据库中,随着表的大小增长,操作会变得越来越慢 。性能还受到同时运行的其他查询的影响 。
对于NoSQL数据库的读取操作,所有查询必须包括分区键 。在执行写入操作时,可以将此操作发送到负责该数据块的节点,而不会打扰群集中的其他节点 。随着数据量的增加,可以根据需要继续添加额外的节点 。每个操作仅影响群集中的一个节点 。与SQL数据库中的测试和生产环境相比,查询性能几乎不会有太大差异,因为每个操作仅影响一个节点 。
【SQL vs NoSQL:为满足您的业务需求选择正确的数据库模型】
推荐阅读
- 为什么Node.js 是后端开发的规则改变者
- OpenAI:LLM能感知自己在被测试,为了通过会隐藏信息欺骗人类
- 苹果上架c流程的详细步骤
- 华为Mate 60系列参数对比:三款机型优缺点分析及推荐!
- 重磅!非华为手机也能刷鸿蒙系统了
- 工人日报:不敢休、不好意思休,休假为何成职场人“隐痛”
- 手机那么好,为什么还要用对讲机?
- 孙颖:41岁嫁入豪门,44岁为81岁的老公生下女儿,如今还想拼二胎
- 护肤高端玩家鲜为人知的5大护肤习惯
- 上海某985男生,被华为校园招聘,说计算机专业月薪2万是侮辱价?
