【问题标题】:Should I treat Couchbase bucket as table, or more like a schema我应该将 Couchbase 存储桶视为表,还是更像模式
【发布时间】:2013-11-11 07:15:21
【问题描述】:

我计划在我的 Web 应用程序中使用 Couchbase 作为文档存储。我正在查看 Couchbase 客户端 for Java,如果我像对待通用实体一样对待 Couchbase 存储桶,您需要为每个存储桶创建单独的 Couchbase 客户端。这对系统来说有点矫枉过正(不过,我可以重用正在执行的服务来最小化对象创建和线程管理开销。)

所以

  1. 有没有办法为多个存储桶重用现有的 CouchbaseClient(不仅添加 ExecutionService)
  2. 从性能的角度来看,使用单个存储桶并根据键区分对象并依靠视图选择器进行查询不是更好吗?

【问题讨论】:

    标签: java performance nosql couchbase


    【解决方案1】:

    您应该将 couchbase 存储桶视为数据库。在大多数情况下,每个应用程序一个存储桶就足够了。但我更喜欢有 2 个桶。一种用于公共数据,另一种用于“临时”或“快速变化”(如缓存、用户会话等)数据。最后一个目的,您甚至可以只使用 memcached 存储桶。

    并回答您的 2 个问题:

    1. 我不知道这种方式,也从未见过有人尝试这样做。但请记住,客户端应该实现单例模式。因此,如果您的应用程序有 2 个存储桶,那么您将只有 2 个客户端(这绝对不会矫枉过正)

    2. 正如我之前所说,将存储桶视为数据库。你甚至不需要创建test 数据库。 Couchbase 内置了分离的devproduction 视图,您可以使用dev 视图轻松地在生产数据上测试您的应用。

    【讨论】:

    • 视图是否存在性能缺陷,因为无论其相关性如何,它们都需要处理所有数据?
    • 视图在后台处理所有数据。因此,当您的查询到达时,它们不会“选择”数据,数据已经被选择并且服务器只对预定义的数据集进行缩减(如果需要)并将其发送给客户端,除非您将特殊参数发送到您的视图,否则强制它在发送给客户端之前更新索引。 IE。如果您的 map 函数将包含一些 if 语句,例如 if {doc.type === 'sometype'},则您的视图将仅使用 precalculated 指定类型的文档集。
    • 这里是 couchbase 文档关于视图 docs.couchbase.com/couchbase-manual-2.2/#view-basics 的链接。只有在现有大型数据库上创建新视图时,它才会变慢。所有更新(添加新文档、删除文档)都应该很快。
    【解决方案2】:

    关于使用存储桶作为表/数据库,这篇文章解释得很好: http://blog.couchbase.com/10-things-developers-should-know-about-couchbase

    1. 一切尽在一处

    一个桶相当于一个数据库。您将具有不同特征或属性的对象存储在同一个存储桶中。因此,如果您要从 RDBMS 迁移,您应该将来自多个表的记录存储在一个存储桶中。

    请记住创建一个“类型”属性,该属性将帮助您区分存储在存储桶中的各种对象并在它们上创建索引。建议从一个bucket开始,必要时增加bucket。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多