# Как справиться с расходами на операции чтения и записи

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

Существует две фундаментальные техники по улучшению операций чтения и записи: кэширование и форматирование данных. Кэширование позволяет избежать чтения-записи (обычно чтения некого абстрактного значения) с помощью сохранения копии значений локально. Таким образом, операция чтения для получения значения не повторяется. Главное в кэшировании четко обозначить, какие данные являются исходными, а какие - копиями. Должен существовать только один исходник. Кэширование опасно тем, что иногда копия может не отразить изменения, произошедшие в исходных данных.

Форматирование данных - это удешевление операций чтения и записи за счет более эффективного представления данных. Зачастую это конфликтует с другими требованиями к данным, вроде удобочитаемости и переносимости.

Часто формат данных можно улучшить в 2-3 раза относительно их первоначального представления. Техники, которые позволяет сделать это, включают представление в двоичном виде вместо представления в удобочитаемом виде, передача справочников символов вместе с данными, так что длинные символы не нуждаются в кодировании, и, в крайнем случае, способы вроде алгоритма Хаффмана.

Третий способ, который иногда возможен, это перенос вычислений ближе к самим данным. Например, если вы читаете данные из базы и выполняете с ними простые операции вроде сложения, то стоит попытаться перенести эту операцию на сервер базы данных. Этот способ очень сильно зависит от типа вашей системы, но вам стоит отдельно изучить его возможность.

Следующее: [Как управлять памятью](/how-to-be-a-programmer/ru/1-beginner/personal-skills/09-how-to-manage-memory.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://braydie.gitbook.io/how-to-be-a-programmer/ru/1-beginner/personal-skills/08-how-to-deal-with-io-expense.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
