У нас есть в домах noSQL db, которые в основном хранят все в компактном двоичном файле. Теперь мне нужна структура данных, похожая на хранилище ключей или B + Tree. Проблема в том, что «значение» в моем случае может быть разных типов, а размер очень изменчивый, может составлять от 1 Кб до 1-2 ГБ. Обычно ключ является строкой, а значение представляет собой поток данных, может быть потоком int, string или нестандартного типа.Ключевое значение хранилища по имени папки
Я думал о внедрении дерева B +, но это непросто, потому что B + Tree нуждается в «значении» того же типа, а размер «значения» должен быть достаточно малым, чтобы его можно было хранить в относительном маленький блок. Там может быть вариант, но я не нашел учебника о том, как реализовать дерево B + с примерами, показывающими, как хранить на диске. Большая часть учебника, который я вижу, - это только B + Tree в памяти.
У меня тогда есть идея использования имени папки/файла в качестве ключа. И тогда значение может быть чем угодно внутри файла. Значения тогда могут быть произвольного размера, это действительно то, что я хочу. Так что мой вопрос здесь, в крайнем случае,
- данные для разных дней хранить в отделенных папках
- я могу иметь 1M-50M ключи (на самом деле файлы/папки), чтобы сохранить на диске в течение дня
- Работа с данными в файлах обычно будет «только для чтения» и «добавляется к» в течение дня. Исторические данные никогда не будут изменены.
Я видел, что у меня может быть ~ 4 миллиарда файлов на современной ОС, поэтому я доволен этим подходом для хранения ~ 2YR на одной машине. Я просто беспокоюсь, если этот способ внедрения хранилища ключей очень плох? Зачем? Какую проблему я могу иметь при работе с файловой системой? (Например, диск Framented на окнах?)
Все они реализованы на C++ в Windows/Linux.
Каким будет ваш формат ключа в случае, если вы планируете папку/файл в качестве ключа? – sameerkn
Ключи меня будут нормальными строками и на 100% легальны для именования папок/файлов. – ctNGUYEN
Дробная фрагментация диска на SSD не является проблемой. И поскольку вы, кажется, не удаляете старые данные, вам нужна только одна запись на полном диске, которая намного ниже пределов выносливости SSD. (обычно 1000+ записи полного диска) – MSalters