2016-10-11 11 views
0

Итак, я рассматривал ряд ресурсов, связанных с проблемами производительности, связанных с записью в файл. Я столкнулся с понятием «Добавить файлы и журналы транзакций». То, что я не нашел, - это типичные форматы или эффективные форматы для этих файлов.Каковы некоторые форматы файлов, используемые при записи файла только для добавления?

Возможно, я ошибаюсь, но может показаться, что можно было читать и писать в один и тот же файл одновременно, но я не нашел простых примеров реализации. Кажется, что писателю пришлось бы оставить подробности о данных, найденных в файле, или, возможно, полностью описательный формат, который можно разобрать.

Есть ли хорошие ссылки, как реализовать журнал транзакций или добавить только реализацию файла? Может быть, еще лучше: описания форматов, используемых при добавлении только файлов?

ответ

0

Ваш вопрос очень широк и трудно рекомендовать один подход. Но поскольку вы смотрите на параметр только для приложения, вам нужен формат, который не требует нижнего колонтитула. Например. вы не можете использовать XML, поскольку XML должен иметь закрывающие теги, и вы не просто добавляете данные.

Очевидным вариантом является формат файла с разделителями, будь то табуляция или текст с разделителями-запятыми. Они практически универсальны и четко определены. Они также довольно компактны, всего один символ, чтобы разграничить поля. Однако они не подходят для данных, которые меняются последовательно. Например. одна строка имеет значения для полей A, B, C, но другая строка имеет значения для полей A, D и E. В этом случае вам может понадобиться формат, который определяет тип данных в записи на запись. Примером такого формата является HL7 (https://en.wikipedia.org/wiki/Health_Level_7). Это формат с разделителями, но каждая строка имеет «заголовок», указывающий тип записи.

Если вы ищете более высокую производительность, вы можете придумать свой собственный формат в зависимости от ваших данных и даже сохранить его в двоичном формате и даже использовать сжатие (см. DeflateStream https://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream(v=vs.110).aspx) для уменьшения ввода/О. Это сделает операции записи немного более интенсивными в ЦП, но ввод-вывод, как правило, медленнее, так что в целом, тем более, что текст сжимается очень хорошо, вы можете получить прибыль от производительности. Вы должны были бы ориентироваться, чтобы быть уверенным в своем случае использования.

Наконец, вам нужен класс, который может управлять записью (кэширование/запись в очереди, хранить обработчик файлов и т. Д.), Чтобы код вызова можно было упростить и синхронизировать в одном месте. Вы можете сделать этот асинхронный вызов, если вызывающий может продолжить работу, и ваш писатель будет обеспечивать, чтобы данные вносили это или синхронно, если это «журнал транзакций», что означает, что потеря неприемлема, и вызывающий должен убедиться, что запись на самом деле произошло.

Опять же, это очень высокий уровень информации, так как ваш запрос такой же смутный и высокий. Если вы придумаете более подробную информацию, возможно, мы сможем вам помочь.