[mySQL & PHP] Matrix opslaan in DB

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ik zit mijn hersens een beetje over het volgende probleem te breken. Ik heb een behoorlijk grote matrix, neem als voorbeeld 100 bij 100 dus:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
xxxxx|  a  |  b  |  c  |  d  |  e  | .. etc ..
-----+-----+-----+-----+-----+-----+-----
  a  |  -  |  3  |  4  |  7  |  2  | .. etc ..
-----+-----+-----+-----+-----+-----+-----
  b  |  &  |  -  |  3  |  8  |  2  | .. etc ..
-----+-----+-----+-----+-----+-----+-----
  c  |  &  |  &  |  -  |  5  |  3  | .. etc ..
-----+-----+-----+-----+-----+-----+-----
  d  |  &  |  &  |  &  |  -  |  1  | .. etc ..
-----+-----+-----+-----+-----+-----+-----
  e  |  &  |  &  |  &  |  &  |  -  | .. etc ..
-----+-----+-----+-----+-----+-----+-----
 etc | etc | etc | etc | etc | etc | .. etc ..

& is reference naar tegenoverliggende waarde in de matrix
Nu is mijn probleem, hoe sla ik dit handig in een database op? Ik kan wel voor iedere cel een record aanmaken als:
code:
1
2
3
4
5
kolom1  |  kolom2  |  kolom3
--------+----------+----------+
   a    |     b    |    3     |
--------+----------+----------+
   a    |     c    |    4     |

etc. maar klinkt niet als de handigste manier. Alle afstanden kommagescheiden erachter opslaan is ook geen handige oplossing, want het moet snel doorzocht worden. Iemand ervaring met dit probleem?

[ Voor 6% gewijzigd door r0bert op 04-10-2004 12:20 ]


Acties:
  • 0 Henk 'm!

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

Een normale layout zou inderdaad de opzet rij,kololom,waarde voor velden zijn. Echter als je een vaste grootte hebt zou je natuurlijk de matrix gewoon als binaire file kunnen opslaan (en dan dus ook niet als blob in de DB). Met integer waarden is het niet moeilijk om N bytes per cel te nemen zodat je dan 2^(8*N) waarden kan hebben in een cel.

edit: en vanwege de vastte grootte kan je dan de index in de file makkelijk uitrekenen, vervolgens seek gebruiken om op die positie uit te komen.

[ Voor 18% gewijzigd door 4VAlien op 04-10-2004 12:31 ]


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Euhm.. Je zult vast en zeker gelijk hebben, maar kun je het iets makkelijker uitleggen. Ik ben hier geloof ik niet zo goed mee, heb het nu een paar keer gelezen, maar snap het nog niet echt..

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom maak je niet een tabel met een veld voor kolom, een veld voor rij, en een veld voor de waarde? Dan kun je voor [a,b] opslaan in je tabel 'a','b',3, waar elke waarde natuurlijk in een eigen veld moet.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Dat is dus de 2e oplossing die ik noemde, maar die oplossing vind ik niet bepaald efficient en netjes. Als je wilt opslaan moet je de hele matrix weer afbreken en met inlezen weer helemaal opnieuw construeren.

De hele structuur naar een binary file wegschrijven lijkt me geen gek idee.. maar geen idee hoe ik dat moet doen (hele structuur ineens wegschrijven), maar daar zal ik zelf intussen maar een naar op zoek gaan. Voordeel van naar een database schrijven ipv een binairy file is dat een database gewoon doorzoekbaar is zonder dat je alles in hoeft te lezen natuurlijk. Ik ben er dus nog niet echt uit wat nou een goede oplossing is.

Een database wordt trouwens ook wel groot aangezien je dan voor een matrix van 100 bij 100 volgens mij 100x100/2-100=4900 records krijgt (per matrix!)..

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
4900 records in een tabel is peanuts voor een database :)

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ook als het 3000 matrixen worden?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

r0bert schreef op 07 oktober 2004 @ 14:42:
Ook als het 3000 matrixen worden?
Pas als het in de miljoenen records begint te lopen, begint het van een beetje formaat te worden :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Mmz dit zouden er dus iets van 15 miljoen zijn. Maargoed, dat zou dus een betere oplossing zijn dan binairy files of een ander soort oplossing? Want dan ga ik wel gewoon met database werken, maar ik denk, laat ik ook even medelijden hebben met mijn mysqldatabeestje :P
Pagina: 1