管理索引表
我们将讨论将文档组织到一个或多个索引表中的不同方法,以及需要考虑的相关权衡。
层级结构
在 kumosearch 中,集群可以包含一个或多个节点,每个节点存储整个数据集的精确副本。
一个集群可以包含一个或多个索引表,而每个索引表可以包含许多具有相同或相似结构(字段/属性)的文档。
例如,假设您有 CRM 系统,用于存储人员和公司的详细信息。要在 kumosearch 中存储这些数据,您可以创建:
- 一个名为
people的索引表,用于存储包含人员信息的文档(例如:name、title、company_name等属性)。 - 一个名为
companies的索引表,用于存储包含公司信息的文档(例如:name、location、num_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_product、collectionx_staging 等。
然后,您可以为每个环境创建单独的 API 密钥,以实现访问隔离。如果您在暂存环境中镜像整个生产数据,这种方法可能会成本昂贵,因为如果您为
单个集群启用了高可用性,则会为暂存和生产数据支付更多的 RAM 成本。使用方法 1,您可以关闭临时集群上的高可用性设置并节省成本。如果
您的暂存数据量较小,方法 2 则会更加经济。
多租户应用程序
假设您有一个社交媒体应用程序,您希望限制用户只能搜索自己朋友的姓名,可以使用以下方法来实现:
将所有用户存储在 kumosearch 中的一个名为 users 的单个索引表中。在每个用户文档中,您可以添加一个名为 friends_with_user_ids 的数
组属性,其中包含该用户朋友的用户 ID。然后,您可以为每个用户生成一个单独的范围搜索 API 密钥,
并限制该密钥只能访问在 friends_with_user_ids 属性中列出的用户记录。这样,用户将只能搜索和访问自己朋友的数据,而不会访问其他用户的记录。
实际上,每个用户只能在存储所有 用户记录的较大索引表中搜索/访问自己的数据。
分片索引表
随着索引表中文档数量的增加或查询复杂性的提高,搜索响应时间可能会与索引表的大小相关,类似于关系数据库中表的大小影响查询处理时间。
如果您发现 kumosearch 中出现大规模写入或读取性能问题,分片索引表是提高性能的一种有效方法。您可以根据属性
如 user_id、created_at、country 等,将一个大索引表分片为多个较小的索引表。例如,您可以创建 users_usa、
users_canada、users_uk 等索引表,并将每个国家的用户放在相应的索引表中。或者,您可以创建 users_1、users_2、...、users_n
等索引表,并将 user_id mod n 的用户分配到对应的索引表中。
在多租户应用程序中,您还可以将该用户的数据移动到一个新的索引表中,同时将其他用户的数据保留在主索引表中。这种方法可以帮助提高性能,并确保每个用户的数据处理效率。
单个集群与多个集群
在以下情况下,使用多个集群可能会带来显著收益:
多个环境:阅读更多上文内容,为不同的环境(如开发、测试、生产)使用独立的集群可以实现环境间的完全隔离。 这种方式不仅 有助于测试新版本的 kumosearch,还可以避免环境之间的干扰。
多租户应用程序:在多租户环境中,您可以将特定用户的数据放置在完全独立的 kumosearch 集群中,这 样做可以提高性能,确保合规性,或者同时满足这两者。例如,您可以为高负载用户或特定业务需求的用户分配独立集群,从而实现更高的资源利用率和更好的性能隔离。
基于用例:假设您的应用程序提供了多种搜索体验,例如用户搜索产品,搜索过去的订单等。使用多个集群可以提高系统的可靠性和性能。通过为每 种搜索体验启动一个独立的集群,可以避免基础设施问题影响到整个网站或内部搜索工具。例如,可以为产品搜索、订单历史搜索等分别设置不同的集群。这 样不仅可以为每个集群独立扩展资源,还能根据需求调整硬件配置。例如,如果产品搜索的流量较高,可以为其配置更高容量的硬件,以应对更多的请求。