Я реализую дерево как простой массив (в смысле массива C ), в котором вместо указателей используются операции над индексами массива. Дерево станет очень большим, и мне нужно, чтобы оно сохранилось. Казалось бы, простейшие решения - это общий файл, в котором все данные массива просто соединены вместе.
Для доступа к листьям дерева мне нужно следующее:
Возможность чтения / записи одиночной серии 32-байтовых элементов в случайных позициях в файле.
Возможность "заблокировать" файл перед выполнением чтения / записи, так что другие асинхронные вызовы функций дерева должны будут ждать, пока обновляется дерево (потому что 1 обновляется абстракция дерева * , требуется несколько обновлений самого файла).
Я использую модуль fs
, который поставляется с узлом для доступа к файловой системе, однако вызов open
не блокирует его от других потоков, и я не вижу никакой документации по этому поводу. В идеале мне не нужно было бы блокировать больше, чем один этот файл, и это не создавало бы значительных накладных расходов, поскольку я буду выполнять десятки миллионов операций чтения / записи в дерево (что составляет 100 миллионов операций чтения / записи в файл). ).