По умолчанию данные сессий хранятся в файлах. Это удобно для разработки или в маленьких проектах.
Но когда дело доходит до обработки множества параллельных запросов, то лучше использовать более сложные хранилища,
такие как базы данных. Yii поддерживает различные хранилища "из коробки".
Вы можете использовать эти хранилища, сконфигурировав компонент `session` в
[конфигурации приложения](concept-configurations.md) как показано ниже,
```php
return [
// ...
'components' => [
'session' => [
'class' => 'yii\web\DbSession',
// Установите следующее, если вы хотите использовать компонент БД, с названием
// отличным от значения по умолчанию 'db'.
// 'db' => 'mydb',
// Чтобы перезаписать таблицу сессий, заданную по умолчанию, установите
// 'sessionTable' => 'my_session',
],
],
];
```
Приведенная выше конфигурация использует таблицу базы данных для хранения сессионных данных. По умолчанию, используется
компонент приложения `db` для подключения к базе данных и сохранения сессионных данных в таблице `session`. Вам нужно будет
создать таблицу `session` заранее:
```sql
CREATE TABLE session (
id CHAR(40) NOT NULL PRIMARY KEY,
expire INTEGER,
data BLOB
)
```
Вы также можете хранить сессионные данные в кеше с помощью [[yii\web\CacheSession]]. Теоретически, вы можете использовать
любое поддерживаемое [хранилище кеша](caching-data.md#supported-cache-storage). Тем не менее, помните, что некоторые
хранилища кеша могут *сбрасывать* закешированные данные при достижении лимитов хранилища. По этой причине, вы должны в
основном использовать хранилища кеша, которые не имеют таких лимитов.
Если на вашем сервере установлен [Redis](http://redis.io/), настоятельно рекомендуется выбрать его в качестве
хранилища сессий используя [[yii\redis\Session]].
## Оптимизация базы данных <span id="optimizing-databases"></span>
Выполнение запросов к БД и выборки данных часто являются узким местом производительности веб-приложения.
Хотя использование техник [кэширования данных](caching-data.md) может *смягчить* снижение производительности, оно не
решает проблему полностью. Когда база данных содержит огромное количество данных, и данные в кэше невалидны, получение
свежих данных без правильного проектирования БД и запросов может быть чрезмерно ресурсоемкой операцией.
Общей методикой для повышения производительности запросов к БД является создание индексов для тех столбцов таблицы, по которым делается выборка.
Например, если вам нужно найти запись о пользователе по `username`, вам надо создать индекс на `username`.
Обратите внимание, что в то время как индексирование может сделать SELECT запросы намного быстрее, оно будет замедлять INSERT, UPDATE и DELETE запросы.
Для сложных запросов к БД рекомендуется создавать представления базы данных (views), чтобы сэкономить время подготовки и разбора запросов.
Последнее, хотя и не менее важное: используйте `LIMIT` в ваших `SELECT` запросах. Это позволяет избежать извлечения
большого количество данных из базы данных и исчерпания памяти, выделенной для PHP.
## Использование обычных массивов <span id="using-arrays"></span>