Java 我应该将Couchbase bucket视为表,还是更像一个模式

Java 我应该将Couchbase bucket视为表,还是更像一个模式,java,performance,nosql,couchbase,Java,Performance,Nosql,Couchbase,我计划在我的web应用程序中使用Couchbase作为文档存储。我正在研究Couchbase client for Java,如果我像对待一般实体一样对待Couchbase bucket,那么您需要为每个bucket创建单独的Couchbase client。这对系统来说有点过分(尽管如此,我可以重用正在执行的服务来最小化对象创建和线程管理开销) 所以 有没有一种方法可以为多个bucket重用现有的CouchbaseClient(不仅仅是添加ExecutionService) 从性能的角度来看,

我计划在我的web应用程序中使用Couchbase作为文档存储。我正在研究Couchbase client for Java,如果我像对待一般实体一样对待Couchbase bucket,那么您需要为每个bucket创建单独的Couchbase client。这对系统来说有点过分(尽管如此,我可以重用正在执行的服务来最小化对象创建和线程管理开销)

所以

  • 有没有一种方法可以为多个bucket重用现有的CouchbaseClient(不仅仅是添加ExecutionService)
  • 从性能的角度来看,使用单个bucket、基于键区分对象、依靠视图选择器进行查询不是更好吗

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

    并回答您的两个问题:

  • 我不知道这种方式,也从未见过有人试图这样做。但请记住,客户机应该实现单例模式。因此,如果您的应用程序有2个存储桶,那么您将只有2个客户端(这绝对不会过度使用某些东西)

  • 正如我之前所说的,将bucket视为数据库。您甚至不需要创建
    test
    数据库。Couchbase内置了独立的
    dev
    production
    视图,您可以使用
    dev
    视图轻松地在生产数据上测试应用程序


  • 关于使用bucket作为表/数据库,这篇文章很好地解释了:

  • 从一个桶里的所有东西开始
  • 一个bucket相当于一个数据库。在同一个存储桶中存储具有不同特征或属性的对象。因此,如果您要从RDBMS迁移,那么应该将多个表中的记录存储在一个bucket中

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


    视图是否存在性能缺陷,因为它们需要处理所有数据,而不管其相关性如何?视图在后台处理所有数据。所以,当您的查询到达时,他们不会“选择”数据,数据已经被选择,服务器只会对预定义的数据集进行缩减(如果必要的话)并将其发送到客户端,除非您向视图发送特殊参数,这将迫使它在发送到客户端之前更新索引。也就是说,如果您的map函数将有一些
    if
    语句,如
    if{doc.type==='sometype'}
    ,那么您的视图将只使用
    预先计算的
    一组指定类型的文档进行操作。下面是指向couchbase doc的关于视图的链接。只有在现有大型数据库上创建新视图时,速度才会变慢。所有更新(添加新文档、删除文档)都应该是快速的。