NacDB is like CanDB that it is a multi-canister database, but unlike CanDB, NacDB consists of sub-databases, each of which is contained in a canister (in every partition canister there can be several sub-DBs). It allows a sub-DB to be efficiently scanned/enumerated/listed.
To save money on creating of new canister, a sub-DB can be automatically moved between canisters (to the last or to a newly allocated canister). When a sub-DB is moved, a callback is called for the app that uses NacDB that allows the app to change “links” to the sub-DB elements, e.g. update the CanDB that stores keys to NacDB. (So, it is recommended to use NacDB together with CanDB. NacDB is recommended to be used only when you need enumerating items.)