У меня есть некоторые вопросы о cassandra memtable. Буду благодарен за помощь.Умение с учетом понимания
Факты о memtable:
1), помещенный в ОЗУ;
2) для колонныСемейная конструкция;
3) может существовать несколько memtables для одного семейства столбцов;
Вопросы:
1) Когда дополнительный memtable для семьи колонки созданы? Какое условие необходимо? Я предполагаю, что после создания дополнительного файла журнала фиксации создаются дополнительные memtables. Это правда?
2) Что происходит после достижения порогового значения размера журнала регистрации? Я предполагаю, что начнет размещать memtables в очереди; после заполнения очереди начнет сбрасывать memtable в sstable, после чего удаляются старый журнал фиксации (на hdd) и соответствующий memtable s (в плунжере). В этом случае некоторая часть памяти memtable будет всегда пуста, и журнал фиксации всегда будет заполнен до 90-100%?
3) Что происходит, когда достигается порог размера памяти? Как и в предыдущем случае, начнется промывка до sstable? Некоторая часть журнала фиксации также будет всегда пустой, а память памяти будет заполнена до 90-100%?
4) О memtable_allocation_type: в официальных Recources - «offheap_buffers перемещает имя ячейки и значение объектов DirectBuffer Это имеет самое низкое воздействие на чтение - эти значения до сих пор.„Живые“Java буфера - но только уменьшает кучу значительно когда вы храните большие строки или капли ».. Что означает DirectBuffer? Он помещен в кучу java? Можете ли вы дать ссылки на сайты с информацией об этом?
большое спасибо!
Спасибо! Но в некоторых статьях и книгах существует различная информация. Где верно? 1) Это цитата из книги «Кассандра: окончательное руководство» Эбена Хьюитта: «Эта промывка является неблокирующей операцией, могут существовать несколько memtables для одного семейства столбцов, один ток и остальное, ожидающие вспышки». – bissquit
2) Хорошо.Зачем нужен параметр memtable_flush_queue_size? По умолчанию оно равно 4. 4 означает количество семейств столбцов. Цитата из официальной документации: "memtable_flush_queue_size (По умолчанию: 4) Количество полных memtables, чтобы разрешить отложенный флеш (memtables, ожидающий поток записи)". Что означает «полная память»? Если у меня есть 3 семейства столбцов в моем ключевом пространстве - у меня будет не более 3 memtable в ram? 3) Как и выше. 4) Я не знаю, что такое DirectBuffer. Он расположен вне родной памяти Кассандры? Предположим, что нет. Тогда почему мы можем увидеть описание «значения по-прежнему« живут »буферами Java»? – bissquit
Этот размер очереди здесь, потому что Cassandra как архитектура SEDA с рабочими очередями и всеми задачами выполняется через очереди томов. Это позволяет контролировать, сколько работы выполняется одновременно. Обычно 3 семейства столбцов означают 3 memtables. Если флеш занимает время (загруженный узел), могут быть некоторые ожидающие memtables, но это не номинальный случай. DirectBuffer - это область памяти, выделенная непосредственно с использованием JNA (возможно, с использованием malloc), она не может содержать «живых» Java-объектов, они должны быть сериализованы. Однако эта память не управляется JVM, поэтому игнорируется GC. –