2016-03-07 136 views

回答

1

Couchbase将数据存储在磁盘和RAM中。默认行为是将文档存储在RAM中后,在某个任意时间(通常很快)将文档写入磁盘。这留下了一个短暂的窗口,其中节点故障可能导致数据丢失。我在Couchbase的当前版本的文档中找不到任何内容,但过去一直是您可以请求“set”方法,只有在数据保存到磁盘后才能完成(默认为仅限RAM)。

在任何情况下,写入RAM后,文档最终都会写入磁盘。 Couchbase保留一个disk write queue,您可以在管理控制台的度量报告页面上检查它。现在,CB确实跨群集同步写入,并且我相信在Couchbase确认写入发生之前(例如在写入方法返回给调用者之前),写入将在群集中同步。此外,文档很难确定,因为之前的版本文档更加详细。

如果您的文档多于可用内存,则只有最常访问的文档才会存储在内存中以便快速检索,其他所有文档都会被逐出磁盘。

+0

Couchbase在“任意时间”不会写入磁盘。它以尽可能快的速度写入磁盘。是的,有一些操作系统级别的磁盘队列,但这是不可避免的。此外,Couchbase不只是将数据写入RAM,而是写入一个托管缓存。具体来说,它使用混合memcached为此。除此之外还有更多,但你明白了。 – Kirk

+0

@Kirk - 谢谢你的澄清 - 要清楚,“任意”这个词在数学意义上是指“非确定性的或未指定的”,而不是没有逻辑。是的,当它使用memcached时,其要点是数据存储在RAM中,而不是在较慢的物理介质上。 – theMayer

2

Couchbase架构是内存第一\ Cache通过。 您无法决定是否使用内存,并且尽快将数据写入磁盘。 部分原因是您需要有足够的内存来存储您拥有的数据量。

你确实有一些策略,如完全或价值驱逐,但你又没有控制权。

但是你可以做的是在SDK中等待,直到数据被复制\持久化到磁盘。

+0

感谢Roi。例如,如果我拥有100 GB的内存,那么在将内存刷新到磁盘之前,数据是否保留在内存中直到达到100 GB的限制? –

+1

不完全。 存在什么叫做高水位(假设存储桶分配的内存的80%),在达到它之后,根据驱逐策略,完整文档(元数据)被驱逐或者只是数据。 –

+0

再次感谢Roi! –