Графы знаний

Knowledge Graphs на собеседовании

Senior-инженер пришёл на финал собеседования в LinkedIn. Вопрос: «Спроектируй Knowledge Graph для миллиарда профилей и сотен миллиардов связей between them». Слабый кандидат начнёт с того, что Knowledge Graph - это (subject, predicate, object). Сильный сразу спросит: каков RPS на чтение? Сколько hops запрашивает типовой query? Что критичнее - freshness или consistency? Эти уточняющие вопросы и есть демонстрация инженерного мышления - то самое, ради чего FAANG нанимает principal engineers за полмиллиона долларов в год.

  • **Facebook TAO** - распределённая graph DB обслуживает 1 миллиард активных пользователей, 200 миллиардов рёбер; именно эта архитектура - объект изучения на System Design собеседованиях
  • **Google Knowledge Graph** - 500+ миллиардов фактов о людях, местах и объектах; питает rich answers в поиске
  • **Microsoft Satori** - граф для Bing и Office 365; пример production применения semantic web технологий

Моделирование онтологии

Классический вопрос с собеседования в Amazon: «Спроектируй граф знаний для product catalog с миллиардом товаров». Слабый ответ - сразу нарисовать (Product)-[hasCategory]->(Category) и закончить. Сильный кандидат сначала уточняет: какие сущности кроме товаров (бренды, продавцы, отзывы, варианты)? Какие отношения нужны для поисковых сценариев? Как обрабатываются полиморфные сущности (например, «iPhone 15» - это и Product, и Model, и Brand)? Только потом - схема, и она получается на двух уровнях: онтология (Product, Category, Brand) и instances (конкретные товары).

Ключевые решения моделирования: RDF (triples с глобальными URIs) или property graph (узлы и рёбра со свойствами)? RDF лучше для semantic web с шарингом данных между организациями, property graph - для production-систем с интенсивными query workloads. Большинство FAANG-внедрений (Microsoft Satori, LinkedIn Knowledge Graph) используют property graph, потому что Cypher/Gremlin синтаксически удобнее SPARQL для типовых запросов.

Почему ответ «нарисую Product->Category и всё» считается слабым на FAANG-собеседовании по графам знаний?

Query patterns: Cypher, SPARQL, Gremlin

Следующий вопрос: «Как найти все товары, купленные пользователями, которые также купили текущий товар?» - классический collaborative filtering через граф. Слабый ответ - SQL-подобный JOIN из четырёх таблиц. Сильный - короткий Cypher: `MATCH (p:Product {id: $pid})<-[:BOUGHT]-(u:User)-[:BOUGHT]->(rec:Product) RETURN rec, count(u) AS strength ORDER BY strength DESC LIMIT 10`. Это - читаемо, оптимизатор использует индексы по типам рёбер, и масштабируется лучше JOIN при глубине 3+.

Что важно знать: переменная глубина пути - `MATCH (a)-[:KNOWS*1..3]->(b)` ищет в радиусе 1-3 хопов. Это - убийца производительности на dense узлах (пользователь с тысячами связей). Решение - ограничение через WHERE и эвристики, например брать только top-K самых сильных рёбер. Pattern matching в графах - NP-hard в общем случае; на собеседовании важно показать понимание сложности.

Почему Cypher предпочтительнее SQL для запросов глубины 3+ в графовых данных?

Embeddings и graph ML вопросы

Вопрос: «Как использовать knowledge graph для рекомендаций холодному пользователю?». Слабый ответ - просто запросом по графу. Сильный - комбинация: graph embeddings (TransE, ComplEx, RotatE) кодируют структуру графа в плотные векторы, потом задача рекомендации сводится к поиску ближайших соседей в embedding-пространстве. Для нового пользователя без истории строится embedding на основе известных атрибутов (страна, демография) и графовых соседей этих атрибутов.

Главные семейства методов: TransE моделирует тройку (head, relation, tail) как h + r ~ t в евклидовом пространстве - простой и быстрый, но не работает на симметричных отношениях. ComplEx использует комплексные числа и эффективно ловит асимметрию. GNN-подходы (R-GCN, GraphSAGE) учитывают локальное соседство при построении эмбеддинга. На собеседовании важно показать понимание trade-offs: TransE масштабируется на миллиарды triples, GNN - на сотни миллионов из-за стоимости message passing.

Почему TransE плохо работает на симметричных отношениях типа (Alice, married_to, Bob)?

System Design: KG на масштабе

Финальный вопрос: «Спроектируй knowledge graph для социальной сети с миллиардом узлов и сотнями миллиардов рёбер». Хороший ответ строится так: (1) выбор хранилища - Neo4j Enterprise или собственное на RocksDB/HBase; (2) sharding - по vertex-cut (hash узла) или edge-cut (граф разрезается так, чтобы минимизировать межшардовые рёбра); (3) репликация и failover; (4) query routing - где живёт планировщик запросов и как он избегает cross-shard JOIN; (5) caching горячих узлов на edge.

Production-решения: Facebook TAO - собственная распределённая графовая БД с миллиардами узлов, оптимизирована под чтение (10000:1 read/write ratio). LinkedIn Knowledge Graph - построен на гибриде RocksDB + Espresso. Microsoft Satori - кастомное хранилище под триплетную модель с шардингом по subject. Все они вынуждены жертвовать ACID-гарантиями ради масштаба: eventual consistency с конфликтным разрешением через CRDT или vector clocks.

Главное на собеседовании по knowledge graphs - знать синтаксис Cypher или SPARQL

FAANG-собеседование оценивает архитектурное мышление: моделирование онтологии с учётом sparse/dense узлов, выбор query language под workload, использование embeddings для cold-start, sharding для масштаба. Синтаксис - инструмент, не цель

Cypher или SPARQL - это всего лишь языки запросов. Сильный кандидат показывает понимание trade-offs: когда нужна графовая модель, когда реляционная; когда embeddings заменяют queries; как масштабировать граф до миллиардов узлов

Почему vertex-cut sharding обычно выбирают для production графовых баз вместо edge-cut?

Ключевые идеи

  • **Моделирование** - это не «нарисовать узлы и рёбра», а решить sparse/dense, versioning, polymorphism, inferred edges; стандарт FAANG-уровня
  • **Query languages** - Cypher для production property graphs, SPARQL для semantic web, Gremlin для императивных API; выбор зависит от workload
  • **Embeddings (TransE, ComplEx, RotatE, GNN)** - закрывают пробелы query languages: cold-start, similarity search, approximate reasoning
  • **Sharding и масштабирование** - vertex-cut для простоты, replication горячих узлов, async для celebrity-write проблемы; компромиссы вместо идеального решения

Связанные темы

Возврат к мотивации: вопросы FAANG по knowledge graphs синтезируют весь курс. Связь с предыдущими уроками:

  • Graph Neural Networks — GNN-подходы (R-GCN, GraphSAGE) - основа современных embedding-методов, обсуждаемых на собеседовании
  • Knowledge Graph Embeddings — TransE, ComplEx и RotatE - классические модели для query expansion и рекомендаций
  • Query Languages — Cypher, SPARQL, Gremlin - инструменты, которые требуют выбирать осознанно под конкретный workload

Вопросы для размышления

  • Когда стоит использовать knowledge graph вместо обычной реляционной БД, и какие сигналы указывают на необходимость такого перехода?
  • Если interviewer сказал «у нас стандартный triple store, но queries медленные», какие гипотезы о причинах стоит проверить в первую очередь?
  • Возврат к мотивации: на 45-минутном интервью невозможно спроектировать реальный production-граф. Что именно тогда оценивает интервьюер, и как кандидат может это продемонстрировать?

Связанные уроки

  • kg-13 — Scale KG - база для system design вопросов
  • kg-07 — KG Embeddings - обязательная тема interview
  • kg-09 — SPARQL/Cypher - практические вопросы запросов
  • kg-10 — QA over KG - ключевая задача на собеседованиях
  • ir-14 — IR и KG interview имеют общий system design формат
  • aie-63-graphrag — GraphRAG - пересечение KG и LLM, топ вопрос 2025
  • ml-01-intro
Knowledge Graphs на собеседовании

0

1

Войти