Максимальный размер памяти, который может быть отображен в памяти, зависит от размера виртуального адресного пространства, который определяется диспетчером виртуальной памяти ЦП.32-разрядный ЦП имеет ограничение в 4 ГБ виртуального адресного пространства, это ограничение для всей системы, если не включен PAE , в этом случае ограничение относится к процессу.
В дополнение кТаким образом, ядро и ваше приложение резервируют некоторое собственное пространство в вашем адресном пространстве, а для выделения памяти обычно требуется непрерывное адресное пространство, что сокращает объем памяти, выделяемой для базы данных.
Таким образом, вашему пользователю потребуется либо включитьPAE в своей системе или обновите до 64-битного процессора.Если ни один из этих вариантов не подходит для вашего приложения, то вы не можете использовать файл отображения памяти, размер которого превышает доступное адресное пространство, поэтому вам придется выполнить некоторую сегментацию, чтобы разбить данные на несколько файлов, которые можно отобразить только на небольшие порции ввремя.Я предполагаю, что lmdb требует, чтобы он мог отобразить весь файл базы данных в память.
Для приложения блокчейна ваши данные в основном представляют собой линейную последовательность записей журнала, поэтому вашему приложению необходимо работать только ссамые последние записи большую часть времени.Вы можете разделить последние записи в своем собственном рабочем файле, а остальную часть журнала - в базе данных, для которой не требуется отображать весь файл в память или в несколько файлов фиксированного размера, которые можно отображать и удалять при необходимости.