Флэш-память
Предполагается, что аппаратура и драйверы устройств скрывают многие реализационные детали, такие как конкретный аппаратный интерфейс к флэш-памяти. Например, флэш-память можно установить на системной плате компьютера, на слоте DIMM, на плате PCI или внутри стандартного корпуса диска. Во всех случаях предполагается наличие возможности прямой передачи данных (на основе DMA (direct memory access) или какого-то более совершенного механизма) между основной и флэш-памятью. Кроме того, предполагается, что либо имеется эффективная DMA-передача данных между флэш-памятью и диском, либо поддерживается буфер передачи в основной памяти. В первом приближении размер такого буфера передачи должен быть примерно равен произведению скорости передачи данных на величину задержки обменов с диском. Если требуется, чтобы операции записи на диск никогда не задерживали выполнение операций чтения с диска, в этих вычислениях должна учитываться дополнительная задержка отложенной записи.
Еще одно предположение состоит в том, что скорости передачи данных флэш-памяти и дисков являются сопоставимыми. Хотя скорость записи в флэш-память уступает скорости чтения, утверждается, что для некоторых продуктов эти скорости различаются менее чем в два раза (например, это так для основанного на флэш-памяти твердотельного диска компании Samsung). При необходимости скорость передачи можно повысить за счет использования механизмов массивов, широко распространенных для дисковых устройств []. В некоторых случаях может быть полезен даже механизм избыточности флэш-памяти [].
Поскольку надежность современной NAND-флэш-памяти падает после выполнения от 100000 до миллиона циклов перезаписи, предполагается, что обеспечиваются некоторые механизмы «выравнивания износа» («wear leveling»). Эти механизмы гарантируют, что все страницы или блоки страниц записываются с почти одинаковой частотой. Важно обратить внимание на сходство между алгоритмами выравнивания износа и файловыми системами с журнальным структурированием (log-structured file system) [, ], хотя при выравнивании износа перемещаются и стабильные, неизмененные данные, чтобы некоторые циклы перезаписи затрагивали их местоположения во флэш-памяти.
Заметим также, что и традиционные дисковые устройства не поддерживают большее число операций записи. Например, за шесть лет постоянной и непрерывной записи со скоростью 100 мегабайт в секунду диск объемом в 250 гигабайт будет полностью перезаписан меньше чем 80000 раз. Другими словами, если предположить, что файловые системы с журнальным структурированием пригодны для использования на дисковых массивах RAID-5 или RAID-6, то надежность современной NAND-флэш-памяти представляется сопоставимой. Аналогично этому, для перезаписи флэш-диска объемом в 32 гигабайта 100000 раз на скорости 30 мегабайт в секунду потребуется примерно три с половиной года.
В дополнение к наличию механизма выравнивания износа предполагается, что имеется некоторый асинхронный агент, пересылающий достаточно давно не использовавшиеся данные из флэш-памяти на диск и сразу же, без каких-либо дополнительных задержек, очищающий освободившиеся области памяти с целью их подготовки к будущей записи. У этого действия также имеется прямой двойник в файловых системах с журнальным структурированием, а именно, действие по очистке, подготавливающее место для будущей записи журнала. Различие состоит в том, что содержимое диска должно перемещаться редко, а содержимое флэш-памяти должно очищаться перед каждой следующей записью в ту же область памяти.
Как в случае файловых систем, так и для систем баз данных предполагается наличие раздельных механизмов для отслеживания и замещения страниц. Например, для управления традиционным буферным пулом обеспечиваются оба эти механизма, но для их поддержки используются две разные структуры данных. В стандартной схеме для замещения страниц используется список LRU, а для отслеживания страниц (т.е. для определения того, какие в буферном пуле содержатся страницы, и в каких кадрах буфера они располагаются) – хэш-таблица.
Предполагается, что структуры данных, поддерживающие алгоритм замещения, имеют небольшой размер, и к ним часто происходят обращения; поэтому они сохраняются в основной памяти.
Также предполагается, что информация для отслеживания страниц является настолько же персистентной, как и сами данные; таким образом, хэш-таблица буферного пула реинициализируется при перезапуске системы, но соответствующая информация должна сохраняться вместе с данными в пересистентном хранилище, например, на диске.
Как уже отмечалось, предполагается поддержка замещения страниц по требованию. Могут также иметься автоматические политики и механизмы для упреждающей выборки и отложенной записи.
На основе всего этого предполагается, что содержимое флэш-памяти является почти одним и тем же, независимо от того, расширяет ли флэш-память буферный пул или диск. Поэтому центральным вопросом является не то, что следует хранить в кэше, а то, как следует управлять содержимым флэш-памяти и ее сроком службы.
В системах баз данных флэш-память можно также использовать для поддержки журналов восстановления, поскольку короткое время доступа к этой памяти позволяет обеспечить очень быструю фиксацию транзакций. Однако такому использованию препятствуют ограничения по скорости записи. Возможно, в системах с двойной журнализацией можно совместить низкий уровень задержки с высоким уровнем пропускной способности, размещая один журнал на традиционном диске, а второй – в массиве чипов флэш-памяти.