sql >> Databasteknik >  >> RDS >> PostgreSQL

JOIN med applikationsnivå med WHERE och BESTÄLL AV på N postgresql-skärvor

Vanligtvis delas data vid skärvor på ett sätt som gör det möjligt att undvika JOINS över servrar alls. Eftersom denna operation är svår och dyr. Om ditt exempel är hypotetiskt skulle jag rekommendera att dela upp all data efter user_id-fält eller user_group_id.

Till exempel kommer shard A att innehålla alla tabeller med information från användare som user_id % 3 =0, shard B - vilket user_id % 3 =1, shard C - vilket user_id % 3 =2. Så de flesta JOINS som behövs kommer att finnas i ett shard. För vissa komplexa gränsöverskridande frågor kan du ha gemensam NO-SQL-lagring som memcached eller Redis som kommer att ha kopior av nödvändig data från alla skärvor (naturligtvis är det inte en fullständig kopia av alla tabeller). Sådana lagringar kan enkelt replikeras på så många servrar som du behöver. Så här fungerar högbelastningsprojekt.



  1. Hur man konverterar tid till datum i den lokala tidszonen under förfrågan

  2. Flera databaser med lite föränderliga modeller. Hur tillåter jag att Entity Framework tar bort kolumner under körning?

  3. Vilket är snabbast? VÄLJ SQL_CALC_FOUND_ROWS FRÅN "tabell", eller VÄLJ ANTAL(*)

  4. Felsökning av ett program som använder SIGINT med gdb