Мне нужно хранить много данных, содержащихся в базах данных SQLite, на файловом сервере. У меня есть возможность разбить данные на множество файлов. Это означает, что снижается риск повреждения большой части данных, их легче перемещать. Меньше проблем с блокировкой и т.д. У меня вопрос, сколько файлов - это слишком много файлов. 100 000? 1.000.000? 10.000.000 файлов? Другими словами, каковы накладные расходы при создании файла на файловом сервере? Когда я говорю о накладных расходах, я говорю о количестве оборотов для создания файла. Я знаю блоки и размеры блоков, и меня не беспокоит потеря памяти при хранении во многих файлах.
Мой вопрос не в том, лучше ли вообще хранить такую базу данных на файловом сервере и не использовать надлежащий сервер базы данных, использующий другое программное обеспечение базы данных.
Среда - это среда microsoft, но я не знаю ничего конкретного о файловом сервере.
Более 10 000 в папке затруднят доступ к ней с помощью проводника. Этого можно избежать, разбив его на дерево папок.
Кроме того, если ваши файлы не кратны размеру кластера (обычно 4 КБ), они будут тратить остаток на файл. В зависимости от размера файла он может быть значительным или нет.
Также доступ ко многим маленьким файлам медленный из-за накладных расходов. Это может ограничить скорость таких вещей, как резервное копирование. Если вы можете спроектировать свое использование для последовательного чтения больших файлов и выполнения произвольного доступа к памяти, вам будет лучше.
SQLite - очень крутой продукт, но если вы обращаетесь к базе данных по сети, это ОЧЕНЬ плохая идея делать это, используя доступ на основе файлов, даже если БД доступны только для чтения и у вас нет параллелизма для беспокоиться, производительность будет ужасной. Вы должны иметь очень веская причина для этого.
На практике, предполагая, что производительность, параллелизм и блокировка не являются проблемами, я не ожидал бы какой-либо значительной разницы между созданием 1000 файлов или записью тех же данных в 10 файлов в виде пакета, однако это будет сильно варьироваться в зависимости от характера базовой файловой системы. . OTOH, при котором множество транзакций происходит случайным образом между файлами, я ожидал, что меньшее количество файлов будет более эффективным. Для чтения я ожидал бы аналогичной схемы. Но есть только один способ узнать наверняка - попробовать.