我知道Couchbase的很大一部分性能来自于提供内存文档和我的许多数据类型,这似乎是一个完全合理的愿望,但考虑到用户数据如何扩展和使用我想知道是否计划只有一小部分用户文档在内存中是合理的。我想在任何时候都可能只有10-15%。考虑到这是一个合理的假设吗?
更新:
一些额外的背景:
总之,我会说大多数用户触发的交易文件很少被查询,但有一个核心集 - 在过去24-48小时内产生的记录与当前“登录”组相关 - - 这将成为记忆中的重要好处。
两个子问题是:
答案 0 :(得分:2)
首先,CB的一个主要好处是它分布在多个节点上。这也意味着您的查询分布在多个节点上,因此您可以获得性能提升(我知道其他几个类似的nosql跨节点传播 - 所以可能与您的比较无关?)。
接下来,我相信这个问题有点过于宽泛,因为我认为答案真的取决于你的用法。给定用户是否只是随机查询一次他的数据?如果是这样,那么根据你的情况,10-15%的时间内只会有记忆中的好处。相反,如果用户在网站上,他们可能会多次查询他们的数据,这有一定的性能优势。
无论如何,Couchbase具有非常快的磁盘访问性能,特别是在SSD上,所以它可能没有太大的区别,但是没有具体细节也没有办法确定。如果它是一个相对较小的文档大小,如果它涉及用户等待其中一个加载,那么用户肯定不会注意到文档是从RAM还是磁盘加载。
Here是一篇关于CB针对类似nosql平台的基准测试的有趣文章。
在阅读了您的其他背景信息之后,我认为您的场景几乎完全符合Couchbase的设计运行方式。从驱逐的角度来看,CB将最新且最常访问的项目保存在RAM中。当RAM填满新的和/或旧的项目时,最老的和最不频繁访问的被“逐出”到磁盘。 Couchbase手册中的This link解释了有关其工作原理的更多信息。
我认为你与Couchbase走在正确的轨道上 - 无论如何,它的扩展灵活性很容易让你将数据库调整到你的应用程序。我真的认为你不会在这里出错。
关于你的两个问题:
答案 1 :(得分:2)
基本上,您正在做出决定的是调整Couchbase群集的存储区RAM大小,并允许降低驻留率(RAM中文档值的百分比),并使用缓存未命中从磁盘提取。
但是,这种情况也有一些警告。你基本上也会有相对稳定的高速缓存驱逐"哪里"最近没用过"当您将缓存丢失的文档从磁盘拉入RAM时,将从RAM缓存中删除这些值。这是因为您将始终浮动在Bucket RAM配额的高水位线上。如果您同时具有较高的写入速度(新的/更新的数据),则还需要保留它们。如果写入速度超过您的驱逐/检索容量,这两个进程可以竞争磁盘I / O,如果您实际上无法快速驱逐以便为新写入打开RAM,则SDK客户端将收到临时OOM错误。当您横向扩展时,由于您在更多计算机上同时执行此过程的磁盘I / O容量更多,因此这种可能性降低。
如果你说"查询"你的意思是查询索引(即视图),这是你要查询的磁盘上的一个单独的数据结构,当然返回结果不受驱逐/ NRU的影响,但是如果你按照查看查询进行多次获取以上仍然适用。 (不要将整个文件放入索引!)