mboost-dp1
replikering med php
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Davs, jeg står i den situation, at jeg gerne ville arbejde lidt med replikering. Men jeg kan simpelthen ikke finde ud af hvordan det skal implementeres i php. i mysql er det relativt let.
Det jeg gerne vil, er at redirecte læse operationer ("SELECT") til en database, og skrive operationer ("UPDATE, INSERT, DELETE") til en anden. Det skal ske igennem PHP.
Er der nogen af er der ved noget om det? :)
Jeg vil gerne gøre det på en måde, der ligger et niveau under php, så jeg kan bruge den samme resource descriptor til begge operationer, hvis det er muligt? :)
Det jeg gerne vil, er at redirecte læse operationer ("SELECT") til en database, og skrive operationer ("UPDATE, INSERT, DELETE") til en anden. Det skal ske igennem PHP.
Er der nogen af er der ved noget om det? :)
Jeg vil gerne gøre det på en måde, der ligger et niveau under php, så jeg kan bruge den samme resource descriptor til begge operationer, hvis det er muligt? :)
Hvorfor overhovedet gøre det med PHP, hvis du ikke vil gøre det med PHP alligevel?
Men det lyder som at du bare skal åbne to connections, én til read, og en til write. Og så passe en sql-connection med til dine queries (du har ikke sagt hvilket database API du benytter, og PHP har altså ret mange!)
Men det lyder som at du bare skal åbne to connections, én til read, og en til write. Og så passe en sql-connection med til dine queries (du har ikke sagt hvilket database API du benytter, og PHP har altså ret mange!)
jeg har vist nævn det var MySQL ;) og igen. Der er ikke databasen jeg vil have hjælp til at sætte op til replikering. Jeg vil gerne vide, hvordan jeg kan implementere det i PHP, så jeg skriver til en DB, og læser fra en anden.
Jeg bruger PDO til at håndtere databaser :)
Problemet med 2 databaseforbindelser er, at jeg tilføjer et niveau af kompleksitet til applikationen, der er unødvendigt.
Alternativt kunne jeg parse queryen i mit database interface, før jeg udfører den.
Jeg vil dog helst, at driveren selv kan, hvis det er muligt :)
Jeg bruger PDO til at håndtere databaser :)
Problemet med 2 databaseforbindelser er, at jeg tilføjer et niveau af kompleksitet til applikationen, der er unødvendigt.
Alternativt kunne jeg parse queryen i mit database interface, før jeg udfører den.
Jeg vil dog helst, at driveren selv kan, hvis det er muligt :)
#4: Logisk set skal du, hvis du vil have replikering, have to dataforbindelser, for at sende data til to DB'ere.
Alternativt skal DB'erne gøre det selv eller du skal gøre det til en tredje "klient" (eller server eller interface) der gør det for dig (som så, alligevel, skal have to dataforbindelser).
Jeg er ikke nogen PHP nørd, men jeg kan ikke forestille mig en driver på en eller anden magisk vis i stand til at skrive data til to forskellige DB-servere uden at lave to dataforbindelser. :-)
Selv når du har DB'en til at lave replikeringer kræver det, at de har en dataforbindelse åben. :-)
Alternativt skal DB'erne gøre det selv eller du skal gøre det til en tredje "klient" (eller server eller interface) der gør det for dig (som så, alligevel, skal have to dataforbindelser).
Jeg er ikke nogen PHP nørd, men jeg kan ikke forestille mig en driver på en eller anden magisk vis i stand til at skrive data til to forskellige DB-servere uden at lave to dataforbindelser. :-)
Selv når du har DB'en til at lave replikeringer kræver det, at de har en dataforbindelse åben. :-)
#1 & 4
Du er nødt til at have 2 forskellige database connections for at bruge 2 forskellige database servere.
Du er nødt til at have 2 forskellige database connection strings for at få forskellig opførsel for de 2 connections.
Så er spørgsmålet reduceret til hvor valget mellem de 2 skal foretages.
Jeg ville vælge forskellige klasser til update og read. Og lade et lidt højere niveau lave valget via valg mellem disse klasser.
Det er umuligt at analysere alt for hvorvidt det er en update eller en read (man kan ikke se på et SP kald om det er det ene eller andet).
Der bør aldrig være tvivl om i et givet sted i kodn hvorvidt man vil lave en update eller en read.
Du er nødt til at have 2 forskellige database connections for at bruge 2 forskellige database servere.
Du er nødt til at have 2 forskellige database connection strings for at få forskellig opførsel for de 2 connections.
Så er spørgsmålet reduceret til hvor valget mellem de 2 skal foretages.
Jeg ville vælge forskellige klasser til update og read. Og lade et lidt højere niveau lave valget via valg mellem disse klasser.
Det er umuligt at analysere alt for hvorvidt det er en update eller en read (man kan ikke se på et SP kald om det er det ene eller andet).
Der bør aldrig være tvivl om i et givet sted i kodn hvorvidt man vil lave en update eller en read.
#6
Det var faktisk nemt. Nu kommer vi til de egentlige problemer.
:-)
A) transaction isolation
Du får problemer med at opnå repeatable read og serializable i den konfig.
B) cache konsistens
Enten skal de to database klasser dele cache eller så skal cache flytte et niveau højere op.
C) failover
Las os antage i det følgende 3 noder S1, S2 og S3.
1 master og N slave som 1 update og N read er tricky
update->S1, read->S2 og S3
S1 ned => update->S2, read->S3
S2 ned => update->S1, read->S3
Det ligner noget ret komplekst applikations logik.
1 master og N slave som 1 update og N+1 read er en lille smule nemmere
updates skal sendes til master
reads skal sendes til en node som er oppe
Men det skal nok stadig være applikations logik. Jeg mener ikke at der er nogle af PHP's mangle MySQL extensions der understøtter failover i selve extension via flere servere i connection string (jeg kan dog tage fejl - jeg er ikke nogen ørn til PHP).
Det var faktisk nemt. Nu kommer vi til de egentlige problemer.
:-)
A) transaction isolation
Du får problemer med at opnå repeatable read og serializable i den konfig.
B) cache konsistens
Enten skal de to database klasser dele cache eller så skal cache flytte et niveau højere op.
C) failover
Las os antage i det følgende 3 noder S1, S2 og S3.
1 master og N slave som 1 update og N read er tricky
update->S1, read->S2 og S3
S1 ned => update->S2, read->S3
S2 ned => update->S1, read->S3
Det ligner noget ret komplekst applikations logik.
1 master og N slave som 1 update og N+1 read er en lille smule nemmere
updates skal sendes til master
reads skal sendes til en node som er oppe
Men det skal nok stadig være applikations logik. Jeg mener ikke at der er nogle af PHP's mangle MySQL extensions der understøtter failover i selve extension via flere servere i connection string (jeg kan dog tage fejl - jeg er ikke nogen ørn til PHP).
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.