Ik werk aan een webapp met een back-end die berekeningen uitvoert met behulp van cuBLAS.
In de berekening wordt als invoer een 10'000 x 120 matrix gebruikt, welke periodiek verandert. De oude matrix blijft beschikbaar voor het reproduceren van eerdere resultaten.
De huidige versie leest de gewenste matrix in uit een file; in wezen een csv file met het volgende format:
Nu wil ik toevoegen dat gebruikers ook eigen matrices kunnen toevoegen (en verwijderen). In eerste instantie dacht ik in de database per gebruiker bij te houden welke file van hun is, maar dan krijg ik een wildgroei aan files. Dus leek het mij het beste om de matrix direct in de database op te slaan.
Mijn kennis van databases is echter zeer beperkt dus heb ik gegoogled naar tutorials en op stackoverflow gezocht. De tutorials normalizen de data allemaal, wat mij volledige overkill lijkt. Ik ga nooit een individueel element uit de matrix uit de database lezen, maar altijd de hele matrix.
De data als string opslaan lukt niet, blijkbaar is dat te lang, bovendien moet ik dan alsnog text moet parsen, terwijl ik weet dat alle waarden floats zijn. Is het niet mogelijk om het als floats op te slaan?
Het front-end is een ASP.Net applicatie en het backend is CUDA/C++. Front-end slaat data op in MariaDB, ik probeer ook MariaDB database te gebruiken om de matrices op te slaan.
...
Wat heb ik geprobeerd:
Genormaliseerd opslaan van de data. Dit lukt prima, maar slaat nergens op. Bovendien kan ik mij niet voorstellen dat een query die 10'000x120 datapoints als result geeft efficiënt is als het ook met één datapoint kan.
Opslaan in een text veld, dit gaat goed voor kleine test matrices, maar de werkelijke matrix is te groot.
...
Hoe kan ik deze data efficiënt opslaan in een database? (Of is wat ik al heb gedaan toch de beste optie?) Wat mis ik?
In de berekening wordt als invoer een 10'000 x 120 matrix gebruikt, welke periodiek verandert. De oude matrix blijft beschikbaar voor het reproduceren van eerdere resultaten.
De huidige versie leest de gewenste matrix in uit een file; in wezen een csv file met het volgende format:
code:
1
2
3
4
5
6
7
8
| <naam> <datum> #rows, #columns row1_float1, row1_float2, ... , row1_float#columns . . . row#rows_float1, row#rowsfloat2, ... , row#rowsfloat#columns |
Nu wil ik toevoegen dat gebruikers ook eigen matrices kunnen toevoegen (en verwijderen). In eerste instantie dacht ik in de database per gebruiker bij te houden welke file van hun is, maar dan krijg ik een wildgroei aan files. Dus leek het mij het beste om de matrix direct in de database op te slaan.
Mijn kennis van databases is echter zeer beperkt dus heb ik gegoogled naar tutorials en op stackoverflow gezocht. De tutorials normalizen de data allemaal, wat mij volledige overkill lijkt. Ik ga nooit een individueel element uit de matrix uit de database lezen, maar altijd de hele matrix.
De data als string opslaan lukt niet, blijkbaar is dat te lang, bovendien moet ik dan alsnog text moet parsen, terwijl ik weet dat alle waarden floats zijn. Is het niet mogelijk om het als floats op te slaan?
Het front-end is een ASP.Net applicatie en het backend is CUDA/C++. Front-end slaat data op in MariaDB, ik probeer ook MariaDB database te gebruiken om de matrices op te slaan.
...
Wat heb ik geprobeerd:
Genormaliseerd opslaan van de data. Dit lukt prima, maar slaat nergens op. Bovendien kan ik mij niet voorstellen dat een query die 10'000x120 datapoints als result geeft efficiënt is als het ook met één datapoint kan.
Opslaan in een text veld, dit gaat goed voor kleine test matrices, maar de werkelijke matrix is te groot.
...
Hoe kan ik deze data efficiënt opslaan in een database? (Of is wat ik al heb gedaan toch de beste optie?) Wat mis ik?