Aerospike学习笔记

news2024/11/24 20:47:51

1 概述

  • Aerospike 是一个分布式、可扩展的数据库。该架构具有三个关键目标:
    • 为网络规模的应用程序创建灵活、可扩展的平台。
    • 提供传统数据库所期望的稳健性和可靠性(如 ACID)。
    • 以最少的人工参与提供运营效率。
  • 文档链接:https://docs.aerospike.com/

1.1 Aerospike架构

  • Aerospike架构主要包括三层:客户端层、集群和数据分布层、数据存储层

  • 客户端层:此集群感知层包括开源客户端库,这些库实现 Aerospike API、跟踪节点并了解数据在集群中的位置。

    1. 实现 Aerospike API、客户端-服务器协议,并直接与集群对话。
    2. 跟踪节点并了解数据存储位置,立即了解集群配置的更改或节点何时启动或关闭。
    3. 实现自己的 TCP/IP 连接池以提高效率。还检测尚未达到集群中节点故障级别的事务故障,并将这些事务重新路由到具有数据副本的节点。
    4. 将请求直接透明地发送到包含数据的节点,并根据需要重试或重新路由请求(例如,在集群重新配置期间)

    这种架构减少了事务延迟,减轻了集群的工作负担,并消除了开发人员的工作量。它确保当节点启动或关闭时应用程序不必重新启动。您不必浪费时间进行集群设置或添加集群管理服务器或代理。

  • 集群和数据分布层:管理集群通信并自动执行故障转移、复制、跨数据中心复制 (XDR) 以及智能重新平衡和数据 迁移。数据分布层旨在通过所有集群管理功能的系统自动化来消除手动操作。它包括三个模块:

    1. 集群管理模块:跟踪集群中的节点。关键算法是基于 Paxos 的gossip-voting过程,用于确定哪些节点被视为集群的一部分。Aerospike 实施特殊的心跳(主动和被动)来监控节点间连接。

    2. 数据迁移模块:当您添加或删除节点时,Aerospike 数据库集群成员身份将被确定。每个节点使用分布式哈希算法将主索引空间划分为数据片并分配所有者。Aerospike 数据迁移模块智能平衡集群中所有节点的数据分布,确保每一位数据在所有集群节点和数据中心之间复制。此操作在系统复制因子配置中指定。

    3. 事务处理模块:根据请求读写数据,并提供一致性和隔离性保证。该模块负责

      • 同步/异步复制:对于具有即时一致性的写入,它会在提交数据并将结果返回给客户端之前将更改传播到所有副本。
      • 代理:在极少数情况下,在集群重新配置期间,客户端层可能会短暂过时,事务处理模块会透明地将请求代理到另一个节点。
      • 重复数据的解决:对于从分区中恢复的集群(包括重新启动节点时),该模块可以解决不同数据副本之间的任何冲突。分辨率可以基于生成计数(版本)或上次更新时间。

      一旦第一个集群建立起来,您就可以在其他数据中心安装其他集群并设置跨数据中心复制,以确保如果数据中心出现故障,远程集群将接管工作负载,同时对用户造成的干扰最小或不会造成干扰

  • 数据存储层:该层可靠地将数据存储在DRAM和闪存中,以便快速检索。Aerospike 是一个具有无模式数据模型的键值存储。数据流入策略容器、命名空间,它们在语义上类似于RDBMS 系统中的数据库。在命名空间内,数据被细分为集合(RDBMS)和记录(RDBMS)。每条记录都有一个在集合中唯一的索引,以及一个或多个保存与该记录关联的值的命名容器(RDBMS列)。

    1. 您不需要定义集合和容器。为了获得最大的灵活性,可以在运行时添加它们。
    2. bin 中的值是强类型的,可以包含任何受支持的数据类型。bin 没有类型化,因此不同的记录可以具有包含不同类型值的相同 bin。
    3. 在 Aerospike 中:
      • 1亿个密钥仅占用6.4GB。尽管密钥没有大小限制,但每个密钥仅有效存储在 64 字节中。
      • 本机、多线程、多核 Flash I/O 和Aerospike 日志结构化文件系统利用低级 SSD 读写模式。为了最大限度地减少延迟,磁盘写入是在大块中执行的。此机制绕过了标准文件系统,该系统过去一直调整为旋转磁盘。
      • 智能碎片整理程序和清除器协同工作,确保 DRAM 中有空间,并且数据永远不会丢失并始终安全地写入磁盘。
        • 智能碎片整理程序:跟踪每个块中的活动记录数量并回收低于最低使用级别的块。
        • Evictor:如果系统超出设定的高水位线,则删除过期记录并回收内存。过期时间是按命名空间配置的。记录年龄是从最后一次修改开始计算的。应用程序可以覆盖默认生命周期并指定永远不应驱逐记录。
  • 在传统(非分布式)RDBMS 中,安装数据库软件后,您可以设置数据库模式并创建数据库和表定义。Aerospike 数据库则完全不同。在分布式数据库中,数据在集群中的所有服务器之间划分(分布)。这意味着您不能简单地登录服务器来访问所有数据。使用 Aerospike,您可以创建和管理数据库:

    • 通过配置初始数据库设置。Aerospike 数据库是命名空间。安装 Aerospike 时,集群中的每个节点都必须配置每个命名空间,以指定如何创建和复制数据库。重新启动服务器后,数据库就会创建。
    • 通过您的应用程序执行数据库操作。
      • 当您的应用程序首次引用集合容器(表和字段)时,将创建数据库模式。
      • Aerospike 数据库是一个灵活模式-您不必预定义数据库模式。例如,要添加新的 bin(字段),您的应用程序只需开始将数据存储在指定的 bin 中。在 Aerospike 数据库中,通常由 DBA 在命令行上完成的任务都在您的应用程序中完成。
    • 根据需要更新配置文件。
      • 要更改命名空间参数,只需动态更新配置文件(无需重新启动)或使用新配置文件重新启动服务器即可。
  • 如果您向集群添加节点或删除节点进行升级或维护,集群会自动重新配置。当一个节点发生故障时,集群中的其他节点会重新平衡工作负载,并将影响降至最低。

1.2 Aerospike的混合存储

  • Aerospike 可以将数据存储在以下任何类型的介质及其组合上:

    • 动态随机存取存储器(DRAM)。
    • 非易失性内存扩展 (NVMe) 闪存或固态硬盘 (SSD)。
    • 持久内存 (PMem)。
    • 传统的旋转媒体。

    混合内存系统包含存储在每个节点中的索引和数据,处理与物理存储的交互,包含用于自动从数据库中删除旧数据的模块,并对物理存储进行碎片整理以优化磁盘使用。

  • 尽管将索引和数据存储在 PMem 中似乎是一个显而易见的选择,但它们的优点有所不同。最好将它们的特性(以及 NVMe 闪存)与客户端应用程序的数据模型相匹配。放置主索引和数据的可能性的完整矩阵如下表所示。并非所有可能性都有意义:与某些用例匹配的可能性以蓝色突出显示,并在下面详细说明。
    在这里插入图片描述

    从右下角开始,使用全 PMem 配置几乎没有什么缺点。性能与 DRAM 相当,但每比特成本更低,并且无需放弃持久性或重新启动后的快速恢复:只需几分钟而不是几小时。更高的性能可以通过多种方式发挥作用,不仅限于以下方式:

    • 每个节点的交易更多:随着流量的增长,升级更少。
    • 每笔交易的计算量更大,例如更丰富的广告技术或欺诈检测模型。

    另一种可能性是在过去需要实时性能的应用程序中启用强一致性 (SC) 模式或持久写入。即使 SC 不是绝对要求,为了提高运营效率,经济高效地部署它也可能是值得的。PMem 中数据的最终限制因素是处理器支持的数量。最新一代的 Xeon Scalable 2 (Cascade Lake) 处理器每插槽最多支持 3 TiB:即使使用多插槽系统,也无法容纳非常大的数据库。可能还存在经济方面的考虑,因为支持大地址空间的至强处理器会带来溢价。对于非常大的数据库,将所有 PMem 专用于主索引是更好的选择。它比 DRAM 更具成本效益,可扩展到更大的数据集,并保留了无需重建索引而实现快速重启的优势。即使在 PB 级规模,由于 Aerospike 对块模式闪存存储进行了优化,性能也非常出色。

    1. 不同的命名空间可以有不同的存储引擎。例如,您可以在 DRAM 中配置小型、频繁访问的命名空间,并将较大的命名空间放在较便宜的存储中,例如 SSD。在 Aerospike 中:

      • 记录数据存储在一起。

      • 一行的默认存储大小为 1 MB。

      • 存储是写时复制的。

      • 碎片整理期间会回收可用空间。

      • 每个命名空间都有固定的存储量,每个节点在每台服务器上必须有相同的命名空间,这就要求每个命名空间有相同的存储量。

    2. 纯 DRAM 存储(无持久性)可提供更高的吞吐量。尽管现代闪存存储的性能非常高,但 DRAM 的性能更好,但价格却高得多(特别是包括电力成本)。Aerospike 使用 JEMalloc 分配数据,允许分配到不同的池中。长期分配,例如存储层,是可以单独分配的。JEMalloc 具有极低的碎片特性。Aerospike 通过使用 DRAM 的多个副本来实现高可靠性。由于 Aerospike 在发生故障时或在集群节点管理期间自动重新分片和复制数据,因此获得了高级别的*k-safety 。*当节点恢复在线时,其数据会自动从副本填充。Aerospike 使用随机数据分布来在多个节点丢失非常小的情况下保持数据不可用。在此示例中,我们有一个 10 节点集群,其中包含两个数据副本。如果两个节点同时丢失,复制前不可用的数据量约为数据量的2%或1/50。对于持久存储层,读取始终从 DRAM 中的副本进行。写入通过下述数据路径进行。

    3. 当从客户端接收到写入(更新或插入)时,会在该行上获取锁存器,以避免对该集群的同一记录进行两次冲突的写入(在网络分区的情况下,可能会采取冲突的写入来提供可用性) ,稍后解决)。在某些集群状态下,可能还需要从其他节点读取数据并解决冲突。写入验证后,记录的内存表示在主服务器上更新。将要写入设备的数据放置在缓冲区中进行写入。当写入缓冲区已满时,它会排队到磁盘。写入缓冲区大小(与最大行大小相同)和写入吞吐量决定未提交数据的风险,并且配置参数允许刷新这些缓冲区以限制潜在的数据丢失。然后副本及其内存索引会更新。Aerospike 碎片整理程序跟踪磁盘上每个块上的活动记录数,并回收低于最低使用级别的块。

    4. Aerospike 企业版 4.8 支持将记录数据存储在英特尔® 傲腾™ DC 持久内存 (PMem) 中。Optane 将类似于 DRAM 的字节寻址能力和访问时间与闪存 NVMe 存储的持久性和密度结合在一起。您可以在英特尔®傲腾™持久内存中了解有关持久内存的更多信息。在早期版本中,Aerospike 支持将主索引存储在 PMem 中。Aerospike 4.8 版将 PMem 支持扩展到记录数据本身。它们相结合,提供无与伦比的性能,同时保留持久性和快速重启功能。

1.3 Aerospike的数据模型

  • Aerospike的数据模型:Aerospike 数据库不需要传统的 RDBMS 模式。相反,数据模型是通过您对系统的使用来确定的。例如,如果您想要向记录添加新的数据类型,您可以将该数据类型写入该记录,而无需先更新任何架构。

  • 命名空间:命名空间是顶级数据容器。在命名空间中收集数据的方式与数据的存储和管理方式有关。命名空间包含记录、索引和策略。策略规定命名空间行为,包括:

    • 数据如何物理存储。
    • 一条记录存在多少个副本。
    • 当记录过期时。

    数据库可以指定多个命名空间,每个命名空间都有不同的策略来适应您的应用程序。您可以考虑将数据绑定到存储设备的命名空间物理容器。在命名空间中,记录可以属于称为set 的可选逻辑容器。集允许应用程序对集合中的记录进行逻辑分组。集继承其命名空间定义的策略。您可以定义特定于该集合的其他策略或操作。例如,可以为特定集合指定二级索引,或者可以对特定集合进行扫描操作。命名空间中的记录不必位于集合中,而只需属于该命名空间即可。

  • 记录是数据库中的基本存储单位。记录可以属于命名空间或命名空间内的集合。单个记录由键唯一标识。记录由以下部分组成:

    在这里插入图片描述

    使用客户端,应用程序通过提供记录的key(或摘要)以及一个或多个操作(在原子事务中)对存储在数据库中的记录执行操作。每条记录包含以下元数据:

    • 生成计数跟踪记录修改周期,即它的“沿袭”。读取时,生成计数将返回给应用程序,应用程序可以使用检查和设置 (CAS) 模式,使用它来确保自上次读取以来要写入的数据未被修改。
    • 生存时间 (TTL) 指定记录的可选过期时间。从 Aerospike 数据库版本 4.9 开始,默认情况下禁用过期。如果使用TTL,则每次写入记录时都会重置。对于服务器版本3.10.1及以上版本,客户端可以设置策略,在更新记录时不修改TTL。
    • 最后更新时间 (LUT) 指定更新记录的时间戳。该元数据位于数据库内部,不会直接返回给客户端。
  • 记录数据存储在 bin 中。Bin 由名称和值组成。bin 不指定数据类型,而是由 bin 中包含的值定义数据类型。这种动态数据类型为数据模型提供了灵活性。例如,记录可以包含带有字符串值bob的 bin id。bin 的值始终可以更改为不同的字符串值,但也可以更改为不同数据类型的值,例如整数。没有模式,因此每个记录都可以有自己不同的存储箱集。您可以随意添加和删除垃圾箱。Bin 值可以是本机支持的任何一种数据类型。

1.4 Aerospike的主键索引

  • 什么是主键索引:主键索引是分布式哈希表技术与每个服务器中的分布式树结构的结合。命名空间中的整个键空间通过强大的哈希函数分为多个分区。总共 4096 个分区均匀分布在集群节点上。有关散列和分区的详细信息,请参阅数据分布。Aerospike 使用称为sprig的红黑内存结构。对于每个分区,可以配置数量的分支。配置正确数量的分支是内存开销和优化并行访问之间的权衡。主索引位于称为指定主键*摘要的 20 字节哈希上。*虽然这会扩展某些记录的密钥大小(例如,只有 8 字节的整数密钥),但它是有益的,因为无论输入密钥大小或分布如何,代码操作都是可预测的。当一台服务器发生故障时,另一台服务器上的索引立即可用。如果发生故障的服务器保持关闭状态,数据将开始重新平衡,并在新节点上构建复制索引。

1.5 Aerospike的二级索引

  • 什么是二级索引:二级索引(SI) 是一种数据结构,它根据记录中的 bin 值来定位名称空间中的所有记录或其中的一组记录。当索引记录中的值更新时,二级索引会自动更新。在 Aerospike 数据库服务器 6.0 中,SI 查询结果不受集群状态的影响。当集群稳定时以及集群大小变化后的数据迁移过程中,按分区查询会返回正确的结果。在服务器 6.0 中,需要兼容的客户端(例如 Java 客户端 6.0)来支持重新平衡容忍查询。受益于二级索引的应用程序包括丰富的交互式业务应用程序和面向用户的分析应用程序。二级索引还支持商业智能工具和对操作数据集的即席查询
  • 为什么要使用二级索引:扫描大量数据可能会花费大量时间,并且当 SI 查询扫描表中的每个文档或条目时,可能会对性能产生负面影响。通过读取表中的每个文档或条目来查询大量数据在时间和性能方面都非常昂贵。Aerospike 二级索引可保证更快的响应时间,因为它们可以通过主键以外的字段有效访问更广泛的数据。
  • Aerospike二级索引:
    • 存储在动态随机存取存储器 (DRAM) 中以便快速查找。
    • 构建在集群中的每个节点上,并与主索引位于同一位置。每个二级索引条目仅包含对该节点本地记录的引用。
    • 包含指向节点中主记录和复制记录的指针。
    • 位于 bin 值上,允许建模一对多关系。
    • 逐个指定容器(例如,使用 Rational Database Management System (RDBMS) 列)以实现高效更新以及存储索引所需的最少量资源。使用 Aerospike 工具或 API 根据 bin 和数据类型动态创建和删除索引。索引条目经过类型检查。例如,一个应用程序可以将用户年龄存储为字符串,另一个应用程序可以将用户年龄存储为整数。整数索引排除以字符串形式存储的记录,而字符串索引则排除以整数形式存储的记录

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux —— 理解pthread库和底层逻辑】

Linux —— 理解pthread库和pthread_t 理解pthread库pthread库是一个动态库底层逻辑 LWPpthread_tpthread_t的概念pthread_t 的实现pthread_t 与 LWP 的关系 独立的栈空间管理 理解pthread库 pthread库是一个动态库 使用下面指令可以查找的系统目录下的库信息 ls /lib/x86_6…

海康VisionMaster使用学习笔记2-相机取图及参数设置

相机取图及参数设置 1. 关联相机-相机管理界面 除了以上两类外,第三方相机都可以通过全局相机进行连接 2. 相机参数设置 相机连接 跨网段IP,枚举 图像缓存数量 实时取流,断线重连 只有支持组播的相机才可以实时取流 触发设置 触发源 LINE0 可以保护电路 LINE2 可配置输入输出…

笔记(day21) 多线程以及锁的概念(超级完整版)

一、 多线程 1.1 程序,进程,线程 程序:一堆命令的集合,完成某个特定任务,是静态的,保存在硬盘中 进程:是程序的一次执行过程,就是把程序载入内存中执行,就是进程,是动态的 线程:是进程进一步细化,是程序内部的一条执行分支 如果一个进程同一时间执行多个线程,就是支持多线程 我…

简单测试AOP五种增强执行时机

1. 目标方法类,spring代理bean Component public class Test {public void test(){System.out.println("test 目标方法");}public void testException(){throw new RuntimeException();} } 2. 配置类 Configuration ComponentScan EnableAspectJAutoPr…

查询满足连续任意30天的全量交易的多个商户

需求说明: 先说表结构把,就是一张订单表存了商户号和其他相关信息,现在要查询这个订单表中以商户为主体的连续交易,也就是每天产生至少一笔订单的商户才算连续,不知道看到的小伙伴有没有什么想法和头绪,在一…

【C++进阶】map与set的封装实践

文章目录 map和setmapmap的框架迭代器operator()operator--()operator()和operator!()operator*()operator->() insertbegin()end()operator[] ()map的所有代码: set的封装迭代器的封装总结 map和set 通过观察stl的底层我们可以看见,map和set是通过红…

ubuntu16.04安装ibus拼音 输入法

前言 开始尝试搜狗输入,发现问题很多,放弃。网上说ibus比较稳定,决定安装ibus输入法。 步骤 安装ibus,使用如下命令, 安装完重启系统,使ibus生效; sudo apt install ibus ibus-pinyin ibus-table ibus-…

maven项目删除pom文件的依赖仍存留在项目中的解决方案【已解决】

前言 使用了pagehelper和mybatisplus的分页插件,起冲突了,想着注释掉pagehelper然后刷新maven,发现一直存留 mlgbz的 试了好多方法,什么缓存乱七八糟的,我以为出bug了 解决

Fiddle抓手机app的包

前言 本次文章讲述的是,fiddle获取手机代理,从而获取手机app的http、https请求! 一.下载安装汉化Fiddle 1.点击Fiddler官网下载链接:Download Fiddler Web Debugging Tool for Free by Telerik 2.直接运行,选择自己需…

CUDA C++ 编程指南学习

CUDA C 编程指南 (nvidia.com)https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html 2. 编程模型 2.1. 内核 CUDA C 扩展了 C,允许程序员定义 C 函数,称为内核,当被调用时,N 个不同的 CUDA 线程并行执行 N 次&am…

2023卫星视频综述论文Recent Advances in Intelligent Processing of Satellite Video

2023卫星视频综述论文Recent Advances in Intelligent Processing of Satellite Video 1.摘要2.引言3. 文章的定量分析4 难点与挑战5 方法论系统A. 卫星视频观察的特点B. 卫星视频目标跟踪与运动估计C. 卫星视频目标检测D. 卫星视频超分辨率 (VSR)E. 卫星视频目标分割&#xff…

Idea新建Spring Initializr项目文件哪些可删

​ .gitignore 用git做版本控制时 用这个文件控制那些文件或文件夹 不被提交(不用git的话可删除 没影响)HELP.md md是一种文档格式 这个就是你项目的帮助文档(可删除 没影响) mvnw linux上处理mevan版本兼容问题的脚本&#xff0…

企业高性能web服务器

web服务器介绍 Apache HTTP Server:也称为Apache,是一个开源的HTTP服务器,目前是全球使用最广泛的Web服务器 Nginx:Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 Microsoft Internet Inform…

LVS原理详解及实战部署

一、LVS简介 LVS(Linux Virtual Server)是一种基于Linux的高性能虚拟服务器集群系统,主要用于实现负载均衡。LVS通过Linux内核中的IPVS模块实现了基干!P负载均衡的功能,能够将来自网络的请求分配给后端的多个服务器,从而提供高可用性和伸缩性…

Linux系统编程:线程 3:信号量

1.信号量的概念 信号量是线程间有顺序的协调工作,信号量 (个数) 反映的是资源的数量,信号量起到锁的效果; 2.信号量的机制 (1)信号量描述可使用资源的个数; (2)p操作&#xff0c…

第二证券:全球首款双人互动剧上线 暑期游戏持续升温

全球首款双人互动剧上线 全球首款双人互动剧《谍影成双》现已在全球游戏渠道Steam、微信小程序、QQ小程序同步上线。根据上海影视乐园官方大众号,该作是2023年度爆款互动剧《飞越13号房》制造团队互影科技的全新著作。 2023年被称为互动剧的元年,“互动…

python学习day15地图、柱状图

地图、柱状图 地图示例 柱状图XY轴反转小结 时间线柱状图自动播放小结 动态柱状图sort排序练习动态柱状图 地图 from pyecharts.charts import Map mapMap() data[(北京市,999),(上海市,133),(河南省,123),(西藏自治区,123),(吉林省,12), ]map.add("地图",data,"…

ElasticSearch数据建模

文章目录 如何处理关联关系避免过多字段避免正则/通配符/前缀查询避免空值引起的聚合不准为索引的Mapping加入Meta 信息 如何处理关联关系 Object: 优先考虑反范式(Denormalization) Nested: 当数据包含多数值对象,同时有查询需求 Child/Pa…

SAP BAPI for Tcode SM12

注意:ENQUE_READ 和 ENQUE_READ2 的table ENQ是两个不同的结构 想通过 ENQUE_READ2 读取结构然后去删除 ENQUE_DELETE的 要注意不能直接用 要用 ENQUE_CONVERT_SEQG7_TO_SEQG3 进行转换 FUNCTION ENQUE_CONVERT_SEQG7_TO_SEQG3. *"-----------------------…

[000-01-030].第2节 :Zookeeper本地安装

1.Zookeeper下载地址 1.Zookeeper官网地址 2.会显示Zookeeper的一些版本 2.Zookeeper本地模式安装: 2.1.Zookeeper安装前准备 1.在Centos7虚拟机中安装jdk8 2.2.Zookeeper安装过程: 1.下载zookeeper压缩版本,解压放在opt/moduel目录下…