[英]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.