【问题标题】:Couchbase Elastic Search plugin with multi-tenancy具有多租户的 Couchbase Elastic Search 插件
【发布时间】:2015-04-03 13:19:55
【问题描述】:

在将 couchbase 与弹性搜索插件集成时,这更像是一个设计问题。我在我们以前的产品中使用了多租户的沙发底座,我们遵循了我们在沙发底座博客上找到的第一个建议Single Couchbase Bucket for All Tenants

现在我们正在研究使用 couchbase 弹性搜索插件在 couchbase 数据上利用弹性搜索功能。通过 couchbase 弹性搜索插件文档(安装和设置),我意识到您只能将一个 couchbase bucket 映射到一个 elasticsearch index。该文档可在此处Elasticsearch plugin configuration 和此处Connecting to Cluster 找到。现在在这种情况下,就像 couchbase 存储桶一样,所有文档(无论租户如何)都将驻留在同一个索引中。

现在这是我的问题。无论文档如何存储在沙发库中,我都希望弹性搜索索引每个租户。我对这两个系统之间的集成仍然很陌生,但我假设每个租户都有单独的搜索索引(并且每个租户/索引都有许多不同的类型)绝对可以 1) 提高每个租户的搜索性能 2) 对可能具有最少数据集的特定租户的特定搜索查询的性能不会受到同一索引上某些其他租户的大量数据集的影响(尽管不合理,假设租户之间的数据集相差 50 倍)

我想知道的是,我的担忧是否有效。将所有租户编入索引是否会影响搜索查询的性能?如果是这样,任何人都有关于如何使用 couchbase 弹性搜索插件来实现这一点的任何解决方案?

感谢所有帮助和想法!

【问题讨论】:

    标签: search elasticsearch couchbase elasticsearch-plugin


    【解决方案1】:

    使用插件时,没有简单的方法可以将来自单个 Couchbase 存储桶的数据分离到不同的 ElasticSearch 索引。您可以做的是在 ElasticSearch 中为不同的租户提供不同的类型,同时仍将它们保持在同一个索引中。这既可以提高搜索性能,又可以使 CB 和 ES 之间的租户管理保持一致。

    要将不同的文档从 CB 映射到不同的 ES 类型,请使用传输插件的类型选择器功能,如下所述:http://docs.couchbase.com/admin/elastic/adv-usage.html (向下滚动到名为“设置文档类型”的部分)

    【讨论】:

    • 但是如果这些租户中有更多类型呢?我们现在应该使用组合类型吗?例如,我们的类型之一是tenantId_users、tenantId_organizations?这也会影响性能吗?
    • 一直在使用您发布的链接,但它最终引发了更多问题。从文档来看,类型基本上是硬编码在 yml 文件中的,即使我们最终使用 elasticsearch 原生 api 动态创建类型,我们如何告诉 couchbase 插件基于新类型进行索引?我没有找到任何方法来实际使用 elasticsearch 插件动态创建类型。您可以根据 docId 正则表达式将文档动态分配给类型,但不能创建新类型。还是没有解决问题。
    • 创建动态类型(基于正则表达式的 ID 和类型)的能力实际上已提交给 dev 分支,并将在下一个插件版本中添加。因此,您将能够为 tentant 文档创建动态子类型。此外,请考虑您首先尝试解决的查询性能问题是真正的问题,还是只是过早的优化。
    • 这是个好消息。有什么方法可以让我们获得更早的版本来试用它?
    • 您可以在此处获取并构建最新版本:github.com/Branor/elasticsearch-transport-couchbase - 请记住使用 1.6 JDK 构建它。请注意,您需要首先构建 CAPI 服务器项目,如自述文件中所述。此拉取请求描述了如何使用正则表达式类型选择器:github.com/Branor/elasticsearch-transport-couchbase/pull/1
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2022-11-30
    • 2019-01-03
    相关资源
    最近更新 更多