Есть ли у кого-нибудь опыт хранения данных на диске? У меня есть приложение для моделирования в памяти, которое может выполнять вычисления и т. Д. В основном данные хранятся в виде списков объектов, которые имеют вложенные коллекции значений ключа, такие как словарь < int, словарь < int, T >>.дисковое хранилище массивов и т. Д.
В настоящее время я использую SQL-Server как уровень защиты, но я использую очень мало его функций. Поэтому я думаю, что могу писать/читать данные на диск самостоятельно, чтобы уменьшить зависимости и упростить установку.
Итак, я написал небольшую рутину, которая записывает каждый массив на диск примерно в таком формате, где слова «ObjId», «Type», «Valid» и «Count» на самом деле не находятся в файле, это 1-й, 2-й, 3-й и 4-й строки в байте [], затем идут < int, T> пары. 52 происходит от 4 * 4 + 3 * (4 + 8). (4 байта для междунар 8 для двойной)
Bytes: 52
ObjId: 123
Valid: 234
Type: double
Count: 3
1 .23
2 .34
3 .45
В реальной жизни нет отступов и т.д., они все последовательные байты в длинном потоке.
Это нормально, чтобы написать один раз. Но когда я хочу написать дополнительную ценность где-то посередине, я должен переписать все это. Также я не могу легко обновить одно значение.
Один из вариантов заключается в том, чтобы записывать каждый объект в отдельный файл, поэтому мне пришлось бы только переписать его. Но это кажется довольно неэффективным, потому что я получаю файлы размером 1kb, но 4kB на диске, поэтому я буду тратить туда пространство.
Так что мне нужно сделать, чтобы иметь возможность увеличивать запись в этом файле на диске? Я знаю, что в SqlServer есть «страницы», где он записывает данные, это путь?
Есть ли какая-нибудь библиотека, готовая пойти на этот тип проблем? Может быть, какой-то виртуальный файл, который позволит мне рассматривать их как отдельный байт [], но обрабатывает хранилище как отдельный файл psysical? В идеале сжат .. (толкая его, но кто знает .. Я был удивлен, прежде чем :-)
Заранее спасибо,
Герт-Ян
Привет, спасибо! Я знал о BDB как движок mySql, но никогда не рассматривал его для этого. Я посмотрю на него в выходные. Имея возможность просто поместить мой байт [] туда и вернуть его, кажется, довольно многое, что я искал. Я бы предпочел бы чистый C# с источником, но это должна быть зрелая технология, достаточная для использования в качестве черного ящика. – gjvdkamp