Aerospike HDD/Memory 用法

Aerospike HDD/Memory usage

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


  1. 如果我在命名空间配置中设置:
    • 存储引擎设备
    • 内存大小4G
    • 文件/opt/aerospike/data/namespace.dat
    • 文件大小16G
    • 内存中的数据false

-> 所有数据将仅在磁盘上,"memory-size" 仅用于索引(少量使用),所有数据将存储在多个 16GB 文件中(将自动创建),并且最重要的 - 每个 read 查询都会触发从磁盘读取数据?


  1. 如果我在命名空间配置中设置:
    • 存储引擎设备
    • 内存大小4G
    • 文件/opt/aerospike/data/namespace.dat
    • 文件大小16G
    • 内存中的数据true

-> 所有数据将在磁盘上,部分在内存中,"memory-size" 将充当缓存并包含 4GB 最常用的数据,所有数据将存储在多个 16GB 文件中(这将自动创建),最重要的是 - 每个 read 查询都会触发检查内存中的数据,如果丢失 -> 从磁盘读取并添加到内存?哪些数据将存储在内存中 - 最常使用的还是最近创建的?


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

->所有数据都将只在内存中,我的数据限制为 4GB,不能再多了?

Aerospike 不像具有 "cache-first" 架构的第一代 NoSQL 数据库那样将数据移入和移出磁盘。 Aerospike 的hybrid memory architecture is such that the primary index(元数据)在内存中总是。根据命名空间配置,数据完整 存储在磁盘或内存中。您为每个命名空间定义存储。如果它在内存中,则所有数据和元数据都完全在内存中。如果命名空间将其数据存储在几个设备(/dev/sdb、/dev/sdc)上,则主索引(元数据)完全在内存中并且数据完全在这些 SSD 上。

(1)是硬盘上的数据,配置正确。如果您使用的是 SSD,您可能希望使用 device 而不是 file。在您的问题中,有一件事是不正确的,即 Aerospike 将首先检查 post-write-queue 读取。

Aerospike block writes to optimize around the high-read / low-write performance of HDD and SSD. The size of the block is determined by the write-block-size config parameter (should be 1MB for a HDD). The records are first loaded into a streaming write buffer of an equivalent size. After the buffer is flushed to a block on disk, Aerospike doesn't get rid of this in-memory copy immediately; it remains part of the post-write queue (FIFO). By default, 256 of those blocks are in the queue per-device, or per-file (you can define multiple file lines as the storage device). If your usage pattern is such that reads follow closely after the writes, you'll be getting in-memory access instead of disk access. If your cache_read_pct 指标不是个位数,并且您有 DRAM 备用,您可能可以从提高 post-write-queue 值(每个设备最多 2048 个块)中获益。

(2) 是内存中的命名空间,持久保存到磁盘。对于 (1) 和 (2),您可以使用 file(对于基于文件系统的存储)或 device(对于原始设备)。 (2) 的主索引(元数据)和存储(数据)都在内存中。所有的读取和写入都从内存中出来,二次写入到持久化设备。

filesize reserves the size of the persistence layer on the filesystem (if you chose to use file and not device). You can have multiple file lines, each of which will be sized from the start to the number given as filesize. memory-size 是命名空间使用的最大内存量。这不是预先保留的。 Aerospike 的内存使用量会随着时间的推移而增加和减少,命名空间的最大值为 memory-size.

看看 What's New in 3.11, specifically the section that touches on in-memory performance improvements. Tuning partition-tree-sprigs and partition-tree-locks 可能会提高内存中命名空间的性能。

(3) 是一个纯粹的内存命名空间,通常用作缓存。 4G 限制影响 stop-writes-pct, high-water-memory-pct as those are defined as a percentage of that limit (see evictions, expirations, stop-writes).

还有一个 (4) 计数器特例,称为索引数据。参见 storage engine configuration recipes