我将回答您的问题,因为我将列出更高层次的流对象,通过Couchbase到磁盘的方式。
- 对象被应用程序写入托管缓存。
- 同时,指向该对象的指针被放置到队列(磁盘写入队列)中,以便将对象持久化到DB存储引擎(目前称为Couchstore )。指针也被放入复制队列中,以将该对象复制到副本中,但这是另一种讨论。
- 根据服务器资源,即磁盘写入速度,对象将被移动到Couchstore。如果传入的数据量很大且磁盘速度较慢,则磁盘写入队列可能会变得相当大。这是一个需要作为调整集群规模的一部分来看待的领域。这不仅仅是关于原始读/写速度,还包括队列是如何填充和耗尽的。您希望磁盘填充和排水速率尽可能接近,磁盘写入队列尽可能接近0。如果要使用PERSIST_TO样式的写操作,这一点尤其重要。
- 一旦它到达Couchstore,它就会持久化到磁盘上。这里有一些批次,如果我没记错的话,每个vBucket有1000个批次。这是为了提高性能。另外,虽然有一个OS缓冲区(我在之前使用该术语时不正确),Couchbase并不依赖它,但是在每个批处理之后都有一个fsync。
需要记住的一点是,几乎所有这些都可以使用Admin进行监视,或者在WebUI中查看。这些都是很好的候选人,如果你关心业绩的话,就会被持续的监控。