Couchbase权威指南(七)

磁盘存储

为了提高性能,Couchbase倾向于在内存里存储数据和提供服务。然而,很难保证有足够的资源可以做到这点。比较常见的做法是把经常使用的工作数据存放在内存,并且快速响应给客户端。

除了尽可能多的存放数据在内存外,couchbase也保存数据到磁盘。磁盘持久性允许更容易的备份/恢复操作,也允许数据量增大到超过内置cache层的容量。

Couchbase自动在内存和磁盘间转移数据(在后台异步执行),保持经常使用的数据在内存,不经常使用的数据在磁盘。couchbase经常监控客户端访问的信息,让活跃的数据保留在cache层内。

将数据从cache里删除,腾出空间给更活跃信息使用的过程叫做ejection(前面的章节已描述)。通过couchbase集群里每个bucket的预先设定的阈值来决定何时执行ejection.

使用磁盘存储引发的问题是,客户端在请求文档ID时,必须知道信息是否存在。couchbase使用元数据结构来解决这个问题。元数据里存储了数据库里每个文档的信息,并且元数据位于内存里。这意味着假如文档ID无效,服务器可以立刻返回”document ID not found”消息。当然,如果文档有效,那么要么从内存里立刻返回,要么先从磁盘读取到内存再返回(从磁盘读会产生延时,或者导致超时)。

转移数据到磁盘的过程是异步的。在couchbase提供服务的同时,数据在后台异步转移到磁盘。如果并发写往数据库的量很大,客户端可能收到服务器内存临时不够的通知,直到更多数据转移到磁盘,内存有剩余为止。

类似的,假如couchbase需要从磁盘加载数据回内存,这个过程也是在后台发生的,后台进程从队列里读取请求,然后从磁盘读取数据装载回内存。客户端一直等待,直到数据加载到内存,然后返回给客户端。

这种异步机制以及使用队列的方式,使得读写处理非常快,从而消除了典型的负载和性能尖峰,这通常是造成RDBMS性能不稳定的原因。

此条目发表在Common分类目录,贴了标签。将固定链接加入收藏夹。