Tilgå data ud fra placering i tabel, Rownumber, repartitionering, eller noget helt tredie
Rownumber, repartitionering, eller noget helt tredieEr ved af flytte en database fra Oracle til MS-SQL og er i den forbindelse stødt på nogen udfordringer mht til vectorer og funktioner på disse.
Grundlæggende har jeg i Oracle en tabel med følgende række udseende {x1, x2, x3, x4, x5, Y{1:10000}}
Dette er i MS-SQL blevet til et layout med to tabeller {x1, x2, x3, x4, x5, Vector_nummer}
{Vectornummer, Y{1}}
{Vectornummer, Y{2}}
{Vectornummer, Y{3}}
......
{Vectornummer, Y{10000}}
Problemet består i at der for forskellige værdier af x[1..5] er en sammenhæng mellem Y{i} for forskelligt vektor nummer. Og jeg skal helst kunne regne på disse. I Oracle er det nemt grundet at jeg kan refererer vector indgangene.
I databasen bliver Y{i}'erne gemt i ordnet rækkefølge så reelt vil jeg med en funktion ligende (rækkenummer mod 10000) kunne sammenligne rigtigt på tværs af vektorer. Men kan jeg reelt få den rækkefølge de er gemt i frem i et kald når jeg skal bruge ORDER BY ().
Men hvad er det bedste løsning (plads og hastighed er relevante faktorer, da data skal gemmes men normalt kun bruges en gang, er plads forbrug vigtigere end tid)
JOIN med en Where ala:
FROM [dbo].[VECTOR_VIEW] as a, [dbo].[VECTOR_VIEW] as b
AND a.ROW_NUMBER() OVER (ORDER BY a.x1 a.x2, a.x3, a.x4, a.x5 ) AS 'RowNumberA' =
b.ROW_NUMBER() OVER (ORDER BY b.x1, b.x2, b.x3, b.x4, b.x5 ) AS 'RowNumberB
([Vector_View] samler de to tabeller i en.)
Indfør en ny søjle i 'vector' tabellen med nummer
{Vectornummer, Y{1}, 1}...{Vectornummer, Y{i}, i}...{Vectornummer, Y{10000}, 10000}
Ændre layout mere radikalt {[x1..x5] har i alt 216 kombinationer, så lave en ny tabel med 217 rækker:
{Vectornummer, Y[1;1], [Y2;1] ..... [y216,1]}
{Vectornummer, Y[1;2], [Y2;2] ..... [y216,2]}
..........
{Vectornummer, Y[1;10000], [Y2;10000] ..... [y216,10000]}
Mit umidelbare ide er at 'join' ideen ikke vil fylde mere, men vil en sådan rownumber strategi fungere, og vil den være væsentligt langsommere
Og for udvidelse af vector tabellen er det mest pladsen jeg tænker på da denne tabel vel udgør +90% af databasen. Og udvidelsen vil vil førøge tabellen med omkring 1/3.
Og samling i en ny tabel er vel i mod normaliserings ideen og dermed vil kunne påvirke hastigheden.
JOIN ideen med row_number er den jeg tror mest på, og den enste hvor jeg ikke skal ændre på 'data import processen'
Eller har jeg tænkt helt forkert, og i så tilfælde hvorledes bør jeg så angribe problematikken.