Размер данных и доступ к диску - PullRequest
1 голос
/ 01 октября 2011

Есть ли преимущество при выравнивании данных в хранилище до определенного размера?Например, если у меня есть возможность использовать один байт для хранения информации или 4 байта, что является предпочтительным (при условии, что размер хранилища не имеет значения, только оптимизация)?

Я задаю этот вопрос в основном потому, что знаючто это «имеет значение», если вы принимаете значения в памяти (и, следовательно, причину, по которой логическое значение .NET составляет 4 байта, например, согласно другому вопросу на этом сайте).

Я не знаюt думаю, это будет иметь значение, но я использую .NET Framework (особенно C #).

1 Ответ

1 голос
/ 01 октября 2011

Если вам необходимо получить доступ к какой-либо конкретной записи в файле, вам понадобится какой-то индекс или фиксированный размер записи - но это для всей записи, а не для каждой отдельной части записи. Я бы не стал идти на все, чтобы выровнять данные по 4 или 8-байтовым границам в хранилище. Конечно, если вы читаете запись за раз в выровненном месте в памяти, то вы в конечном итоге получаете выровненные данные для выполнения каких-либо преобразований ... так что все это может в какой-то степени переплетаться - но преобразование скорее всего будет разовым, а не частым доступом после преобразования.

Размер хранилища имеет значение для оптимизации, конечно, потому что чтение меньшего количества данных с диска будет дешевле, чем чтение большего (обычно ...).

Если у вас нет особых требований, таких как фиксированный размер записи, я просто попытался бы спроектировать хранилище так, чтобы использовать было как можно проще. Если у вас есть конкретные проблемы для производительности, вы должны профилировать их. Например, может более эффективно использовать UTF-16 для кодирования строк, чем UTF-8, поскольку кодирование и декодирование должны требовать меньше работы ... даже если это займет больше места. Вы должны проверить это, а не делать какие-либо предположения. Обратите внимание, что когда вы загружаете формат хранения, это будет иметь большое значение - по сети, с механического диска, с твердотельного диска ... у них будут разные характеристики производительности, что, вероятно, затруднит разработку чего-то, что самый быстрый для всех случаев.

...