Regular object of DAOS is stored in hierarchical format, it can support multi-version and arbitrary overwrites, DAOS has to keep tree indexes for these objects to support high efficient key and value insert and lookup. It means that DAOS has to do multi-allocation for even a very small object (object, tree node, key, tree node, value…), giving these allocations are very small, most of them will stay in the MD-blob forever: there it is no way impossible for DAOS to migrate them all small pieces to DT-blob because write amplification is unacceptable. It is worth noting that everything in MD-blob will be pinned in DRAM forever.
This is hard to change because data model of DAOS can support snapshot, overwrites, distributed transaction, MVCC. However, for workloads like AI/ML, the dataset will never be changed again after data ingestion. It means that keeping indexes and logs for objects is not always necessary, especially for those objects are relatively small. The terminology to describe this kind of AI/ML datasets is Write-Once-Read-Many (WORM).
Because WORM object will never be modified again, so it be serialized, which is called “flattened” in this design document, into contiguous buffer and migrate to DT-blob (unpinned from DRAM). After migrating to DT-blob, the memory occupied by the object can be freed. In the future, before serving read of it, the entire object can be brought back to DRAM by one SSD read from DT-blob.
...
NB: DAOS can still keep indexes for large object even it is WORM, because DAOS should provide fast search and read.