Статьи

Поиск элементов в Hazelcast Map с помощью ValueExtractor

Hazelcast предоставляет разработчику довольно удобные и мощные средства поиска элементов в IMap, называемые Distributed Queries. К сожалению официальная документация описывает только базовые варианты использования и совсем мало информации о возможностях Value Extractors. В данной статье постараюсь описать свой опыт использования Value Exctractors для решения задач поиска в IMap, когда значением в IMap является коллекция объектов и нам нужно найти запись в IMap у которой есть заданный элемент в коллекции. Итак, начнем с варианта, когда у нас есть структура для хранения корзины покупателя для какого-нибудь интернет магазина, например:

Читать далее →

14 января 2018 г.

Bucketing: разбиваем большие партиции с помощью согласованного хэширования

Слишком большие партиции У Partition Key (ключ раздела) есть два основных аспекта: С точки зрения пользователя, этот ключ определяет как пользователь будет читать данные. Является основным параметром при создании модели данных. С точки зрения самой Apache Cassandra, определяет где физически будут находится данные в кластере, на каких узлах. Оптимальным вариантом модели данных, с точки зрения скорости чтения, будет записать все, что нам нужно в одну партицию. Зная ключ этой партиции, мы за один запрос к базе получим все что нам нужно.

Читать далее →

2 апреля 2017 г.

Асинхронный API драйвера как замена для неправильного использования IN и Batch statements

На практике бывают ситуации когда нужно выполнить большое количество однотипных запросов к Cassandra, как правило это приводит к проблеме производительности. Разработчики довольно часто пытаются решить эту проблему с помощью средств для этого не предназначенных, таких как выражение IN и Batch statements, что в свою очередь приводит к другим нехорошим ситуациям. В данной статье расскажу об этих проблемах и почему не стоит злоупотреблять IN и батчами, и почему нужно использовать асинхронные запросы.

Читать далее →

12 июня 2016 г.

Метрики Apache Cassandra — часть 2: HintedHandOffManager

В этой статье пойдет речь о хинтах (hints) и о метриках, которые позволяют их отслеживать. По личному опыту скажу, что понимание и отслеживание данных метрик помогло на одном из проектов решить проблему с рассинхронизацией данных между репликами. Неконсистентность Для начала кратко расскажу о проблеме. Есть некоторая распределенная система использующая Apache Cassandra в качестве хранилища, где Replication Factor = 2 и все запросы к базе выполняются с Consistency Level = ONE. С течением времени, нагрузки и количество узлов системы росли.

Читать далее →

20 марта 2016 г.

Метрики Apache Cassandra - часть 1: org.apache.cassandra.request

В предыдущей статье были описаны базовые понятия и принципы чтения и анализа метрик Apache Cassandra. В сегодняшней статье будет подробно рассказано о конкретных метриках из раздела org.apache.cassandra.request (и его близнеце org.apache.cassandra.metrics:type=ThreadPools,path=request), о рекомендуемых значениях и причинах отклонения от этих значений. Данные метрики в основном характеризуют производительность кластера и влияют на скорость обработки запросов. Если есть подозрения в низкой скорости работы Кассандры, то значения данных метрик помогут локализовать узкое место в производительности.

Читать далее →

28 февраля 2016 г.

Введение в метрики Apache Cassandra

Для чего нужны метрики В этой статье опишу базовые понятия и расскажу как правильно читать метрики. В последующих статьях расскажу про некоторые конкретные метрики, на что они влияют и что может влиять на них. Метрики - это численные показатели каких-либо свойств системы. Они являются очень полезным инструментом для обнаружения и локализации проблем, возникающих в процессе эксплуатации компьютерных систем. Отслеживание метрик должно быть обязательной частью мониторинга системы, иначе неизбежно появится необъяснимая неведомая “магия” в поведении системы. Кроме того, метрики крайне полезны при тестировании производительности и определении узких мест системы.

Читать далее →

14 февраля 2016 г.

Использование меток времени в Cassandra

Что такое метка времени или timestamp Метка времени (timestamp) является составной частью колонки (column), также как имя колонки и её значение. Каждая операция модификации данных имеет свою метку времени. Метка времени необходима для задания правильной последовательности операций изменения данных и определения наиболее актуальной версии данных. Как работают метки времени Операция изменения данных в кассандре - это всегда добавление новой колонки, старые “версии” данных никуда не исчезают, а только лишь становятся неактуальными, а актуальной считается колонка с самой большой меткой времени.

Читать далее →

24 января 2016 г.

Две базовые особенности Apache Cassandra

В статье пойдет речь о двух базовых вещах, которые, как ни странно, многие разработчики упускают из виду при написании клиентского кода, особенно когда работают с CQL: Cassandra - это хранилище типа ключ-значение. Cassandra - это распределенное децентрализованное хранилище. Хранилище ключ-значение (key-value) Очень важно понимать, что вы, по сути, работаете с Map (в терминах java), и чтобы получить данные из базы, вам нужен ключ. При работе с CQL это может быть не так очевидно, по скольку CQL скрывает особенности реализации хранилища в угоду простоте использования и схожести с SQL, который в свою очередь позволяет делать выборки по любым полям.

Читать далее →

10 января 2016 г.