Avatar billede dreyfusdk Nybegynder
16. februar 2011 - 02:46 Der er 15 kommentarer

Synkronisering/spejling af tabeller

Hej alle sammen

Jeg har en users-tabel på ca. 11 mio rows. Den er tilknyttet et website som opererer i 7 lande.

Sitet fungerer som sådan super duper rigtig fint med én stor users tabel, men af nogle interne årsager har jeg også brug for lande-specifikke tabeller.

Jeg har brug for en udgave af denne users-tabel som er spejlet/synkroniseret ud i en række landespecifikke tabeller, fx:

"users_dk"
"users_fr"
"users_fi"
"users_se"

...osv...

Vi kører MS SQL 2008 (64bit) og jeg kan leve med, at dataerne er op til 10 min forsinkede.

Det er _ikke_ en option at hardcode noget ind i site-koden da den er virkelig omfattende. Jeg har derfor brug for noget der kører automatisk på serveren og som kan klare jobbet for mig.

Jeg ser frem til at høre fra jer :-)
Avatar billede steent Nybegynder
16. februar 2011 - 09:24 #1
Jeg går ud fra at når du skriver spejlet/synkroniseret, er dette til tabeller på den samme server, måske endda i den samme database?

Det du så har brug for, er at der bliver lavet en SSID, som sættes til at køre med evt. 10 min. mellemrum, som kopierer dine users ud i andre tabeller baseret på deres land.

Mvh
Steen Kjærulf
steen@megasystem.dk
Avatar billede hrc Mester
16. februar 2011 - 13:31 #2
En SSID?? Kan replikering ske internt i databasen? Det er mere spejlede databaser, så det dur nok ikke. Replikering er også noget hø at vedligeholde.

Det letteste er nok et job der med faste mellemrum fyrer en StoredProc af. Bedst kombineret med et flag i brugertabellen om den er opdateret eller ej. Det kunne du styre med en trigger på OnCreate og OnUpdate via de interne "Inserted" og Updated" ... og "Deleted" tabeller, hvis du sletter.
Avatar billede steent Nybegynder
16. februar 2011 - 14:14 #3
Det var en typo, der skulle selvf. stå SSIS

HRC: Nu har du en masse spørgsmålstegn i dine to første sætninger, så ved ikke hvad der er stilet til hvem.

Det er osse noget 'hø' at smide nyt tag på mit hus, men det er jo kun for mig, for andre er det jo nemt. Såååå

I SQL 2000 og derfør var der Data Transformation Services (DTS) og schedulering via SQL Server Agenten

Efter SQL 2000, bevægede vi os over på SQL Server Integration Services (SSIS), et værktøj der er stærk undervurderet (specielt i Danmark) til til databehandling, være det sig simpel kopiering af data, eller import/export af data fra/til externe leverandører osv.

Anyway, der er mange måder at lave ting på, mange tager lige lang tid og er lige effektive, og nogen er det modsatte.
Avatar billede hrc Mester
16. februar 2011 - 14:58 #4
steent: Nu var der altså kun 2 spørgsmålstegn. Jeg har desværre kun set SSIS demonstreret en enkelt gang og det så da flot ud.

Den primitive med en triggerløsning der kopierer ved insert eller update kunne gøre det, men den er sikkert ikke hurtig, idet triggers jo altid sidestilles med langsom (sikkert uforskyldt).

Replikering er altså noget hø (godt jeg ikke skrev lort, for det var noget værre noget på dit tag). Justering af tabeller og den slags er direkte træls - hvis man ellers når dertil inden ens pool af login og passwords løber tør.
Avatar billede steent Nybegynder
16. februar 2011 - 15:03 #5
HRC: "Jeg har desværre kun set SSIS demonstreret en enkelt gang og det så da flot ud."

Som jeg sagde, desværre er DTS og den efterfølger SSIS ekstremt undervurderet i specielt Danmark, hvilket er en skam, da det er et kraftfuldt værktøj.

Men jo, 'replikering' ville nok heller ikke være den løsning jeg ville vælge til opgavestilleren, det optimale ville jo være en gang for alle, at få delt brugerne op i forskellige landespecifikke tabeller.
Avatar billede hrc Mester
16. februar 2011 - 15:15 #6
Enig. Databasen bør rettes op. Hvad med "Updatable views"? Et for hvert land? http://msdn.microsoft.com/en-us/library/ms187956.aspx
Avatar billede steent Nybegynder
16. februar 2011 - 16:51 #7
At lave views ændrer jo ikke på at der vil blive spurgt i 'hoved tabellen', så hvis det er et spøgsmål om hastighed, er det en dårlig idé...

Lad os få Dreyfusdk på banen, hvis man kendte mere til opgaven, ville det osse være nemmere at finde den bedste løsning.
Avatar billede Syska Mester
16. februar 2011 - 17:48 #8
Med 11 millioner brugere på et site, så må man formode at performance har lidt at sige her :-)

Omend det virker mærkeligt at have dublicate data. Med de rigtige indexes og et CountryId burde det jo være en nem lille ting at ordne.

Men ja ... vi bør nok høre lidt fra owner af dette spørgsmål.

mvh
Avatar billede janus_007 Nybegynder
16. februar 2011 - 20:47 #9
Flere ting her...
SSIS er absolut mindst anbefalelsesværdigt til den opgave. SSIS er kun til integration imellem forskellige kilder.

Replikering er ikke noget hø at vedligeholde, men derimod ikke velegnet hvis tabellerne ligger i samme database på samme server.

At kode sig ud af det med nogle tilstande som skal vedligeholdes er noget man slet ikke skal give sig i kast med. Det vil 100% give dig problemer på et tidspunkt.

Hvis det blot er pga. performance og det hele alligevel skal køre fra samme server så vil det ikke gå hurtigere at have flere tabeller, her vil man derimod benytte et index, nonclustered, partitioned måske.

Jeg kan måske til nød forstå behovet for flere tabeller hvis vi snakker over 1.000.000.000 rækker, men så igen.... alt afhængig af index... min pointe er bare at det skal handle om andet end performance førend man deler det ud i tabeller.
Avatar billede steent Nybegynder
16. februar 2011 - 21:19 #10
Nå... Melder mig ud, kan i have en god diskussion. Den ene er mere int. end den anden i at fortælle hvor dårlige de foskellige løsningsforslag er. Det er jeg enten for dum til at forstå hvorfor man gør det, eller jeg bevæger mig ikke på et sådant niveau..
Avatar billede Syska Mester
16. februar 2011 - 22:06 #11
Og det gør du alligevel ved at komme med den kommentar.

Vi (jeg gør i hvert fald) snakker for det meste altid om den bedste løsning, og det tror jeg også sprørger er interesseret i. At du så kalder det at bevæge sig "på et sådant niveau" må være for din egen regning. Kan godt det sted  du arbejder ikke går ind for snakke ting igennem for at vælge den bedste løsning på et givent problem, men det er der heldigvis andre der gør. Derfor der er kommet de ting på bordet.

At løsninger så måske bliver kaldt for dårlige, så vend den lidt om ... og du kan jo så kalde dem mindre gode, i stedet for at blive "pige sur" :-).

mvh
Avatar billede hrc Mester
16. februar 2011 - 22:32 #12
janus: Jeg er nok bare en klovn for jeg har bøvlet med replikering i flere måneder på at lave en simpel snapshot replikering, der er stabil nok til jeg kan overlade den til kunder. Det på en måde hvor der er styr på opsætning og procedurer i forbindelse med opdateringer og ændringer. Det er noget bøvl! Kunne have kodet det på samme tid.
Avatar billede janus_007 Nybegynder
17. februar 2011 - 19:05 #13
Hej hrc
Ja jo... altså kan sagtens følge dig og har selv siddet flere gange med replikeringsproblemer, men altså... jeg har alligevel valgt at være fortaler for det, det giver en masse sikkerhed, overvågning osv. "out of the box"

At kode selv er jo altid et alternativ der skal overvejes, men mange ting kan gå galt... publisher eller subscriber kan gå ned, flere subscribere (en kommer online, en anden ikke osv), referentiel integritet og synkronisering, conflicts? subscriber updated/ publisher updated, merge osv.

Men smag og behag :)
Avatar billede hrc Mester
17. februar 2011 - 22:05 #14
janus: Replikering virker og jeg kender ikke bedre måde at kopiere en central database ud på en bærbar. Jeg startede på bar bund og kom ind i replikering på en dårlig måde. Nu er jeg mere fortrolig med det hele er og erkender så, at man ikke sætter uuddannede kunder til at administrere det - og det var hensigten da jeg promoverede løsningen. Derfor forsøger jeg at kode alle trin så kunderne har et skræddersyet program at administrere i. Det spiller ... næsten. Problemet er at jeg flere gange har kæmpet meget længe for at slippe af med "næsten". Jeg har endda måtte kalde på ekstern hjælp. De tager herfra efterladende mig miracleløst en del klogere, hvorefter jeg flyttes til et andet projekt og først vender tilbage når alt er glemt igen! Derfor måske lidt uforskyldt, men JEG ER TRÆT AF REPLIKERING (for jeg får aldrig opgaven gjort færdig)!!

.. desuden er en publiceret database ret besværlig at justere. Væk med artiklen, ret, på med artiklen igen, lav ny distribution.

Nok brok, og det i en anden mands spørgsmål. Jeg klebager, men det måtte ud!
Avatar billede janus_007 Nybegynder
18. februar 2011 - 00:12 #15
Jeg kan godt følge dig... men jeg har nok bare lige fået overkommet det der "næsten" med tiden :)

forresten så understøtter SQL2008 at man løbende kan ændrer på schemaet, både fjern og tilføj kolonner :) Indrømmet... det var ret besværligt tidligere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester