|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
Предположим, в памяти B+-Tree. Есть файл index.0.full , в который записаны блоки этого B+-Tree. Откуда он взялся (курица/яйцо) пока опустим. Он не изменяем. Мы ходим в нашу СУБД, она подгружает какие-то блоки из index.data , большинство блоков только читаются, а какие-то блоки меняются. Если блок поменялся, он приобретает флаг "dirty" и из LRU уже выпасть не может. Как только RAM забилась, (слишком много изменённых блоков), пишем все изменённые блоки в новый файл index.1.part и снимаем с них флаг "dirty", теперь они могут быть вытеснены на общих правах из LRU, в общем здесь можно освободить RAM как угодно. Теперь наша СУБД смотрит на 2 "снимка": index.0.full index.1.part Если какой-то блок N есть в обоих, то его валидная копия берётся из самого свежего файла, ясен пень. СУБД живёт дальше, в какой-то момент появляется index.2.part и так далее. Файлы .part , предположим, полностью заменяют друг друга, а не дополняют. То есть система всегда смотрит на свежайший .full и на свежайщий .part . При записи очередного .part, все блоки из предыдущего .part тупо копируются в новый .part. Короче, дисковые данные этой СУБД всегда лежат в .full и .part, если блок есть в .part - читается оттуда, если его там нет, то из .full и так далее. В какой-то момент, когда .part дорос до критического размера, мы пишем новый "полный" - index.123.full . Короче, ни один файл на диске никогда не меняется. Ещё не дописавшийся файл имеет суффикс ".temp" и система не будет его читать, если упала в прошлый раз при попытке записать очередной файл, а догонится из бинлога. С точки зрения админа, это суперпростая система - он может смело бекапить последние .full и .part плюс всегда растущий бинлог и не думать о том, что сейчас что-нибудь, что он копирует, изменяется. Ну и периодически дропает старые .full и .part файлы. Чем в целом плоха такая система? Для чего, например, в InnoDB сделано НЕ ТАК, а мы хотим и изменяем .idb через double write buffer и вот это всё? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2021, 19:04 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
ferromagnet, потому что в момент формирования index.123.full придется останавливать мир, а что бы прочесть блок 100500, который не в кеше то нужно будет прочесть full и абсолютно все part. и так с каждым блоком не из кеша. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2021, 20:04 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
H5N1 ferromagnet, потому что в момент формирования index.123.full придется останавливать мир Не придётся. Говорим хранилищу "войти в режим COW", в котором оно перед модификацией блока гарантирует, что немодифицированная копия этого блока лежит в "теневой таблице" (если его там ещё нет - делает копию и кладёт), откуда (из "теневой таблицы") наша записывалка .full и берёт блоки с бОльшим приоритетом. Таким образом, записывалка индекса всегда видит все блоки, какими они были на момент взведения атомарного флага "мы сейчас в режиме COW". После записи .full записывалка индекса снимает флаг и выкидывает теневую таблицу. автор а что бы прочесть блок 100500, который не в кеше то нужно будет прочесть full и абсолютно все part. и так с каждым блоком не из кеша. Таблицы блоков (индекс телефонной книги) .full и .part всегда в памяти. Мы можем глядя только на оперативу сказать, в каком из файлов .full или .part лежит самая актуальная версия блока (посмотреть в inmemory таблицу .part - если там такого блока нет, значит его надо читать из .full). Далее за одно обращение к диску читаем блок из того или иного файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2021, 22:15 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
ferromagnet Не придётся. Говорим хранилищу "войти в режим COW", в котором оно перед модификацией блока гарантирует, что немодифицированная копия этого блока лежит в "теневой таблице" (если его там ещё нет - делает копию и кладёт), откуда (из "теневой таблицы") наша записывалка .full и берёт блоки с бОльшим приоритетом. Таким образом, записывалка индекса всегда видит все блоки, какими они были на момент взведения атомарного флага "мы сейчас в режиме COW". После записи .full записывалка индекса снимает флаг и выкидывает теневую таблицу. повеяло трупом firebird. такая "субд" загнется от ио. это же 3 копии всей базы. index.0.full -> shadow -> index.1.full ferromagnet Таблицы блоков (индекс телефонной книги) .full и .part всегда в памяти. Мы можем глядя только на оперативу сказать, в каком из файлов .full или .part лежит самая актуальная версия блока (посмотреть в inmemory таблицу .part - если там такого блока нет, значит его надо читать из .full). Далее за одно обращение к диску читаем блок из того или иного файла. так это не работает. во первых нет гарантий, что влезет в память, во вторых разные транзакции разные версии блоков должны видеть. ели запрос стартанул 20 минут назад, то ему по барабану какая там последняя версия блока. его интересуют блоки, какие были 20 минут назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2021, 23:07 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
H5N1 такая "субд" загнется от ио. это же 3 копии всей базы. index.0.full -> shadow -> index.1.full Можете написать конкретно какая операция конкретно загнётся от ИО в какой момент? Что вы там такого по ИО собрались дикого делать с тремя копиями и зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:57 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
H5N1 так это не работает. во первых нет гарантий, что влезет в память "Это" - это что именно? Я ведь описал, что как только мы забили память, мы пошли скинули всё в .part, например. Точно так же, когда у какого-нибудь InnoDB накапливается много изменённых страниц, он бежит их куда-то там скидывать, в свой файл таблиц или бинлог (checkpoint process в Postgres). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 15:00 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
ferromagnet мы пошли скинули всё в .part, например. И на это время тормознули все остальные операции. Не взлетит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2021, 13:43 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov ferromagnet мы пошли скинули всё в .part, например. И на это время тормознули все остальные операции. Не взлетит. Не тормознули. Описано ведь в стартовом посте это. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2021, 17:49 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
В стартовом посте описано недопонимание многопоточности и бутылочных горлышек. Сброс файла должен идти под локом и сожрёт все доступные иопсы. Не взлетит. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:09 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В стартовом посте описано недопонимание многопоточности и бутылочных горлышек. Сброс файла должен идти под локом и сожрёт все доступные иопсы. Не взлетит. В данном посте наблюдается непонимание вообще всего. Что за "сброс файла"? Какие конкретно "ресурсы"? Каким "локом" и что от чего изолирующим и зачем при наличии COW? Вы понимаете что такое copy-on-write в контексте первого поста и как оно в описании работает? Похоже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 20:43 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
ferromagnet Вы понимаете что такое copy-on-write в контексте первого поста и как оно в описании работает? Похоже нет. Ну, может и нет. Удачи Вам в реализации. Об успехах не забудьте похвастаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 14:39 |
|
Архитектура хранения данных на диске. Что лучше - изменяемый файл или снимки?
|
|||
---|---|---|---|
#18+
ferromagnet С точки зрения админа, это суперпростая система - он может смело бекапить последние .full и .part плюс всегда растущий бинлог и не думать о том, что сейчас что-нибудь, что он копирует, изменяется. Ну и периодически дропает старые .full и .part файлы. Чем в целом плоха такая система? Для чего, например, в InnoDB сделано НЕ ТАК, а мы хотим и изменяем .idb через double write buffer и вот это всё? Идея интересная. Но были аналоги. event-store . Системы которые не перезаписывают данные никогда. Просто пишут большой лог бизнес-фактов а специальные триггеры строят по ним views. Режется ли лог на порции я не помню но это не суть важно. Свойства бэкапа - теже самые. Даже лучше. Нет пульсаций. И размер архивных файлов можно настраивать под себя. О недостатках. авторкак только RAM забилась, (слишком много изменённых блоков), пишем все изменённые блоки в новый файл index.1.part Как выше уже писал один господин, данная система будет периодически выходить из номинального режима нагрузки в максимальный. Эти чекпоинты. Фазы уборки мусора. Или уплотнения как SSTable Cassandra, все это техники которые нарушают обычный режим системы. И конечно с этой точки зрения лучше чтобы файлы переписывались чем создавали свои собственные копии. Трудно себе также представить DBMS с терабайтным размером которая периодически еще и требует свободного места с "запасом" для компактизации или уплотнения живых даннных. Всегда-ли у нас есть эти свободные терабайты? Я не знаю. Скорее всего нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2021, 00:46 |
|
|
start [/forum/topic.php?fid=48&tid=1856523]: |
0ms |
get settings: |
7ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
56ms |
get topic data: |
3ms |
get forum data: |
0ms |
get page messages: |
232ms |
get tp. blocked users: |
2ms |
others: | 348ms |
total: | 656ms |
0 / 0 |