RedisGraph теперь общедоступен, добавляя базу данных быстрых графов к линейке Redis. RedisGraph основан на линейной алгебре и умножении матриц для выполнения быстрых вычислений.
В отличие от существующих реализаций графовых баз данных, RedisGraph представляет связанные данные в виде матриц смежности, а не списков смежности для каждой точки данных. Данные представлены с использованием разреженных матриц, а библиотека GraphBLAS используется для операций с разреженными матрицами для поддержки RedisGraph для хранения, управления и обработки графов.
RedisGraph основан на модели графа свойств, и его узлы и отношения (вершины и ребра) могут иметь атрибуты, а узлы могут быть помечены. В качестве языка запросов он использует Cypher, а запросы Cypher переводятся в выражения линейной алгебры. Cypher — это декларативный язык, основанный на SQL, для визуального описания шаблонов в графах с использованием синтаксиса ascii-art.
Команда, стоящая за RedisGraph, говорит, что первоначальные тесты показали, что RedisGraph в 6-600 раз быстрее, чем существующая база данных графов. Redis — это однопоточный процесс по умолчанию, и нет возможности разделить графы на несколько сегментов.
Это был осознанный выбор, потому что разработчики заявляют, что хранение всех данных в одном сегменте позволяет ускорить выполнение запросов, избегая при этом сетевых накладных расходов между сегментами. Питер Кайо, менеджер по продукту RedisGraph, объяснил, что:
RedisGraph привязан к единственному потоку Redis для поддержки всех входящих запросов и включает пул потоков, который принимает настраиваемое количество потоков во время загрузки модуля для обработки более высокой пропускной способности. Каждый запрос графа принимается основным потоком Redis, но рассчитывается в один из потоков пула потоков. Это позволяет легко масштабировать операции чтения и обрабатывать большую пропускную способность. Каждый запрос в любой момент времени выполняется только в одном потоке «.
Это отличается от других реализаций графовых баз данных, которые обычно выполняют каждый запрос на всех доступных ядрах машины. Команда Redis считает, что их подход больше подходит для реальных случаев использования в реальном времени, когда высокая пропускная способность и низкая задержка при одновременных операциях более важны, чем одновременная обработка одного сериализованного запроса. В блоге Redis есть интересное объяснение тестирования RedisGraph.
RedisGraph теперь является частью нового модуля Redis Enterprise, а также может использоваться под лицензией, доступной для исходного кода Redis.