पाठ 14 / 28

Pre-Filtering, Partial Indexes और Partitions

Multi-tenant और metadata filters के लिए भौतिक डिज़ाइन चुनें।

डिज़ाइन को filter से मिलाएँ

चुनाव इस पर करें कि filter कितना चयनात्मक और स्थिर है। कुछ विशाल tenants: प्रति tenant partial index (CREATE INDEX ... USING hnsw (...) WHERE tenant = 'acme') या tenant से partitioned table हर tenant को अपना छोटा, सटीक index देती है, बनाने और रखरखाव के लिए ज़्यादा indexes की क़ीमत पर। कई छोटे tenants: tenant column और iterative scans वाला एक index, या प्रति tenant सटीक scan (कुछ हज़ार rows जल्दी स्कैन होती हैं)। कम-चयनात्मक filters (जैसे भाषा = en जो 80% rows से मेल खाती है): कुछ ज़्यादा लाकर post-filtering चलती है। तिथि सीमाएँ: समय से partition करें और सिर्फ़ प्रासंगिक partitions खोजें। हमेशा EXPLAIN और recall माप से जाँचें, क्योंकि planner का चुनाव statistics पर निर्भर है। समर्पित engine में हर filter field पर payload index बनाएँ और उन engines को प्राथमिकता दें जो graph traversal के दौरान filters जाँचते हैं।

Filter डिज़ाइन cheat sheet

शुरुआती बिंदु; EXPLAIN और मापे recall से जाँचें।

Filter shape                                   Good design
few very large tenants                          partial index or partition per tenant
many small tenants (< ~10k rows each)           one index + iterative scan, or exact scan per tenant
low selectivity (matches most rows)             plain index + post-filter, over-fetch a little
range by time (recent data matters)             time partitions; search only the relevant ones
hard security boundary                          row-level security / mandatory tenant predicate in every query

अनुमान नहीं, plan जाँचें

Indexes या partitions बदलने के बाद EXPLAIN चलाएँ और recall दोबारा मापें। Planner के चुनाव statistics पर निर्भर हैं।

त्वरित जाँच: कुछ बहुत बड़े tenants के लिए कौन-सा डिज़ाइन हर tenant को सटीक index देता है?

  • UI में filtering
  • tenant column के बिना एक index
  • कोई index नहीं
  • प्रति tenant partial index (या partition)
Answer

प्रति tenant partial index (या partition) — तब हर index में सिर्फ़ मेल खा सकने वाली rows होती हैं।