Skip to main content
Version: 1.1.1

管理索引表

我们将讨论将文档组织到一个或多个索引表中的不同方法,以及需要考虑的相关权衡。

层级结构

在 kumosearch 中,集群可以包含一个或多个节点,每个节点存储整个数据集的精确副本。

一个集群可以包含一个或多个索引表,而每个索引表可以包含许多具有相同或相似结构(字段/属性)的文档。

例如,假设您有 CRM 系统,用于存储人员和公司的详细信息。要在 kumosearch 中存储这些数据,您可以创建:

  • 一个名为 people 的索引表,用于存储包含人员信息的文档(例如:nametitlecompany_name 等属性)。
  • 一个名为 companies 的索引表,用于存储包含公司信息的文档(例如:namelocationnum_employees 等属性)。

这是该层次结构的直观表示:

[kumosearch Cluster] ===has-many===> [Collections] ===has-many===> [Documents] ===has-many===> [Attributes/Fields]

单索引表与多索引表

一般来说,我们建议为每种类型的文档/记录创建一个独立的索引表。这样可以帮助您更好地管理和组织数据,类似于在关系数据库中使用不同的表格。

例如,如果您经营电商业务,并希望用户能够搜索产品和博客文章,您可以创建两个索引表:

  • product 索引表:存储所有产品记录
  • blog_articles 索引表:存储所有博客文章

虽然某些产品(如手机)可能与其他产品(如冰箱)没有太多共同的属性,但它们仍然可以放在同一个 product 索引表中。您可以将通用字段 在索引表 schema 中设置为可选。

处理不同的环境

在开发过程中,存在多个阶段的环境, 如Dev / Staging / Prod。您可以使用两种方法之一来处理不同应用程序环境中的数据。

方法 1: 为每个环境设置不同的集群。这种方法提供了最大的灵活性,并将各个环境完全隔离开来。这也使得在升级生产环境之前,您可以 轻松地在其他环境中测试新版本 kumosearch 的更改。然而,这种方法的限制在于您需要为每个环境管理多个集群的 API 密钥和索引表, 同时从成本上看,也需要为这些额外的集群付费。

方法 2: 使用一个集群,但为每个环境创建具有不同后缀的索引表。例如:collectionx_productcollectionx_staging 等。 然后,您可以为每个环境创建单独的 API 密钥,以实现访问隔离。如果您在暂存环境中镜像整个生产数据,这种方法可能会成本昂贵,因为如果您为 单个集群启用了高可用性,则会为暂存和生产数据支付更多的 RAM 成本。使用方法 1,您可以关闭临时集群上的高可用性设置并节省成本。如果 您的暂存数据量较小,方法 2 则会更加经济。

多租户应用程序

假设您有一个社交媒体应用程序,您希望限制用户只能搜索自己朋友的姓名,可以使用以下方法来实现:

将所有用户存储在 kumosearch 中的一个名为 users 的单个索引表中。在每个用户文档中,您可以添加一个名为 friends_with_user_ids 的数 组属性,其中包含该用户朋友的用户 ID。然后,您可以为每个用户生成一个单独的范围搜索 API 密钥, 并限制该密钥只能访问在 friends_with_user_ids 属性中列出的用户记录。这样,用户将只能搜索和访问自己朋友的数据,而不会访问其他用户的记录。

实际上,每个用户只能在存储所有用户记录的较大索引表中搜索/访问自己的数据。

分片索引表

随着索引表中文档数量的增加或查询复杂性的提高,搜索响应时间可能会与索引表的大小相关,类似于关系数据库中表的大小影响查询处理时间。

如果您发现 kumosearch 中出现大规模写入或读取性能问题,分片索引表是提高性能的一种有效方法。您可以根据属性 如 user_idcreated_atcountry 等,将一个大索引表分片为多个较小的索引表。例如,您可以创建 users_usausers_canadausers_uk 等索引表,并将每个国家的用户放在相应的索引表中。或者,您可以创建 users_1users_2、...、users_n 等索引表,并将 user_id mod n 的用户分配到对应的索引表中。

多租户应用程序中,您还可以将该用户的数据移动到一个新的索引表中,同时将其他用户的数据保留在主索引表中。这种方法可以帮助提高性能,并确保每个用户的数据处理效率。

单个集群与多个集群

在以下情况下,使用多个集群可能会带来显著收益:

多个环境:阅读更多上文内容,为不同的环境(如开发、测试、生产)使用独立的集群可以实现环境间的完全隔离。 这种方式不仅有助于测试新版本的 kumosearch,还可以避免环境之间的干扰。

多租户应用程序:在多租户环境中,您可以将特定用户的数据放置在完全独立的 kumosearch 集群中,这 样做可以提高性能,确保合规性,或者同时满足这两者。例如,您可以为高负载用户或特定业务需求的用户分配独立集群,从而实现更高的资源利用率和更好的性能隔离。

基于用例:假设您的应用程序提供了多种搜索体验,例如用户搜索产品,搜索过去的订单等。使用多个集群可以提高系统的可靠性和性能。通过为每 种搜索体验启动一个独立的集群,可以避免基础设施问题影响到整个网站或内部搜索工具。例如,可以为产品搜索、订单历史搜索等分别设置不同的集群。这 样不仅可以为每个集群独立扩展资源,还能根据需求调整硬件配置。例如,如果产品搜索的流量较高,可以为其配置更高容量的硬件,以应对更多的请求。