Subject: Re: Fråga: sql-fråga till flera parallella Postrgesdatabaser

Re: Fråga: sql-fråga till flera parallella Postrgesdatabaser

From: Anders Wallenquist <aw_at_kreawit.se>
Date: Tue, 02 Oct 2012 12:30:36 +0200

2012-10-02 11:44, Magnus Hagander skrev:
> 2012/10/2 Anders Wallenquist <anders.wallenquist_at_vertel.se>:
>> Kanske är detta listan för detta: jag vill ansluta dovecot/postfix för att
>> ställa autenticering och leveransfrågor till postgress. Så långt allt väl,
>> finns bra dokumentation. Men jag vill dessutom ställa dessa frågor till ett
>> tiotal eller fler databaser med samma tabellstruktur. Användarid är unikt
>> mellan databaserna men frågan måste ställas till flera.
> Betyder det att datan är shardad, så att olika användare finns på
> olika noder? Den viktiga frågan då är om det är deterministisk
> sharding, eller om du faktiskt måste titta på alla noder. Är det
> deterministisk sharding kan t.ex. pl/proxy vara precis det du behöver.

deterministisk sharding är ett nytt begrepp för mig. Jag har flera databaser med en "admin" och ett företag för varje databas, varje admin kan lägga upp obegränsat med användare i "sin" databas som därmed utgör en original-källa och en unik domän. Ändringar som sker om respektive användare i den lokala databasen är det som gäller och som dovecot/postfix skall prenumerera på.

>
>
>> 1) Går det att låta postfix (dovecot) ställa frågan till flera källor, i
>> bästa fall lista källorna dynamiskt? Har bara använt en källa i taget
>> hitills, men det ser ut som om man skulle kunna lista flera.
> inte rakt av, men du kan göra bra saker i kombination med pgbouncer.
> Om du t.ex. returnerar ett DNS-record med multipla IPn till pgbouncer
> kommer den köra round-robin load balancing över dem. Ett annat
> populärt alternativ är att kombinera pgbouncer med haproxy. Båda
> fungerar mycket bra.
>
> Det förutsätter att du har samma data i alla databaser. Har du inte
> det, utan den är shardad, så skulle jag rekommendera en titt på
> pl/proxy.

Det låter mer som om datat är shardad, orsaken att det finns flera
databaser är inte redundans utan att varje databas representerar en egen
domän.

PL/Proxy is a database partitioning system implemented as a PL language.
Main
idea is that proxy functions are created with same signature as the remote
functions to be called, so only destination info needs to be specified
inside
proxy function bodies.

Det jag läser om PL/Proxy och Cluster på
http://wiki.postgresql.org/wiki/Clustering handlar mer om HA och
lastfördelning.

Jag är mer ute efter att kunna ställa frågan

select passwd from *.users where username = "kalle_at_example.com"

där * representerar databas1.users, databas2.users, example_com.users
etc och "kalle_at_example.com" finns i en av databaserna.

>
>
>> 2) Formulera en fet SQL-fråga som ställer frågorna i flera databaser eller
>> gömma detta i en view?
> Bara om du använder pl/proxy i det fallet - för du måste ju ha noden
> med själva vyn uppe.
>
Det är helt ok om jag ställer frågan mot en funktion i stället för en
tabell:

select passwd from all_users() where username = "kalle_at_example.com"

och lägga vyn/funktionen i en master-databas. Det viktiga är att jag
snurrar igenom en lista med databaser och ställer samma fråga mot var
och en, alternativt är nöjd vid första träff / konkatenerar alla svar
(nu skall det inte finnas dubletter i praktiken). Antingen är det en
explicit lista eller baserat på ägare/rättigheter.

En alternativ lösning är att skriva ett fristående program och låta
dovecot/postfix ropa på det om det är möjligt.

/Anders

_______________________________________________
http://www.foss-sthlm.se/
http://cool.haxx.se/cgi-bin/mailman/listinfo/foss-sthlm
Received on 2012-10-02