 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Neo4j — grafowa baza danych

# Neo4j — grafowa baza danych: instalacja i Cypher query

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS / Bazy danych

Neo4j to najpopularniejsza grafowa baza danych. Zamiast tabel ze wierszami przechowuje dane jako węzły (nodes) połączone relacjami (relationships). Każdy węzeł i relacja mogą mieć właściwości (properties). To podejście sprawia, że zapytania "znajdź wszystkich znajomych znajomych użytkownika X" lub "wykryj pętle transakcji wskazujące na pranie pieniędzy" są trywialne — zamiast złożonych wielokrotnych JOIN-ów w SQL, Cypher obsługuje te wzorce natywnie i wydajnie. Ten artykuł przeprowadzi Cię przez instalację, podstawy Cypher i typowe zastosowania.

## Instalacja — Docker (zalecane) i apt

\# === Metoda 1: Docker (najszybsza) ===
docker run -d \\
  --name neo4j \\
  -p 7474:7474 \\   # HTTP/Browser UI
  -p 7687:7687 \\   # Bolt protocol (aplikacje)
  -e NEO4J\_AUTH=neo4j/TajneHaslo123 \\
  -v neo4j-data:/data \\
  -v neo4j-logs:/logs \\
  neo4j:5-community

# Dostep: http://localhost:7474 (login: neo4j / TajneHaslo123)

# === Metoda 2: apt (Ubuntu) ===
wget -O - https://debian.neo4j.com/neotechnology.gpg.key | \\
  sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
echo 'deb \[signed-by=/usr/share/keyrings/neo4j.gpg\] https://debian.neo4j.com stable latest' | \\
  sudo tee /etc/apt/sources.list.d/neo4j.list
sudo apt update && sudo apt install -y neo4j

# Ustaw haslo
sudo neo4j-admin dbms set-initial-password TajneHaslo123

sudo systemctl enable --now neo4j
sudo systemctl status neo4j

# neo4j.conf - kluczowe ustawienia
# server.memory.heap.initial\_size=1g
# server.memory.heap.max\_size=2g
# server.memory.pagecache.size=1g
# server.default\_listen\_address=0.0.0.0   # Ostroznie z tym!

# Polaczenie przez Cypher Shell
cypher-shell -u neo4j -p TajneHaslo123

## Cypher — podstawy języka zapytań

// === TWORZENIE DANYCH ===

// Tworzenie wezlow (nodes)
CREATE (alice:User {name: 'Alice', age: 30, city: 'Warsaw'})
CREATE (bob:User {name: 'Bob', age: 25, city: 'Krakow'})
CREATE (charlie:User {name: 'Charlie', age: 35, city: 'Warsaw'})

// Tworzenie relacji
MATCH (a:User {name: 'Alice'}), (b:User {name: 'Bob'})
CREATE (a)-\[:FOLLOWS {since: '2024-01-01'}\]->(b)

MATCH (a:User {name: 'Alice'}), (b:User {name: 'Charlie'})
CREATE (a)-\[:FOLLOWS\]->(b)

// MERGE - twórz jesli nie istnieje (upsert)
MERGE (p:Product {id: 'prod-001'})
ON CREATE SET p.name = 'Laptop', p.price = 3999
ON MATCH SET p.updatedAt = timestamp()

// === ZAPYTANIA ===

// Znajdz wszystkich uzytkownikow
MATCH (u:User) RETURN u.name, u.city ORDER BY u.name

// Kogo obserwuje Alice
MATCH (alice:User {name: 'Alice'})-\[:FOLLOWS\]->(followed:User)
RETURN followed.name

// Wspolni znajomi (friends of friends)
MATCH (alice:User {name: 'Alice'})-\[:FOLLOWS\]->(mid:User)-\[:FOLLOWS\]->(fof:User)
WHERE NOT (alice)-\[:FOLLOWS\]->(fof) AND alice <> fof
RETURN DISTINCT fof.name AS recommendation

// Najdluzsze sciezki (np. fraud detection)
MATCH path = shortestPath(
  (a:User {name: 'Alice'})-\[:FOLLOWS\*..5\]->(b:User {name: 'Charlie'})
)
RETURN path, length(path) AS hops

## Indeksy, constraints i wydajność

// Indeks - przyspiesza wyszukiwanie po wlasciwosci
CREATE INDEX user\_name FOR (u:User) ON (u.name)
CREATE INDEX user\_city FOR (u:User) ON (u.city)

// Indeks zlozonyz
CREATE INDEX order\_date\_status FOR (o:Order) ON (o.date, o.status)

// Constraint - unikalne wartosci (tez tworzy indeks)
CREATE CONSTRAINT user\_id\_unique FOR (u:User) REQUIRE u.id IS UNIQUE
CREATE CONSTRAINT product\_sku FOR (p:Product) REQUIRE p.sku IS UNIQUE

// Listowanie indeksow i constraints
SHOW INDEXES
SHOW CONSTRAINTS

// EXPLAIN - plan wykonania zapytania (analiza wydajnosci)
EXPLAIN MATCH (u:User {name: 'Alice'}) RETURN u
// Szukaj: "NodeIndexSeek" (uzyl indeksu) vs "AllNodesScan" (pelny skan)

// PROFILE - szczegolowe metryki
PROFILE MATCH (u:User {name: 'Alice'})-\[:FOLLOWS\*2\]->(fof:User)
RETURN fof.name
// Pokazuje db hits, rows i czas per operator

## APOC library i import CSV

\# Instalacja APOC (Awesome Procedures On Cypher)
# Docker: dodaj do docker run:
# -e NEO4JLABS\_PLUGINS='\["apoc"\]'

# apt: skopiuj apoc jar do plugins/
NEO4J\_HOME=/var/lib/neo4j
curl -L https://github.com/neo4j/apoc/releases/latest/download/apoc-5.x-all.jar \\
  -o ${NEO4J\_HOME}/plugins/apoc-5.jar
# Dodaj do neo4j.conf:
# dbms.security.procedures.allowlist=apoc.\*

// Import z pliku CSV (neo4j/import/users.csv)
// CSV: id,name,age,city
// 1,Alice,30,Warsaw

LOAD CSV WITH HEADERS FROM 'file:///users.csv' AS row
MERGE (u:User {id: toInteger(row.id)})
SET u.name = row.name,
    u.age = toInteger(row.age),
    u.city = row.city

// Masowe importowanie przez APOC (duze pliki)
CALL apoc.periodic.iterate(
  "LOAD CSV WITH HEADERS FROM 'file:///big-file.csv' AS row RETURN row",
  "MERGE (u:User {id: row.id}) SET u += row",
  {batchSize: 1000, parallel: false}
)

// Przydatne funkcje APOC
CALL apoc.meta.stats() YIELD labels, relTypesCount  // Statystyki grafu
CALL apoc.export.json.all('/tmp/export.json', {})   // Eksport

## Use cases — kiedy Neo4j się opłaca

Use case

Neo4j (graf)

PostgreSQL (relacyjna)

Social network (znajomi znajomych)

Natywny, szybki

Wolny (rekurencyjne CTE)

Rekomendacje produktów

Natywny (collaborative filtering)

Możliwy, skomplikowany SQL

Wykrywanie oszustw (fraud detection)

Szybki (analiza pętli transakcji)

Wolny (wiele JOIN-ów)

Knowledge graph / ontologie

Idealny

Trudny do zamodelowania

Prostota danych tabelarycznych

Nadmiarowy

Idealny

Transakcje finansowe ACID

Podstawowe ACID

Silne ACID, lepszy

## Najczęstsze pytania

Czym jest grafowa baza danych i kiedy jest lepsza od relacyjnej? +

Grafowa baza danych przechowuje dane jako węzły (nodes) i relacje (relationships) między nimi, zamiast tabel i wierszy. Jest lepsza od relacyjnej gdy: (1) dane są ze sobą silnie powiązane (social networks, fraud detection, rekomendacje), (2) często pytasz "jak daleko od A do B przez sieć znajomych/relacji", (3) schemat połączeń jest zmienny i trudny do zamodelowania w tabelach, (4) wykonujesz wielokrotne JOIN-y (relacyjna BD staje się wolna przy 5+ JOIN-ach, grafowa pozostaje szybka). Przykłady: LinkedIn (graph of connections), Netflix (recommendation engine), banki (wykrywanie oszustw przez analizę transakcji). Grafowa baza NIE jest lepsza dla prostych danych tabelarycznych, raportowania czy OLAP — tam PostgreSQL/ClickHouse są odpowiednie.

Co to jest Cypher i jak się różni od SQL? +

Cypher to deklaratywny język zapytań Neo4j, zaprojektowany dla grafów. SQL pyta "które wiersze spełniają warunki", Cypher pyta "jakie wzorce węzłów i relacji istnieją w grafie". Kluczowa różnica: Cypher używa graficznej składni do opisania wzorców — np. (a:User)-\[:FOLLOWS\]->(b:User) oznacza "użytkownik a obserwuje użytkownika b". Taki wzorzec jest natychmiastowo czytelny dla programisty. W SQL to samo wymagałoby tabeli users, tabeli follows i JOIN. Cypher jest otwarty jako openCypher (ISO GQL) i wspierany przez inne bazy (Amazon Neptune, Memgraph). Kluczowe słowa: MATCH (szukaj wzorca), CREATE (tworz węzły/relacje), WHERE (filtruj), RETURN (zwróć wyniki), MERGE (utwórz jeśli nie istnieje).

Czy Neo4j Community Edition wystarczy dla projektu produkcyjnego? +

Neo4j Community Edition jest open-source (GPL) i ma ograniczenia: brak klastrowania (tylko single-node), brak zaawansowanego monitorowania, brak security features (role-based access control jest podstawowe). Dla małych projektów, startup MVP lub aplikacji gdzie single point of failure jest akceptowalny — Community Edition wystarczy. Gdy potrzebujesz: wysokiej dostępności (klaster Causal Cluster), zaawansowanego RBAC, wsparcia enterprise, szyfrowania danych at rest — potrzebujesz Enterprise Edition (płatna). Neo4j AuraDB to managed cloud (za darmo do 200k węzłów na Free tier, potem płatne). Dla produkcji z krytycznymi danymi rekomendowane jest Enterprise lub AuraDB.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z 4+ GB RAM dla Neo4j — grafy wymagają pamięci dla cache

VPS + RAM

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikr.us

Budżetowy VPS do testów Neo4j Community Edition

Dev/Test

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

## Powiązane strony

-   [MongoDB na VPS — instalacja i replica set](/baza-wiedzy/mongodb-vps-instalacja)
-   [PostgreSQL na VPS — instalacja i konfiguracja](/baza-wiedzy/postgresql-vps-instalacja-konfiguracja)
-   [Docker na VPS — instalacja i Compose](/baza-wiedzy/docker-na-vps)
-   [Wszystkie artykuły](/baza-wiedzy/)