Memory management Aerospike硬盘/内存使用

Memory management Aerospike硬盘/内存使用,memory-management,aerospike,Memory Management,Aerospike,我正在探索Aerospike作为键值数据库,将数据存储在磁盘上以确保安全。请确认,我正确理解了这一点: 如果在命名空间配置中我设置了: 存储引擎设备 内存大小4G 文件/opt/aerospike/data/namespace.dat 文件大小16G 内存中的数据false ->所有数据将仅在磁盘上,“内存大小”仅用于索引(使用量小),所有数据将存储在多个16GB文件中(将自动创建),最重要的是,每次读取查询都将触发从磁盘读取数据 如果在命名空间配置中我设置了: 存储引擎设备 内存大小

我正在探索Aerospike作为键值数据库,将数据存储在磁盘上以确保安全。请确认,我正确理解了这一点:


  • 如果在命名空间配置中我设置了:
    • 存储引擎设备
    • 内存大小4G
    • 文件/opt/aerospike/data/namespace.dat
    • 文件大小16G
    • 内存中的数据false
  • ->
    所有数据将仅在磁盘上,“内存大小”仅用于索引(使用量小),所有数据将存储在多个16GB文件中(将自动创建),最重要的是,每次
    读取
    查询都将触发从磁盘读取数据


  • 如果在命名空间配置中我设置了:
    • 存储引擎设备
    • 内存大小4G
    • 文件/opt/aerospike/data/namespace.dat
    • 文件大小16G
    • 内存中的数据true
  • ->
    所有数据将存储在磁盘上,部分存储在内存中,“内存大小”将起到缓存的作用,包含4GB最常用的数据,所有数据将存储在多个16GB文件中(将自动创建),最重要的是,每次
    读取
    查询都会触发从内存中检查数据,如果丢失->从磁盘读取并添加到内存中?内存中会有哪些数据?使用最多的还是最新创建的


  • 如果在命名空间配置中我设置了:
    • 存储引擎内存
    • 内存大小4G
    • 内存中的数据true

  • ->
    所有数据都将仅存储在内存中,我仅限于4GB的数据,没有更多?

    Aerospike不像第一代NoSQL数据库那样,将数据从磁盘移入移出,这些数据库具有“缓存优先”的体系结构。Aerospike的(元数据)总是在内存中。根据名称空间配置,数据完全存储在磁盘或内存中。您可以为每个名称空间定义存储。如果它在内存中,则所有数据和元数据都在内存中。如果名称空间将其数据存储在几个设备上(/dev/sdb,/dev/sdc),则主索引(元数据)完全位于内存中,数据完全位于这些SSD上

    (1) 是硬盘上的数据,配置正确。如果您使用的是SSD,您可能希望使用
    设备
    而不是
    文件
    。在你的问题中有一件事是不正确的,那就是Aerospike将首先在读取时检查

    Aerospike致力于围绕HDD和SSD的高读/低写性能进行优化。块的大小由配置参数决定(对于HDD,应为1MB)。这些记录首先加载到一个同等大小的流式写入缓冲区中。缓冲区刷新到磁盘上的一个块后,Aerospike不会立即删除内存中的副本;它仍然是写后队列(FIFO)的一部分。默认情况下,每个设备或每个文件(您可以将多个
    文件
    行定义为存储设备)队列中有256个块。如果您的使用模式是读操作紧跟在写操作之后,那么您将获得内存访问而不是磁盘访问。如果您的度量不是个位数,并且您有可用的DRAM,您可能会从提高
    写后队列
    值(每个设备最多2048个块)中获益

    (2) 是内存中的命名空间,持久化到磁盘。对于(1)和(2),您可以使用
    文件
    (用于基于文件系统的存储)或
    设备
    (用于原始设备)。主索引(元数据)和存储器(数据)都位于(2)的内存中。所有的读写操作都会从内存中出来,而第二次写操作则会进入持久性设备

    保留文件系统上持久层的大小(如果选择使用
    文件
    而不是
    设备
    )。您可以有多个
    file
    行,每一行的大小将从开始到给定的编号
    filesize
    。命名空间使用的最大内存量。这不是预先预订的。Aerospike的内存使用量会随着时间的推移而增加和减少,命名空间的最大内存大小为
    内存大小

    请看一看,特别是涉及内存性能改进的部分。调优和可能会提高内存中名称空间的性能

    (3) 是一个纯粹的内存命名空间,通常用作缓存。4G限制会影响一些事情,例如,这些被定义为该限制的百分比(请参阅)


    对于称为“索引中的数据”的计数器,还有一(4)种特殊情况。请参阅。

    好奇您是如何得出16GB文件“将自动创建”的结论的,因为您不是第一个错误地推断出这一点的人。是否有一段文档需要注意?@kporter,文档中说,
    GiB中每个文件的最大大小
    ——这是特定名称空间的设置。因此,它只影响1个名称空间,如果我们必须手动创建DB文件,这将是非常奇怪的。您还声明它将存储在“多个文件”中,但只指定一个文件。我认为这意味着您已经确定,当Aerospike填充您指定的文件时,它将自动生成一个新文件。情况并非如此,您需要指定要Aerospike使用/创建的每个文件-您当前的配置将限制您使用单个16 GiB文件。@kporter,谢谢。当时我错了,我真的在想,当第一个文件已满时,将创建新文件。类似于
    filename\u 1
    filename\u 2
    等。当我获得超过16GB的数据时,最新的条目会发生什么?他们会覆盖最旧的吗?我如何知道文件何时接近满?存储已主动进行碎片整理。Aerospike提供培训课程:。对于这个话题,我建议你阅读和阅读。谢谢你的详细回答!还有一些问题:
    (1)
    文件大小是对总数据库数据大小的限制还是对1的限制