1.7 KiB
Incremental rendering
Incremental rendering works with the help of the mtime column on the minetest database.
Every insert or update changes the mtime column to the current timestamp (with the help of triggers). This way changes to the blocks can be detected by remembering the mtime of the last query.
Table blocks (minetest db)
posx | posy | posz | data | mtime --- | --- | --- | --- | 10 | 11 | 12 | ABC | 1552977950000 20 | 21 | 22 | 123 | 1552977950010 30 | 31 | 32 | XYZ | 1552977950020 40 | 41 | 42 | A12 | 1552977950030 50 | 51 | 52 | B34 | 1552977950040
Table settings (mapserver db)
key | value --- | last_mtime | 1552977950020
Query example
The following query will return all changed blocks since the last call:
select posx,posy,posz,data,mtime
from blocks b
where b.mtime > 1552977950020
order by b.mtime asc
limit 1000
Additionally it will limit the returned rows so the mapserver can be started and stopped at any time without processing all new data at once.
After that query the highest mtime is stored again in the mapserver database.
Schedule
Incremental rendering is executed periodically:
- Without pause between calls if there is more data available (catch-up after mapserver downtime)
- With a 5 second pause between calls if there is no new data
About realtime
Of course there are delays between placing/removing blocks and the tiles on the mapserver. The minetest setting ** server_map_save_interval ** is responsible for the delay to the mapserver (defaults to 5.3 seconds) Don't try to decrease this value too much on your minetest instance, it has a performance impact!