[英]Citus data - How to query data from a single shard in a query?
我们正在为我们组织中的大规模数据用例评估 Citus 数据。 在分析时,我想看看是否有办法使用 Citus 数据实现以下目标:
因此,我正在寻找一种方法来从子任务的特定分片中查询结果,以便每个子任务只负责获取和更新一个分片上的数据。 这将让我们并行运行周期性任务,而不必担心冲突,因为每个子任务都在一个分片上运行。
我无法从文档中找到任何关于我们如何实现这一目标的信息。 Citus数据可以做到这一点吗?
Citus(默认情况下)使用分布列的 hash 值(在您的情况下为 customer_id)跨分片分布数据。
为此,您可能需要在应用程序中存储 (customer_id - shard_id) 映射,并将子任务分配给分片,并使用此映射从子任务发送查询。
您可能会考虑一种 hacky 解决方案:您可以添加一个虚拟列(我将其命名为 shard_id)并将其设为分布列。 这样您的应用程序就知道应该从哪个子任务中获取/更新哪些行。 换句话说,每个子任务将获取/更新具有 (shard_id) 列的特定值的行,并且所有这些行将位于同一个分片上,因为它们具有相同的分布列。 在这种情况下,您可以操纵哪些 customer_ids 将在同一个分片上,哪些应该形成一个单独的分片; 通过为他们分配你想要的 shard_id。
另外我建议您看一下最新博客文章中提到的“租户隔离”: https://www.citusdata.com/blog/2022/09/19/citus-11-1-shards- postgres-tables-without-interruption/#isolate-tenant它基本上将租户(在您的情况下具有相同 customer_id 的所有数据)隔离到单个分片中。 也许它在某些时候对你有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.