Что такое SSTable?


Ответы:


106

Таблица сортированных строк (заимствована из Google) представляет собой файл пар строк ключ / значение, отсортированных по ключам.


4
Спасибо за еще один отличный ответ SO Cassandra! Кстати, вы видели этот вопрос: stackoverflow.com/questions/2573106/…
knorv

Это вообще неизменное?
Dean J

1
да, конюшни неизменны по дизайну - это потрясающая особенность
Шильдмейер

Как тогда он может быть одновременно отсортирован и неизменен?
xjcl

56

"SSTable обеспечивает постоянную, упорядоченную неизменяемую карту от ключей к значениям, где и ключи, и значения являются произвольными байтовыми строками. Предоставляются операции для поиска значения, связанного с указанным ключом, и для перебора всех пар ключ / значение в указанный диапазон ключей. Внутри каждая таблица SSTable содержит последовательность блоков (обычно каждый блок имеет размер 64 КБ, но это можно настроить). Индекс блока (хранится в конце таблицы SSTable) используется для поиска блоков; индекс загружается в память при открытии SSTable. Поиск может быть выполнен с помощью одного поиска на диске: сначала мы находим соответствующий блок, выполняя двоичный поиск в индексе в памяти, а затем считываем соответствующий блок с диска. Необязательно, SSTable могут быть полностью отображены в памяти, что позволяет нам выполнять поиск и сканирование, не касаясь диска."


4
"не касаясь диска" -> "не зная, что к диску прикасались". Ввод-вывод с отображением памяти - очень удобный метод, поскольку он делегирует фактический ввод-вывод операционной системе, предполагая, что он может хорошо выполнять кэширование (особенно когда несколько процессов совместно используют один и тот же файл). Но у него есть недостаток: вы не можете его контролировать. Если страница не находится в памяти, поток блокируется и не может выполнять другие операции; Сравните это с «асинхронным вводом-выводом», где вы можете зарегистрировать обратный вызов и выполнять другие действия в том же потоке, пока ввод-вывод находится на рассмотрении.
ithkuil

2
@ithkuil: вы можете полностью контролировать ввод-вывод с отображением памяти, по крайней мере, до такой степени, чтобы быть в состоянии гарантировать, что определенные страницы находятся в памяти или были зафиксированы на диске (все еще есть место для маневра для страниц, которые не гарантированно находятся в память но ну очень могло быть). Вот что такое удивительные вещи, как mlock (), msync () и MAP_LOCKED. Вы также можете получить представление о том, что в настоящее время загружается, а что нет, с помощью mincore ().
Кристофер Смит

2
@ChristopherSmith: да, вы правы, есть способы контролировать это. Однако обычно он используется для критических разделов производительности (в реальном времени) или проблем, связанных с безопасностью (например, чтобы избежать замены пароля в памяти на диске). Файлы с отображением в память очень полезны именно потому, что вам не нужно решать, сколько из них хранить в памяти; в противном случае вы могли бы просто прочитать весь файл в памяти без mmap и добиться того же эффекта. Фактически, я просто просмотрел код cassandra; единственный вызов mlockall(MCL_CURRENT);делается при запуске. См. Также: goo.gl/AEgPM
ithkuil

4
Вышеупомянутая цитата взята из газеты BigTable .
ShreevatsaR

4

Таблетка хранится в виде SSTables.

SSTable (напрямую сопоставленный с GFS) - это неизменяемое хранилище на основе значений ключей. В нем хранятся фрагменты данных, каждый размером 64 КБ.

Определения:

  • Указатель ключей: ключ и начальная позиция
  • Чанк - это единица хранения в GFS, управление репликами осуществляется по частям.

3
  • SSTable (англ. Sorted Strings Table) - файл пар строк ключ / значение, отсортированных по ключам.

  • SSTable обеспечивает постоянную, упорядоченную неизменяемую карту от ключей к значениям, где и ключи, и значения являются произвольными байтовыми строками.

  • Внутри каждый SSTable содержит последовательность блоков (обычно
    каждый блок имеет размер 64 КБ, но это можно настроить).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.