Geachte tweakers,
Ik heb een stukje software met momenteel 27.000+ bestandsnamen.
Deze zijn opgeslagen als absoluut pad in de database.
De software scant een bepaalde map, en kijkt of er nieuwe bestanden zijn. Momenteel gebeurt dit dmv een scan van de harddisk inladen, alle bestandsnamen selecteren uit de database, en met een dubbele loop vergelijken. Een snelheid van O(n^2) dus. Kortom, huilen.
Wat zouden jullie aanraden om dit proces te versnellen?
Ik had het volgende idee:
- De string van het absolute pad representeren als numerieke waarde. (past dit? int32? int64?)
- Vanuit deze waardes een Red-Black Tree bouwen.
- Deze RB-Tree opbouwen bij het opstarten van de software, en in het geheugen houden. (Space usage: O(n))
Aangezien zowel insertion als searching O(log n) tijd kost, zal dit behoorlijk schelen tegenover O(n^2).
Zijn jullie het eens met deze optimalisatie, of hebben jullie betere ideeen?
Overigens niet onbelangrijk:
OS: Windows Server 2008 R2
Taal: C/C++
DB: Sqlite3
Overigens scan ik momenteel met een recursieve functie die gebruik maakt van FindNextFile. Kan dit sneller?
Ik heb een stukje software met momenteel 27.000+ bestandsnamen.
Deze zijn opgeslagen als absoluut pad in de database.
De software scant een bepaalde map, en kijkt of er nieuwe bestanden zijn. Momenteel gebeurt dit dmv een scan van de harddisk inladen, alle bestandsnamen selecteren uit de database, en met een dubbele loop vergelijken. Een snelheid van O(n^2) dus. Kortom, huilen.
Wat zouden jullie aanraden om dit proces te versnellen?
Ik had het volgende idee:
- De string van het absolute pad representeren als numerieke waarde. (past dit? int32? int64?)
- Vanuit deze waardes een Red-Black Tree bouwen.
- Deze RB-Tree opbouwen bij het opstarten van de software, en in het geheugen houden. (Space usage: O(n))
Aangezien zowel insertion als searching O(log n) tijd kost, zal dit behoorlijk schelen tegenover O(n^2).
Zijn jullie het eens met deze optimalisatie, of hebben jullie betere ideeen?
Overigens niet onbelangrijk:
OS: Windows Server 2008 R2
Taal: C/C++
DB: Sqlite3
Overigens scan ik momenteel met een recursieve functie die gebruik maakt van FindNextFile. Kan dit sneller?