sql >> Database >  >> RDS >> PostgreSQL

JOIN op applicatieniveau met WHERE en ORDER BY op N postgresql-shards

Gewoonlijk worden gegevens bij shards zo verdeeld dat het helemaal niet mogelijk is om cross-server JOINS te vermijden. Omdat deze operatie moeilijk en duur is. Als uw voorbeeld hypothetisch is, raad ik aan om alle gegevens te verdelen in het veld user_id of user_group_id.

Shard A bevat bijvoorbeeld alle tabellen met informatie van gebruikers die user_id % 3 =0, shard B - welke user_id % 3 =1, shard C - welke user_id % 3 =2. Dus de meeste benodigde JOINS bevinden zich in één shard. Voor sommige complexe cross-server-query's hebt u mogelijk gemeenschappelijke NO-SQL-opslag zoals memcached of Redis, die kopieën van de benodigde gegevens van alle shards zal hebben (het is natuurlijk geen volledige kopie van alle tabellen). Dergelijke opslagplaatsen kunnen eenvoudig worden gerepliceerd op zoveel servers als u nodig heeft. Dit is hoe hoogbelaste projecten werken.



  1. DATETIMEOFFSETFROMPARTS() Voorbeelden in SQL Server (T-SQL)

  2. T-SQL-bugs, valkuilen en best practices – determinisme

  3. Hoe de taakresultaten van het SSIS-pakket controleren nadat de uitvoering ervan is voltooid?

  4. Hoe schakel ik de mysql-wachtwoordvalidatie uit?