Skip to content
返回部署

部署 Neo4j

图数据库用于连接数据,Cypher 查询语言和图算法。

平台高级

为什么

Neo4j 以节点和关系存数据,连接查询(朋友的朋友、推荐)O(1) 而非 SQL 的 O(n) join。Cypher 是声明式图查询语言。

平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。

何时使用

社交网络、推荐引擎、欺诈检测和知识图谱用 Neo4j。简单 CRUD 避免(用 SQL)。

如何做

1. Docker — neo4j:5 镜像加 volume 2. 认证 — NEO4J_AUTH=neo4j/password 3. Cypher — Cypher Shell 或 Browser :7474 4. 导入 — LOAD CSV 或 APOC 过程 5. 索引 — CREATE INDEX FOR (n:User) ON (n.email) 6. 集群 — Neo4j Enterprise 因果集群 7. 驱动 — neo4j-driver 用于 JS/Python/Java

示例

# docker-compose.yml services: neo4j: image: neo4j:5 environment: NEO4J_AUTH: neo4j/password ports: ["7474:7474", "7687:7687"] volumes: [neo4jdata:/data] volumes: { neo4jdata: } # Cypher — 创建和查询 CREATE (alice:User {name: "Alice"})-[:KNOWS]->(bob:User {name: "Bob"}); MATCH (u:User {name: "Alice"})-[:KNOWS*1..2]-(friend) RETURN friend.name; # JS 驱动 import neo4j from "neo4j-driver"; const driver = neo4j.driver("bolt://localhost:7687", neo4j.auth.basic("neo4j", "password")); const session = driver.session(); const result = await session.run("MATCH (u:User) RETURN u");

常见问题

  • ⚠无索引 — 全图扫描,查找属性建索引
  • ⚠内存过低 — Neo4j 最少 2-4GB,设 NEO4J_server_memory_heap_max__size
  • ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致

最佳实践

  • ✓所有查找属性建索引 — 大幅加速查询
  • ✓用 APOC 过程 — 导入、遍历和 ETL 工具函数
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答