四种 No-SQL

在一个常规的互联网服务中,读取与写入的比例大约是 100:1 到 1000:1。然而,从硬盘读取时,数据库连接操作耗时,99% 的时间花费在磁盘寻址上。

为了优化读取性能,非规范化的设计通过添加冗余数据或分组数据来引入。下述介绍的四种 NoSQL 类型可以帮助解决这个问题。NoSQL数据库因其灵活性、可扩展性和处理大规模数据集的能力而变得越来越流行。以下是四种主要类型的NoSQL数据库及其特点的概述:

1. 键值存储(Key-Value Store)

键值NoSQL数据库是一种高效、简单且易于扩展的非关系型数据库,它以键值对的形式存储数据。每个键都是唯一的,并直接关联到一个特定的值,这个值可以是字符串、数字、序列化对象等任何形式的数据。键值数据库因其高性能和高可用性而被广泛应用于缓存系统、会话存储、实时分析等领域。

主要特点
  • 简单高效:以键值对的形式存储数据,其中键是唯一的标识符。
  • 高性能:由于其简单的数据模型和高效的内部实现,键值数据库能够提供非常快速的数据读写速度。对于读写操作非常快速,特别适合用于缓存系统。
  • 易扩展性:可以通过增加节点轻松实现水平扩展。适合处理大规模数据。
  • 灵活性:无需预定义数据模式,允许灵活地添加不同类型的数据。
  • 高可用性和持久性:许多键值数据库设计时考虑了数据复制和分区,确保系统的高可用性和数据的持久性。
常见案例
  • Redis

         Redis是一个开源的内存中键值数据库,它也支持数据持久化。除了基本的键值存储外,Redis还提供了多种数据结构的支持,如列表、集合、哈希表等,并支持事务、发布/订阅等多种高级功能。

  • Amazon DynamoDB

        DynamoDB是亚马逊提供的一个完全托管的键值和文档数据库服务,它具有低延迟、可扩展性强的特点,适用于任何规模的应用程序。DynamoDB自动管理分区和数据复制,为开发者提供了强大的工具和灵活的安全选项。

  • Riak

        Riak是一个分布式、容错能力极强的键值数据库。它的设计目标是在不影响性能的前提下保证数据的高度一致性、可用性和分区容忍度。Riak非常适合构建需要高度可靠性的应用。

  • Memcached

        Memcached是一款高性能的分布式内存对象缓存系统,用于加速动态Web应用程序的数据访问速度。它通常用作数据库查询结果的缓存层,减少数据库负载并提高响应速度。

使用场景

适用于需要快速访问的数据,如会话存储、用户偏好设置等。

键值NoSQL数据库特别适合以下场景:

  • 缓存:作为后端数据库的缓存层,以加快数据访问速度,减轻数据库压力。
  • 会话存储:在web应用中存储用户会话信息,提供快速访问。
  • 实时数据分析:处理大量实时产生的数据流,例如日志记录、点击流分析等。
  • 游戏应用:存储用户的游戏进度、状态等信息,要求快速响应时间。
  • 电子商务平台:支持购物车、推荐系统等需要高速读写的场景。

键值存储的抽象是一个巨大的哈希表/哈希映射/字典。

我们希望使用键值缓存的主要原因是为了减少访问活跃数据的延迟。在快速且昂贵的介质(如内存或 SSD)上实现 O(1) 的读/写性能,而不是在传统的慢且便宜的介质(通常是硬盘)上实现 O(logn) 的读/写性能。

设计缓存时需要考虑三个主要因素。

  1. 缓存模式:如何缓存?是读透/写透/写旁/写回/缓存旁?
  2. 放置:将缓存放在哪里?客户端/独立层/服务器端?
  3. 替换:何时过期/替换数据?LRU/LFU/ARC?

缓存设计
1. 缓存策略

选择合适的缓存模式是设计缓存策略的基础。不同的模式适用于不同的场景。

缓存模式上可以对数据进行全页缓存/片段缓存/对象缓存/分布式共享缓存等。

1.Cache Aside(旁路缓存)

  • 描述:这是最常用的缓存模式之一。在读取数据时,首先检查缓存中是否存在所需的数据;如果不存在,则从数据库中加载数据,并将其放入缓存。写操作则直接更新数据库,并使缓存中的对应项失效。
  • 适用场景:适用于读多于写的系统,尤其是那些数据偶尔会改变的应用程序。

2. Read Through(读透)

  • 描述:在此模式下,应用程序请求数据时,缓存自动从数据源(如数据库)加载数据并保存到缓存中,然后返回给应用程序。这使得应用程序可以像访问本地缓存一样访问远程数据源。
  • 适用场景:适合于希望对应用层隐藏数据源复杂性的场景,简化了数据访问逻辑。

3. Write Through(写透)

  • 描述:每次有数据更新时,同时写入缓存和后端存储。这种方式保证了数据的一致性,但可能会降低写操作的速度。
  • 适用场景:对于需要实时保持数据一致性的应用非常有用,比如金融交易系统。

4. Write Behind(Write Back)

  • 描述:与Write Through不同,Write Behind先将数据写入缓存,之后异步地批量写入后端存储。这样可以大大提高写性能,但牺牲了一定的数据一致性。
  • 适用场景:适合于能够容忍一定时间内数据不完全一致的应用场景,例如社交网络的状态更新。

5. Refresh Ahead(预刷新)

  • 描述:该模式尝试预测即将发生的读请求,并提前将数据加载到缓存中。它可以通过定时任务或基于历史访问模式来实现。
  • 适用场景:适合于具有可预见的访问模式的应用程序,比如新闻网站的热门文章列表。

每种缓存模式都有其特定的优势和局限性,在实际应用中选择合适的缓存策略需要考虑多种因素,包括但不限于系统的读写比例、对一致性的要求、以及性能需求等。正确选择和实现缓存策略能够极大地提高应用的性能和响应速度。

2. 缓存的位置

确定缓存的位置对于系统性能和架构复杂度有着直接影响。

  • 客户端缓存:数据缓存在客户端,减少了网络延迟,但可能增加客户端的资源消耗,并且难以实现共享。
  • 独立层缓存:通过中间件或专门的缓存服务器实现,可以被多个服务共享,易于扩展和管理,但增加了系统复杂度。
  • 服务器端缓存:数据缓存在应用服务器上,接近数据处理逻辑,便于管理和维护,但不适合分布式环境下的资源共享。
3. 缓存过期策略

缓存过期策略是管理缓存数据有效性和更新频率的重要机制,确保缓存中的数据既不过期导致频繁访问后端系统,也不至于过于陈旧而影响业务逻辑。以下是几种常用的缓存过期策略:

1. 设置固定过期时间(TTL, Time To Live)

  • 描述:为缓存项设置一个固定的生存时间,在这个时间过后,该项将被视为过期。
  • 适用场景:适用于那些对实时性要求不高、但希望减少缓存穿透的应用场景。

2. 最近最少使用(LRU, Least Recently Used)

  • 描述:当缓存达到其容量限制时,移除最久没有被使用的缓存项。
  • 适用场景:适合于缓存命中率较高、数据访问局部性明显的应用场景。

3. 最不经常使用(LFU, Least Frequently Used)

  • 描述:根据数据的访问频率来决定淘汰哪一项缓存数据,访问次数最少的数据会被首先移除。
  • 适用场景:适用于能够识别出热点数据且这些数据长期有效的场景。

4. 先进先出(FIFO, First In First Out)

  • 描述:当缓存满时,按照数据进入缓存的时间顺序,最早进入的数据最先被淘汰。
  • 适用场景:适合于数据时效性较强的场景,比如日志记录或临时会话信息。

5. 随机替换(Random Replacement)

  • 描述:当需要释放空间时,随机选择一个缓存项进行删除。
  • 适用场景:适用于对缓存命中率要求不高,但追求简单实现的场景。

6. 永不过期

  • 描述:缓存数据不会自动过期,除非被显式地删除或覆盖。
  • 适用场景:适用于几乎不变的数据,如基础配置信息等。

在实际应用中,通常需要结合具体的业务需求和系统特点来选择合适的缓存过期策略。有时也会采用多种策略组合的方式来优化缓存效率和数据新鲜度。例如,可以为某些关键数据设定较短的TTL,同时使用LRU作为后备策略以应对突发流量。

2. 列式存储(Column-Family Store)

列式存储NoSQL数据库是一种专门设计用来高效存储和查询大规模数据集的数据库类型,特别适合于分析型应用。与传统的行式存储数据库不同,列式存储数据库将数据按列而非按行进行存储。这种设计使得它们在处理大量数据时能够提供更高的性能,尤其是在执行聚合操作、范围查询等数据分析任务时。

主要特点
  • 列优先存储:数据按列而非行存储,这使得在查询时只需读取必要的列,提高了性能和压缩率。
  • 高效的数据压缩:由于同一列中的数据通常具有相似性,这使得列式存储可以实现更有效的数据压缩,从而减少存储空间需求并提高I/O效率。
  • 快速的聚合计算:对于需要对某一列的所有值进行求和、平均等计算的操作,列式存储可以直接扫描该列而不需要访问其他无关列的数据,因此速度更快。
  • 灵活的数据模型:支持动态列,即不同行可以有不同的列集合。
  • 优化的查询性能:列式存储非常适合用于只读或少写多读的应用场景,特别是那些需要频繁执行复杂查询和分析的任务。
  • 高吞吐量:特别适合于大量数据的高速写入和读取操作。
常见案例
  1. Apache Cassandra:虽然Cassandra主要被认为是宽列存储数据库,但它也支持类似列式存储的功能。它被设计成可扩展的分布式数据库系统,适用于需要高可用性和容错能力的大规模数据集。
  2. HBase:构建于Hadoop文件系统(HDFS)之上,HBase是一个分布式的、版本化的列式存储数据库。它提供了随机访问和强大的一致性模型,非常适合实时查询大型数据集。
  3. ClickHouse:这是一个用于在线分析处理(OLAP)的列式数据库管理系统(DBMS)。ClickHouse以其高性能和丰富的功能集而闻名,广泛应用于商业智能和大数据分析领域。
  4. Amazon Redshift:虽然是一个完全托管的数据仓库服务,但Redshift采用了列式存储技术来优化查询性能,特别适合用于云端的大规模数据分析工作负载。

选择合适的列式存储NoSQL数据库取决于具体的应用需求,包括但不限于数据量大小、查询模式、延迟要求以及预算限制等因素。每种数据库都有其独特的优势和适用场景,理解这些可以帮助做出更加明智的选择。

使用场景

广泛应用于日志分析、实时数据分析以及需要处理大量数据的应用中,例如推荐系统。

3. 文档存储(Document Store)

文档型NoSQL数据库是一种非关系型数据库,它存储数据为文档格式,通常使用JSON、BSON、XML等格式。这种类型的数据库非常适合于处理半结构化或非结构化的数据,并且能够灵活地适应变化的数据模型。

主要特点
  • 文档导向:将数据存储为半结构化的文档,通常使用JSON、BSON或XML格式。
  • 灵活性:文档内部的数据结构可以变化,不需要预定义模式。文档型数据库允许每个文档拥有不同的字段和结构,因此非常适合需要频繁变更的数据模型。
  • 丰富的查询能力:支持复杂的查询和索引机制,允许基于文档内容进行搜索。可以直接在文档内进行复杂查询,而不需要像传统关系型数据库那样进行复杂的JOIN操作。
  • 易于扩展:大多数文档型数据库都支持水平扩展(通过增加更多的服务器来分散负载),这使得它们非常适合大规模应用。

常见案例

MongoDB

MongoDB是目前最流行的文档型数据库之一,它使用BSON格式(一种类似于JSON的二进制形式)来存储数据。MongoDB提供了丰富的查询语言、索引支持以及强大的聚合框架,使其非常适合用于各种规模的应用程序。

Couchbase

Couchbase是一个高性能、分布式的多模型数据库,支持文档、键值等多种数据模型。它特别强调易用性、可扩展性和性能优化,适用于实时应用。

RavenDB

RavenDB是一个事务性的开源文档数据库,具有高可用性和可扩展性。它提供了ACID事务保证,简化了开发过程中的数据一致性问题。

Amazon DocumentDB

Amazon DocumentDB(兼容MongoDB)是一种快速、可扩展、高可用且完全托管的文档数据库服务,专为现代应用程序设计,可以轻松存储、查询和索引文档数据。

使用场景

适合内容管理系统、物联网、电子商务平台、博客平台、实时分析等,其中数据结构可能随时间变化。

  • 内容管理系统(CMS):由于其灵活性,文档型数据库非常适合存储和管理网站内容,如博客文章、评论等。
  • 物联网(IoT)应用:对于来自不同设备的异构数据,文档型数据库提供了一种方便的方式来存储和查询这些信息。
  • 电子商务平台:产品目录、用户资料、订单信息等都是文档型数据库的理想应用场景。

4. 图数据库(Graph Database)

图数据库是一种专门用于存储和查询图形数据(节点和边)的NoSQL数据库。它们特别适合于处理高度互联的数据集,其中实体之间的关系与实体本身同样重要。图数据库通过直接将关系作为一等公民来存储,从而使得在复杂网络中导航和查询变得高效。

主要特点
  • 图结构:通过节点(代表实体)和边(代表关系)来表示数据,非常适合描述复杂的关系网络。
  • 直观的数据建模:非常适合需要表达丰富关系的数据集。
  • 自然表达关系:图数据库使用节点、边(也称为关系)和属性来表示数据,这使它能够非常直观地表达实体间的关系。
  • 强大的关联查询:能够高效地执行涉及多层关系的查询。对于涉及深度遍历或复杂连接查询的场景,图数据库通常比传统关系型数据库提供更好的性能。
  • 灵活性和可扩展性:支持动态模式设计,允许轻松添加新的节点类型或关系而不需要重新设计整个数据库架构。
常见案例

Neo4j

Neo4j是目前最流行的原生图数据库之一,它提供了强大的Cypher查询语言,支持ACID事务,并且拥有良好的社区支持和文档资料。Neo4j被广泛应用于社交网络分析、推荐系统、路径查找等领域。

Amazon Neptune

Amazon Neptune是一个快速、可靠、完全托管的图数据库服务,支持Gremlin和SPARQL两种查询语言,适用于构建和运行需要高度互联数据的应用程序。

ArangoDB

ArangoDB是一款多模型数据库,支持键值、文档以及图形数据模型。它提供了一种统一的查询语言AQL,可以执行复杂的图形查询。

JanusGraph

JanusGraph是一个开源的分布式图数据库,专为存储和查询大规模图形数据而设计。它支持多种存储后端(如Apache Cassandra、HBase),并可以通过Gremlin进行查询。

使用场景

社交网络分析、推荐系统、路径寻找算法等,特别是当应用的核心在于理解数据之间的关系时。图数据库非常适合以下场景:

  • 社交网络分析:探索用户之间复杂的关系网,识别影响者或社群。
  • 推荐系统:基于用户行为和偏好建立个性化推荐模型。
  • 欺诈检测:识别异常模式或潜在欺诈行为,尤其是在金融交易中。
  • 知识图谱:构建和查询庞大的信息网络,如语义Web或企业知识库。
  • 供应链管理:优化物流网络,提高效率,减少成本。

选择图数据库时,应考虑数据模型的复杂性、查询需求、可扩展性要求等因素。正确选择图数据库可以帮助组织更有效地管理和分析其互联数据资产。

每种NoSQL数据库类型都有其独特的优势和适用场景,选择合适的类型取决于具体的业务需求和数据特性。随着技术的发展,越来越多的企业开始采用混合策略,结合多种NoSQL数据库类型乃至与传统的关系型数据库一起使用,以满足多样化的数据管理需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32956.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Chrome Flags 设置(适用于 HTTP 站点开发)

使用 Chrome Flags 设置(适用于 HTTP 站点开发) 在 Chrome 地址栏输入:chrome://flags/在搜索框输入 “Insecure origins” 或 “Allow invalid certificates”。找到 “Insecure origins treated as secure” 选项(或者 #allow-…

openharmony体验

openharmony5 去年已经出来了 如果以前做过android开发的,学起来不难,关键 1:环境 DevEco Studio 5.0.3 Beta2 https://developer.huawei.com/consumer/cn/deveco-studio/ win10_64bit CPU amd64(不是arm的) 2:安装 执行EXE 安装就行&#x…

【微知】plantuml在泳道图中如何将多个泳道框起来分组并且设置颜色?(box “浏览器“ #LightGreen endbox)

泳道分组并且着色 分组用 box和endbox ,颜色用#xxx,标注用"xxx" box "浏览器" #LightGreen participant "浏览器1" as Browser participant "浏览器2" as Browser2 endboxparticipant "服务端" as …

EngineerCMS完整版支持OnlyOffice8.2文档协作

这次从OO5.3那个时代的接口,改到支持8.2接口,颇费周折。centos升级和docker升级 - Powered by MinDoc (itdos.net) 1. 首先是升级centos 手动升级centos7内核(版本自行选择,亲测内核下载链接有效)_centos内核下载-CS…

仿TikTok推荐系统开发与部署

目录 1、对H&M零售数据集的简要介绍 2、个性化推荐的核心范式 3、引入双塔嵌入模型 4、理解4阶段推荐架构 4.1 第一阶段 4.2 第二阶段 4.3 第三阶段 4.4 第四阶段 5、将4阶段架构应用于我们的H&M案例 6、特征/训练/推理(FTI)架构 7、…

<03.13>八股文补充知识

import java.lang.reflect.*; public class Main {public static void main(String[] args) throws Exception {// 获取 Class 对象//1. 通过类字面量Class<?> clazz Person.class;//2 通过对象实例化String str "Hello";Class<?> clazz_str str.ge…

windows系统,pycharm运行.sh文件

博主亲身试验过&#xff0c;流程简单&#xff0c;可用。 需要pycharm &#xff0c;git。 注意需要Git Bash.exe &#xff0c;也就是Git Bash的应用程序&#xff0c;而不是快捷方式。 需要把这个应用程序的路径复制一下。可以通过右键&#xff0c;复制文件地址的方式。 接着在…

新闻网页信息抽取

1. 网页信息抽取 问题定义&#xff1a;对新闻网页&#xff08;输入为HTML&#xff09;提取结构化信息&#xff0c;包括标题、发布时间、作者、正文、图片等。 动机&#xff1a;由于网页&#xff08;大多数为HTML格式&#xff09;通常带有很多标签、样式、脚本等信息&#xff0…

Attention又升级!Moonshot | 提出MoE注意力架构:MoBA,提升LLM长文本推理效率

源自: AINLPer&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-13 更多&#xff1a;>>>>大模型/AIGC、学术前沿的知识分享&#xff01; 引言 对于大模型来说&#xff0c;有效扩展上下文长度对于实现通用…

人工智能与我何干

思考一下&#xff0c; 如果打破这样的磁场&#xff0c;当我焦虑的时候&#xff0c;总是想要看一些负面的内容&#xff0c;这是错误的&#xff0c;不应该这样做&#xff0c;要坚定自己的信念&#xff0c;我为什么和人工智能去争抢呢&#xff0c;不能和人工智能争抢&#xff0c;这…

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…

智能三防手持终端破解传统仓储效率困局

在数字化浪潮的推动下&#xff0c;传统仓储管理模式正面临效率低、成本高、错误频发等瓶颈。如何实现精准、高效、智能化的仓储管理&#xff0c;上海岳冉三防智能手持终端机以RFID技术为核心&#xff0c;结合工业级三防&#xff08;防水、防摔、防尘&#xff09;设计&#xff0…

13. Pandas :使用 to_excel 方法写入 Excel文件

一 to_excel 方法的相关参数 用它来指定要将 DataFrame 写入哪些工作表的哪些单元格&#xff0c;以及是否需要包含列标题和 DataFrame 索引。如何处理特殊值&#xff08;如 np.nan 和 np.inf&#xff09;。 1.指定工作表和单元格 sheet_name&#xff1a;指定将 DataFrame 写入的…

星越L_发动机舱开启及油液加注讲解

目录 1.拉手 2打开前机盖 3.冷却液加注口 4.玻璃水加注口 5.机油加注口 6.刹车油加注口 7.电瓶 1.拉手 中控台左下方有个拉手,拉动两次前机盖解锁。 2打开前机盖 向上抬打开前机盖。 3.冷却液加注口

基于Flink SQL的实时指标多维分析模型

数据流程介绍 1.创建源表kafka接入消息队列数据&#xff0c;定义字段映射规则&#xff1b; 2.创建目标表es_sink配置Elasticsearch输出&#xff1b; 3.通过多级视图&#xff08;tmp→tmp_dedup→tmp1/tmp2→tmp3→tmp_groupby&#xff09;实现数据清洗、去重、状态计算&#x…

专题|Python贝叶斯金融数据应用实例合集:随机波动率SV模型、逻辑回归、参数更新、绩效比较BEST分析亚马逊股票、普尔指数...

原文链接&#xff1a;https://tecdat.cn/?p41020 本专题合集系统梳理了贝叶斯方法在金融数据分析与分类建模中的前沿应用。合集聚焦于PyMC3概率编程框架&#xff0c;深度探讨了共轭先验参数更新、贝叶斯逻辑回归、贝叶斯夏普比率等核心算法在实际场景中的落地实践&#xff08;…

qwen2.5-vl使用vllm部署gradio页面调用

想在服务器上用vllm部署qwen2.5-vl, 然后使用gradio页面在本地调试&#xff0c;官方代码给了两条命令&#xff0c;列出的request body体结构&#xff0c; 不过要与gradio连用&#xff0c; 还需要重新组织代码。 官方服务代码如下&#xff1a; vllm serve Qwen/Qwen2.5-VL-7B-I…

论文笔记 - ULTRA-SPARSE MEMORY NETWORK

1、目前Transformer模型现状 dense模型相同激活参数下&#xff0c;性能远低于MOE模型&#xff0c;因此大家倾向于训练MOE模型虽然同激活参数下&#xff0c;MOE性能比dense好&#xff0c;但MOE模型内存访问高&#xff0c;因此推理速度相比dense要慢不少。比如top2的moe&#xf…

人工智能基础知识笔记四:聚类分析

1、什么是聚类分析&#xff1f; 聚类分析是一种将数据分组的技术&#xff0c;目的是让同一组内的数据点彼此相似&#xff0c;而不同组之间的数据点差异较大。你可以把它想象成整理一堆杂乱无章的物品&#xff0c;把相似的物品放在一起&#xff0c;比如把书放在一个书架&#x…

DeepSeek结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)转载

思维速览&#xff1a; 本文将详细介绍如何利用DeepSeek结合Mermaid语法绘制各类专业图表&#xff0c;帮助你提高工作效率和文档质量。 ▍DeepSeek入门使用请看&#xff1a;deepseek保姆级入门教程&#xff08;网页端使用 本地客户端部署 使用技巧&#xff09; DeepSeek官网…