да, конюшни неизменны по дизайну - это потрясающая особенность
Шильдмейер
Как тогда он может быть одновременно отсортирован и неизменен?
xjcl
56
"SSTable обеспечивает постоянную, упорядоченную неизменяемую карту от ключей к значениям, где и ключи, и значения являются произвольными байтовыми строками. Предоставляются операции для поиска значения, связанного с указанным ключом, и для перебора всех пар ключ / значение в указанный диапазон ключей. Внутри каждая таблица SSTable содержит последовательность блоков (обычно каждый блок имеет размер 64 КБ, но это можно настроить). Индекс блока (хранится в конце таблицы SSTable) используется для поиска блоков; индекс загружается в память при открытии SSTable. Поиск может быть выполнен с помощью одного поиска на диске: сначала мы находим соответствующий блок, выполняя двоичный поиск в индексе в памяти, а затем считываем соответствующий блок с диска. Необязательно, SSTable могут быть полностью отображены в памяти, что позволяет нам выполнять поиск и сканирование, не касаясь диска."
"не касаясь диска" -> "не зная, что к диску прикасались". Ввод-вывод с отображением памяти - очень удобный метод, поскольку он делегирует фактический ввод-вывод операционной системе, предполагая, что он может хорошо выполнять кэширование (особенно когда несколько процессов совместно используют один и тот же файл). Но у него есть недостаток: вы не можете его контролировать. Если страница не находится в памяти, поток блокируется и не может выполнять другие операции; Сравните это с «асинхронным вводом-выводом», где вы можете зарегистрировать обратный вызов и выполнять другие действия в том же потоке, пока ввод-вывод находится на рассмотрении.
ithkuil
2
@ithkuil: вы можете полностью контролировать ввод-вывод с отображением памяти, по крайней мере, до такой степени, чтобы быть в состоянии гарантировать, что определенные страницы находятся в памяти или были зафиксированы на диске (все еще есть место для маневра для страниц, которые не гарантированно находятся в память но ну очень могло быть). Вот что такое удивительные вещи, как mlock (), msync () и MAP_LOCKED. Вы также можете получить представление о том, что в настоящее время загружается, а что нет, с помощью mincore ().
Кристофер Смит
2
@ChristopherSmith: да, вы правы, есть способы контролировать это. Однако обычно он используется для критических разделов производительности (в реальном времени) или проблем, связанных с безопасностью (например, чтобы избежать замены пароля в памяти на диске). Файлы с отображением в память очень полезны именно потому, что вам не нужно решать, сколько из них хранить в памяти; в противном случае вы могли бы просто прочитать весь файл в памяти без mmap и добиться того же эффекта. Фактически, я просто просмотрел код cassandra; единственный вызов mlockall(MCL_CURRENT);делается при запуске. См. Также: goo.gl/AEgPM
SSTable (напрямую сопоставленный с GFS) - это неизменяемое хранилище на основе значений ключей. В нем хранятся фрагменты данных, каждый размером 64 КБ.
Определения:
Указатель ключей: ключ и начальная позиция
Чанк - это единица хранения в GFS, управление репликами осуществляется по частям.
SSTable (англ. Sorted Strings Table) - файл пар строк ключ / значение, отсортированных по ключам.
SSTable обеспечивает постоянную, упорядоченную неизменяемую карту от ключей к значениям, где и ключи, и значения являются произвольными байтовыми строками.
Внутри каждый SSTable содержит последовательность блоков (обычно
каждый блок имеет размер 64 КБ, но это можно настроить).
Ответы:
Таблица сортированных строк (заимствована из Google) представляет собой файл пар строк ключ / значение, отсортированных по ключам.
источник
"SSTable обеспечивает постоянную, упорядоченную неизменяемую карту от ключей к значениям, где и ключи, и значения являются произвольными байтовыми строками. Предоставляются операции для поиска значения, связанного с указанным ключом, и для перебора всех пар ключ / значение в указанный диапазон ключей. Внутри каждая таблица SSTable содержит последовательность блоков (обычно каждый блок имеет размер 64 КБ, но это можно настроить). Индекс блока (хранится в конце таблицы SSTable) используется для поиска блоков; индекс загружается в память при открытии SSTable. Поиск может быть выполнен с помощью одного поиска на диске: сначала мы находим соответствующий блок, выполняя двоичный поиск в индексе в памяти, а затем считываем соответствующий блок с диска. Необязательно, SSTable могут быть полностью отображены в памяти, что позволяет нам выполнять поиск и сканирование, не касаясь диска."
источник
mlockall(MCL_CURRENT);
делается при запуске. См. Также: goo.gl/AEgPMТаблетка хранится в виде SSTables.
SSTable (напрямую сопоставленный с GFS) - это неизменяемое хранилище на основе значений ключей. В нем хранятся фрагменты данных, каждый размером 64 КБ.
Определения:
источник
SSTable (англ. Sorted Strings Table) - файл пар строк ключ / значение, отсортированных по ключам.
SSTable обеспечивает постоянную, упорядоченную неизменяемую карту от ключей к значениям, где и ключи, и значения являются произвольными байтовыми строками.
Внутри каждый SSTable содержит последовательность блоков (обычно
каждый блок имеет размер 64 КБ, но это можно настроить).
источник