每个存储桶的最大沙发底座视图数

2024-05-31

假设存储桶中有大量数据(>100GB、>100M 文档、>12 种文档类型),并且假设每个视图仅适用于一种文档类型,那么每个存储桶有多少视图就太多了?或者以另一种方式问,在什么时候应该将某些文档类型拆分到单独的存储桶中,以节省处理所有文档类型的所有视图的开销?

我很难决定如何将数据拆分为 couchbase 存储桶,以及数据所需视图的性能影响。我的数据由十几个关系型数据库组成,其中至少有一半在多个表中包含数亿行。

The http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-writing-bestpractice.html http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-writing-bestpractice.htmldoc 部分“使用文档类型”似乎暗示在同一个存储桶中拥有多个文档类型并不理想,因为特定文档类型的视图会针对所有文档进行更新,即使是那些永远不会与视图匹配的文档。事实上,它建议将数据分成桶以避免这种开销。

但出于性能原因,每个集群的存储桶数量限制为 10 个。因此,我唯一的结论是每个集群最多可以有效处理 10 个大型文档集合。这准确吗?


Tug 的建议是正确的,也让我添加了一些观点。

存储桶可以被认为与 RDMS 世界中的“数据库实例化”最密切相关(尽管不完全)。该“数据库”内将有多个表/模式,并且这些表/模式都可以组合在一个存储桶中。

将存储桶视为数据的逻辑分组,所有数据共享一些通用配置参数(RAM 配额、副本数量等),并且当您需要单独控制某些数据集时,只需将数据拆分到多个存储桶中。其他原因与不同数据集的非常不同的工作负载或希望能够单独跟踪这些数据集的工作负载有关。

一些例子:

-我想以不同于另一组数据的方式控制一组数据的缓存行为。例如,许多客户有一个“会话”存储桶,他们希望始终将其存储在 RAM 中,而他们可能有一个更大的“用户配置文件”存储桶,不需要将所有数据缓存在 RAM 中。从技术上讲,这两个数据集可以驻留在同一个存储桶中,并允许 Couchbase 智能地决定将哪些数据保留在 RAM 中,但是您没有太多保证或控制会话数据不会被推出......所以把它在自己的桶中允许您强制执行。它还为您带来了能够单独监控流量的额外好处。

-我希望某些数据比其他数据复制更多次。虽然我们通常建议在大多数集群中只使用一个副本,但有时我们的用户会选择他们想要额外复制一次的某些数据集。这可以通过单独的桶来控制。

-同样,我只想将一些数据复制到另一个集群/数据中心。这也是按存储桶进行控制的,以便数据可以分割到单独的存储桶中。

-当给定数据集的工作负载(尤其是写入量)存在相当大的差异时,从视图/索引的角度来看,将数据分离到单独的存储桶中确实开始有意义。我提到这一点是因为这是事实,但我也想澄清这不是常见情况。您应该在发现问题之后使用此方法,而不是因为您认为可能之前才使用。

关于最后一点,是的,对存储桶的每次写入都会被索引引擎拾取,但是通过使用 JSON 中的文档类型,您可以非常快速地中止给定文档的处理,并且它确实不会对有大量数据不适用于某些视图。如果您不介意,我特别好奇文档的哪些部分暗示了其他情况,因为这肯定不是我们的意图。

因此,一般来说,我们看到大多数部署的存储桶数量较少 (2-3),只有少数超过 5 个。我们对 10 个的限制来自我们内部统计跟踪的一些已知的 CPU 和磁盘 IO 开销(负载或桶上缺少的东西在这里并不重要)。我们当然计划在未来的版本中减少这种开销,但这仍然不会改变我们仅拥有几个存储桶的建议。无论如何,能够将多个“模式”组合成单个逻辑分组并跨其应用视图/索引的优点仍然存在。

我们现在正在制定更具体的指导方针和尺寸建议(我写了前两篇博客作为我们这样做之前的权宜之计)。

作为初始方法,您希望尝试将设计文档的数量保持在 4 个左右,因为默认情况下我们最多并行处理 4 个文档。您可以增加此数字,但这应该与增加的 CPU 和磁盘 IO 容量相匹配。然后,您需要将每个文档中的视图数量保持在相对较低的水平,可能远低于 10 个,因为它们都是串行处理的。

我最近与一位拥有相当大量视图(大约 8 个设计文档和一些 dd 具有近 20 个视图)的用户合作,我们能够通过将多个视图合并为一个视图来彻底降低这一点。显然,它非常依赖于应用程序,但您应该尝试从一个索引生成多个不同的“查询”。使用缩减、键前缀(在视图内)和排序规则,所有这些与不同的范围和分组查询相结合,可以创建一个最初可能显得拥挤的索引,但实际上非常灵活。

您拥有的设计文档和视图越少,您需要的磁盘空间、IO 和 CPU 资源就越少。不幸的是,永远不会有灵丹妙药或硬性指导数字。最后,YMMV 和在您自己的数据集上进行的测试比我可以编写的任何多页响应都要好;-)

希望这对您有所帮助,如果您对您不想发布的特定用例有具体问题,请随时直接与我们联系。

Perry

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个存储桶的最大沙发底座视图数 的相关文章

随机推荐

  • 如何列出喜欢某个页面或感兴趣的 Facebook 用户 [重复]

    这个问题在这里已经有答案了 可能的重复 检索 Facebook 粉丝姓名 https stackoverflow com questions 2001281 retrieve facebook fan names 我想要获取喜欢某个页面或感
  • 是否可以在通过表单上传本地图像之前预览它们?

    更具体地说 我想使用一种带有一个或多个用于图像的文件输入字段的表单 当这些字段发生更改时 我想在将数据发送到服务器之前显示关联图像的预览 我尝试过多种 JavaScript 方法 但总是遇到安全错误 我不介意使用 java 或 flash
  • 嵌套名称说明符中的类型不完整

    我尝试在嵌套名称说明符中使用不完整类型 如下所示 class A int b A c error incomplete type A used in nested name specifier class A static const in
  • Python-如何删除 json 字符串中最后的逗号(,)

    嗨 我刚刚开始尝试 python tornado 和 mongodb 我是新手 我编写了一个简单的 get 函数来从 mongodb 获取所有值并以 JSON 格式返回 问题是 当我尝试将输出写入 JSON 字符串时 我在集合中的最后一条记
  • 从 BitmapImage 获取支持的图像格式

    如何获取 System Windows Media Imaging BitmapImage 支持的图像格式列表 我正在用 C WPF 编写一个简单的图像处理工具 BitmapImage 类是更有用的位图类之一 因为它能够从多种格式进行解码
  • Android ListView 子项

    我最近为 Android 应用程序创建了一个新的 ListView 对象 但遇到了一些错误 当我尝试使用简单适配器创建一个包含列表中子项目的项目时 创建的最新项目与其他项目重叠 我正在使用地图列表来创建项目 例如 如果我向地图列表中添加一个
  • 如何在 psycopg2 线程连接类中重新连接到 postgreSQL? SSL SYSCALL 错误导致的失败:在 Azure 中检测到 EOF?

    我们的应用程序运行良好 直到我们将 PostgreSQL 移植到 Azure 中的 Microsoft 数据库 然后 我们的应用程序会定期无故失败 并且到处都会出现 SSL SYSCALL 错误 删除等 我们已经尝试了互联网上描述的所有内容
  • 滚动部分滚动并溢出

    我正在尝试使用脚本 Scrollify https github com lukehaas Scrollify https github com lukehaas Scrollify 但我的部分比用户的屏幕长 这意味着您首先必须向下滚动才能
  • 使用 NSJSONSerialization 解析 JSON

    对此进行了太多讨论 但我不知道如何解决我的问题 这是我从 WorldWeatherOnline 获取的 JSON 数据 JSON 有效 但我不知道如何解析它 这是我的代码 后面是 JSON 请帮忙 NSError errorInfo NSD
  • Node.js 中的 webRTC

    我想在node js 中使用webRTC 来管理涉及浏览器和nodejs 上的对等点的混合连接 我做了一些测试和搜索 我尝试使用wrtc https github com js platform node webrtc or webrtc
  • 如何使用 Laravel Collective 在表单标签中包含 html?

    通读一遍这个所以线程 https stackoverflow com questions 24361160 radio and checkbox inside label with laravel我读到我可以创建一个新的宏来创建自定义表单输
  • 使用javascript上传到谷歌云存储签名的url

    使用以下代码 我可以上传到谷歌云存储中的公共可写存储桶 allUsers有写权限 但是 如果存储桶不可公开写入 则会收到 401 未经授权的错误 我不希望存储桶可公开写入 var file scope myFile var fileData
  • Go 指针 - 通过指针将值附加到切片

    我有一个 struct ProductData 及其实例 p 它有一个切片属性 type ProductInfo struct TopAttributes map string interface 我想设置 TopAttributes 如下
  • 同一应用程序的不同版本取决于设备(应用程序商店)

    我已经将我的游戏提交到App Store并更新了 现在最新版本是每个下载我游戏的人都应该得到的版本 对吗 现在的问题是 当我从 iPad mini 上的 App Store 下载游戏时 我得到的是正确的版本 但是当我从 iPad 2 下载游
  • 异步 void lambda 表达式

    A quick 会告诉你避免使用async void myMethod 可能的方法 并且在很多情况下都有使其成为可能的方法 https johnthiriet com removing async void 我的问题基本上是这个最佳实践的一
  • 如何检测 Android 设备中的新应用

    我想检测用户何时安装或删除应用程序 但没有找到BroadcastReceiver就是这样做的 在我的应用程序中 我获取了有关该类已安装应用程序的信息PackageManager 但我不想定期扫描应用程序 有没有BroadcastReceiv
  • 如何反转 Python statsmodels ARIMA 预测中的差异?

    我正在尝试使用 Python 和 Statsmodels 来理解 ARIMA 预测 具体来说 为了使 ARIMA 算法发挥作用 需要通过差分 或类似方法 使数据平稳 问题是 在进行残差预测后 如何反转差异以返回到包含差异化趋势和季节性的预测
  • 我以前没见过的 CGRect 语法

    我在一些示例代码中看到了下面的语法 但不确定我是否理解它 CGRect imageRect CGRect size baseImage size 这只是初始化的一种简写方式吗CGRect相当于 CGRect imageRect CGRect
  • 有没有办法使用 .NET 中的 Kafka Ksql Push 查询

    我目前正在 NET 中使用 Kafka 消费者处理大量 Kafka 消息 我的处理过程的第一步是解析 JSON 并根据 JSON 中特定字段的值丢弃许多消息 我不想首先处理 特别是不下载 那些不需要的消息 看起来 kSql 查询 写为推送查
  • 每个存储桶的最大沙发底座视图数

    假设存储桶中有大量数据 gt 100GB gt 100M 文档 gt 12 种文档类型 并且假设每个视图仅适用于一种文档类型 那么每个存储桶有多少视图就太多了 或者以另一种方式问 在什么时候应该将某些文档类型拆分到单独的存储桶中 以节省处理