Основы дизайна систем: хранилище

Хранилище - это хранение информации. Любое приложение, система или служба, которые вы программируете, должны будут хранить и извлекать данные, и это две основные цели хранилища.

Но дело не только в хранении данных, но и в их получении. Для этого мы используем базу данных. База данных - это программный уровень, который помогает нам хранить и извлекать данные.

Эти два основных типа операций, сохранение и извлечение, также по-разному называются «установить, получить» (set, get), «сохранить, получить» (store, fetch), «записать, прочитать» (write, read) и так далее. Чтобы взаимодействовать с хранилищем, вам нужно будет пройти через базу данных, которая действует как посредник для выполнения этих основных операций.

Слово «хранилище» иногда может заставить нас задуматься о нем в физических терминах. Если я «храню» свой велосипед в сарае, я могу ожидать, что он будет там, когда я в следующий раз открою сарай.

Но в компьютерном мире это не всегда происходит. Хранилище может быть двух типов: хранилище «Память» и хранилище «Диск».

Из этих двух дисковое хранилище имеет тенденцию быть более надежным и «постоянным». Дисковое хранилище - это постоянное хранилище. Это означает, что когда вы сохраняете что-то на Диск и выключаете питание или перезагружаете сервер, эти данные будут «сохраняться». Это не будет потеряно.

Однако, если вы оставляете данные в «Памяти», то они обычно стираются при выключении или перезапуске, или иным образом при потере питания.

Компьютер, который вы используете каждый день, имеет оба этих типа памяти. Ваш жесткий диск - «постоянное» хранилище на диске, а ваша оперативная память - временное хранилище памяти.

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

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

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

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

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

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

Эти вопросы и выводы требуют от вас тщательного рассмотрения возможных компромиссов.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Хэш-таблица: разрешение коллизий

Нормальные формы, пример нормализации в базе данных