Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Rehashing can be incremental.

1: Allocate a new table of size at least 2X. 2: All accesses to the table hit both the old and new tables. 3: Inserts only go in new. 4: Any change (insert, update, delete) also moves 2 other elements.

You can prevent a O(n) rescan at 4 by keeping a single persistent cursor that scans through the old table from top to bottom. There, still O(1) throughout (C may go up by 2-3 but that's still small). And only uses 1.5x memory.

Not saying that's what postgres does here (it uses WAL, so probably not exactly).



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: