混合存储

混合存储系统拥有存储在每个节点中的索引和数据,并处理与物理存储相互作用。它还包含模块,自动从数据库中删除旧数据,并整理物理存储优化磁盘使用情况。

aerospike数据可以存储在DRAM中,传统的介质,和SSD数据,并且每个namespace[命名空间]能分别配置。这种配置的灵活性,允许应用开发者把一个经常访问的namespace放在DRAM,而是把更大的空间在成本较低的存储,例如SSD。

并优化数据存储在SSD上,包括绕过文件系统利用低级SSD读写模式。

原理

记录的数据被存储在一起。每行的存储量是默认为1MB大小的

存储采用写时复制技术,并且通过碎片整理过程将回收空余的空间

每个namespace配置有存储的固定量。每个节点必须具有在每个服务器相同的名称namespace和存储相同量的每个命名空间

每个名称空间配置了一个固定大小的存储空间。每个节点必须具有相同的namespaces,每个namespaces必须有相同的存储数量。

存储器可以配置纯DRAM,但是不能持久化,要是DRAM存储具有持久性,可以使用闪存(SSD)。 持久性存储(磁盘)必须是Flash或其他高性能的块存储设备(云),或可以在任何存储设备的文件。

数据在内存

数据纯粹在DRAM中 - 不具有持久,但是具有更高的吞吐量的好处。虽然 Flash storage是有非常高的性能,但是DRAM甚至更高的性能,而且DRAM的价格持续下降。

数据通过jemalloc分配器分配。jemalloc允许分配到不同的存储池。长期分配-如存储层-可以单独分配。我们发现jemalloc分配器能内存产生较低碎片的独特功能。

通过使用DRAM的多个副本,可以获得非常高的可靠性。aerosipke自动reshards和复制失败或集群节点上的数据,可以获得高水平的“k-safety”。使一个节点重新上线自动填充的数据从一个副本中。

由于aerosipke的随机数据分发,数据unavailbility时丢失几个节点可以是相当小的。例如,在具有两个拷贝的数据,如果两个节点都很快就失去了,一个10节点的集群然后数据不可用的量为复制为约2%前 - 中的数据的1/50

数据在固态硬盘/闪存

数据存储

Flash的优化

基于存储的驱逐

碎片整理程序跟踪对磁盘上的每一块活动的记录数,并回收块从而保证低于最低水平的使用。如果系统变得超出设定的高水位标记,驱逐者(Evictor)负责清除引用和内存回收过期记录。当配置一个namespace,管理员指定用于namespace的DRAM的最大空间,以及namespace中的数据默认存活时间。在正常的操作下的驱逐者寻找已过期的数据,释放内存和磁盘空间。驱逐者(Evictor)还跟踪namespace使用的内存,并释放旧的,虽然不一定过期,存储的数据大小如果在内存中超过设定的标记警戒值。则通过允许逐出删除最旧的数据,系统达到内存限制,aerospike可有效地用作LRU缓存。

请注意,record的存活时间长度市从上一次被修改的开始计算,并且该应用程序可以重写任何时间它将数据写入记录的默认寿命。应用程序也可以告诉一个特定的记录不应该被自动驱逐系统。