File architecture
Well, these are pages (= blocks). Pages should have a multiple page size of the underlying storage, so probably 1kb or 8kb blocks. Each block has a number and can be a link in this way.
Catalog pages store bounding fields for children and their page numbers.
Child pages store actual data objects.
Tree management
Well, theoretically: whenever you change a page in memory, you write the changes to disk. What is it.
In practice, you may need to use the cache to improve performance, and you may have transactions to save your tree in the event of an application failure.
In both of these articles you can find a lot of literature in the field of RDBMS architecture.
The key advantage of R * -tree is that it is a regular page-oriented tree, as you will have them in database systems everywhere. If you have a good implementation on a B + -tree disk, you can reuse most of your code for R * -tree.
How to start
To get started, you need to get used to indexing data on disks, as is done in classic RDBMSs. I suggest starting with a B-tree or B + -tree drive. Allow deletion because you need to think about managing remote pages and all that.
Once you have identified the B-Tree on the disk (and perhaps spend some time optimizing it!), The execution of the R-tree on the disk should be fairly obvious.
I have not looked at the code, but this may be a good starting point: http://www.die-schoens.de/prg/ or some of the other related ones. Looking for a discrete implementation of the B + tree in C ++ or C
source share