Ради пользователей C ++, вот как это сделать, используя API Berkeley C ++, который не документирован и имеет ноль примеров. Это работает довольно хорошо, хотя!
Создайте Dbt (база данных Thang, я не придумываю это) для хранения буфера памяти:
void * buf = new unsigned char [bufferSize];
dbt = новый Dbt;
dbt-> set_data (BUF);
dbt-> set_ulen (BufferSize);
dbt-> set_flags (DB_DBT_USERMEM);
Свяжите это с DBMultipleKeyDataBuilder:
DBMultipleKeyDataBuilder * dbi = новый DBMultipleKeyDataBuilder (дБт);
Добавляйте пары «ключ» и «значение» по одной до тех пор, пока не завершите или буфер не заполнится
DBI-> Append (curKeyBuf, curKeyLen, curDataBuf, curDataLen);
... (их гораздо больше) ...
ИСПОЛЬЗУЙТЕ свою БД * db, и транзакцию, если хотите в txn, и массовую запись:
db-> put (txn, dbt, NULL, DB_MULTIPLE_KEY);
удалить dbi;
Я упустил много деталей, таких как проверка того, что буфер заполнен или достаточно большой, чтобы вместить хотя бы одну пару KV.
DBMultipleKeyDataBuilder может использоваться только один раз, но действительно эффективная реализация будет хранить пул буферных объектов Dbt и использовать их повторно. Вы также можете использовать эти базы данных для массового чтения, поэтому можно использовать их общий пул.