Вы можете использовать хранилище значений ключей для моделирования большинства структур данных, если игнорируете проблемы параллелизма. Ваши требования не совсем ясны, поэтому я собираюсь сделать некоторые предположения относительно вашего варианта использования. Надеюсь, если они неверны, вы можете обобщить подход.
Вы можете тривиально создать связанный список в хранилище, имея известный корневой узел (назовем его 'node_root'), который указывает на кортеж значения {data, prev_key, next_key}. Элементы prev_key и next_key - это имена ключей, которые должны следовать соглашению 'node_foo', где foo - это UUID (в идеале вы можете генерировать их последовательно, если нет, то можете использовать какой-либо другой тип UUID). Это обеспечивает упорядоченный доступ к вашим данным.
Теперь, если вам нужно O (1) удаление ключа, вы можете добавить второй индекс в структуру с ключом 'data' и значением 'node_foo' для правого foo. Затем вы можете выполнить удаление так же, как и связанный список в памяти. Удалите узел индекса, когда закончите.
Теперь, имейте в виду, что одновременное изменение этого списка так же плохо, как и одновременное изменение любой общей структуры данных. Если вы используете что-то вроде BDB, вы можете использовать их (превосходную) поддержку транзакций, чтобы избежать этого. Для чего-либо без транзакций или управления параллелизмом вы захотите обеспечить внешнюю блокировку или сериализованный доступ к одному потоку.