[1/3] Cassandra: The Definitive Guide, 3rd edition (Рубрика Architecture)
Уже больше года назад я прочитал эту книгу про популярную NoSQL базу данных и запланировал написать краткое саммари. Но когда я начал писать саммари, то понял, что сначала нужно сделать отдельные посты
- Про CAP теорему
- Про формализацию CAP теоремы и ее доказательство
- Про теорему PACELC (расширение CAP)
- Про модели консистентности от Jepsen
В этих постах изложена вся информация, которая нужна для того, чтобы переходить к изучению книги, что состоит из следующих частей
1. Beyond Relational Databases - в этой главе приводится кратка инфа, из тех постов, что я привел выше 2. Introducing Cassandra - здесь автор приводит ключевые слова, которые характеризуют Cassandra в формате elevator pitch и продает читателям ее крутость: distributed and decentralized, elastic scalability, high availability and fault tolerance, tuneable consistency, Brewer’s CAP Theorem, row-oriented, high performance:) 3. Installing Cassandra - базовое описание установки кластера, создание keyscpace (аналог database в RDBMS) и tables. Этой главы хватит для того, чтобы поднять кластер для экспериментов, но для администрирования стоит почитать доки или книгу для администраторов Cassandra 4. The Cassandra Query Language - эту главу автор начинает с того, что вспоминает модель данных в RDBMS. А дальше он проводит параллели с моделью данных в Cassandra. Все начинается с пар мапы key-value, что вместе с primary key является row в Cassandra. Дальше набор row собирается в партицию. Внутри строки есть primary key, который в Cassandra является составным, который состоит из обязательно partition key и опционального набора clustering columns. Partition key определяет как строки распределены по нодам кластера, а набор clustering columns определеляет порядок размещения строк уже внутри ноды. Еще есть static column для оптимизаций - это колонка, которая не входит в primary key, но все строки внутри partition шарят общее значение. Партиции собираются в таблички, таблички собираются в keyspace, а keyspace размещаются на cluster. Дальше автор рассказывает про типы данных в Cassandra, которых достаточно много и в которых есть интересные типы вида counter, set, list, map, tuples. 5. Data Modeling - самая интересная глава, в которой авторы рассказывают про моделирование внутри Cassandra и как оно отличается от моделирования внутри RDBMS. Если говорить про RDBMS, то там мы идем от концептуальной модели предметной области. Мы нормализуем данные и раскладываем их удобно с точки зрения консистентного хранения данных. Дальше мы можем относительно просто писать нужные нам деларативные запросы на получение данных, где мы спокойно используем joins, соединяя таблицы как нам требуется. И если нам надо писать другие запросы на выбор данных, то это с высокой вероятностью можно сделать достаточно просто.
В Cassandra мы моделируем данные совсем по другому. Авторы книги показывают это на примере моделирования сервиса для букинга отелей. В Cassandra надо идти не от концептуальной модели предметной области, а от модели запросов (query model) и авторы дают такой совет
Think of the most common query paths your application will use, and then create the tables that you need to support them. Целью является создание такой модели данных в Cassandra, который минимизирует количество партиций, которые нам надо потрогать, чтобы ответить на запрос. Суть в том, что партиция является единицей хранения и если мы попадаем в одну партицию, то обычно получаем оптимальную производительность. Отдельно стоит отметить, что сортировка данных в Cassandra тоже является дизайн решением, так как данные на ноде внутри партиции раскладываются в том порядке, что определен набором clustering columns. Кстати, для моделирования данных в Cassandra используются Chebotko diagrams, на которых моделирование как раз идет от query, которые поддерживаются табличками, а дальше для таблицы указываю входящие колонки и все виды ключей.
Обзор оставшейся части книги в следующих постах: 2 и 3.
#Software #Architecture #DistributedSystems #SystemDesign