Having a relational database with indexes might be better for #141. The new structure I'm envisioning would keep the statedb and use that as the queue by way of indexes:
| Mode |
state |
progress |
score |
elapsed |
remaining |
hist |
prev |
next |
in-memory-queue |
won |
| lookup |
= x |
|
|
|
|
|
|
|
|
|
| insert |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
| update |
= x |
|
set min |
set |
set |
set |
set |
|
|
|
| process |
= x |
|
|
|
|
|
|
set |
set false |
|
| evict |
= x |
|
|
|
|
|
|
|
set true |
|
| retrieve |
|
= x |
sort |
sort |
sort |
|
|
|
= false, set true |
|
| recover |
|
|
|
|
|
|
|
|
set false if true |
|
| solutions |
|
|
|
sort |
|
|
|
|
|
= true |
- Our statedb lookups are for data at the primary key (state).
- As we process states, we insert the new states (or update the ones we've found faster routes to), and update the processed states with the
next steps.
- Evicting from the in-memory-queue simply flips the bit.
- Retrieving states looks for states with the in-memory-queue bit set to false (and then sets them to true)
- On recovery, we can either retrieve all the elements marked as being in the memory queue, or set them all back to false and perform a retrieve.
- And we can retrieve solutions directly on recovery as well.
Having a relational database with indexes might be better for #141. The new structure I'm envisioning would keep the statedb and use that as the queue by way of indexes:
nextsteps.